mirror of https://github.com/RPCS3/rpcs3.git
d3d12: Fix fragment constant filling
The command buffer does not necessarily set them in order...
This commit is contained in:
parent
1c803e725b
commit
043adab2ce
|
@ -492,15 +492,22 @@ void D3D12GSRender::FillPixelShaderConstantsBuffer()
|
||||||
{
|
{
|
||||||
u32 vector[4];
|
u32 vector[4];
|
||||||
// Is it assigned by color register in command buffer ?
|
// Is it assigned by color register in command buffer ?
|
||||||
if (!m_fragment_constants.empty() && offsetInFP == m_fragment_constants.front().id - m_cur_fragment_prog->offset)
|
// TODO : we loop every iteration, we might do better...
|
||||||
|
bool isCommandBufferSetConstant = false;
|
||||||
|
for (const RSXTransformConstant& c : m_fragment_constants)
|
||||||
{
|
{
|
||||||
const RSXTransformConstant& c = m_fragment_constants.front();
|
size_t fragmentId = c.id - m_cur_fragment_prog->offset;
|
||||||
vector[0] = (u32&)c.x;
|
if (fragmentId == offsetInFP)
|
||||||
vector[1] = (u32&)c.y;
|
{
|
||||||
vector[2] = (u32&)c.z;
|
isCommandBufferSetConstant = true;
|
||||||
vector[3] = (u32&)c.w;
|
vector[0] = (u32&)c.x;
|
||||||
|
vector[1] = (u32&)c.y;
|
||||||
|
vector[2] = (u32&)c.z;
|
||||||
|
vector[3] = (u32&)c.w;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
if (!isCommandBufferSetConstant)
|
||||||
{
|
{
|
||||||
auto data = vm::ptr<u32>::make(m_cur_fragment_prog->addr + (u32)offsetInFP);
|
auto data = vm::ptr<u32>::make(m_cur_fragment_prog->addr + (u32)offsetInFP);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue