diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp index 83b1a02099..315ef82f4d 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp @@ -284,12 +284,6 @@ void D3D12GSRender::setScaleOffset() void D3D12GSRender::FillVertexShaderConstantsBuffer() { - for (const RSXTransformConstant& c : m_transform_constants) - { - size_t offset = c.id * 4 * sizeof(float); - m_vertexConstants[offset] = c; - } - size_t bufferSize = 512 * 4 * sizeof(float); assert(m_constantsData.canAlloc(bufferSize)); @@ -297,15 +291,15 @@ void D3D12GSRender::FillVertexShaderConstantsBuffer() void *constantsBufferMap; ThrowIfFailed(m_constantsData.m_heap->Map(0, &CD3DX12_RANGE(heapOffset, heapOffset + bufferSize), &constantsBufferMap)); - for (const auto &vertexConstants : m_vertexConstants) + for (const auto &entry : transform_constants) { float data[4] = { - vertexConstants.second.x, - vertexConstants.second.y, - vertexConstants.second.z, - vertexConstants.second.w + entry.second.x, + entry.second.y, + entry.second.z, + entry.second.w }; - streamToBuffer((char*)constantsBufferMap + heapOffset + vertexConstants.first, data, 4 * sizeof(float)); + streamToBuffer((char*)constantsBufferMap + heapOffset + entry.first * 4 * sizeof(float), data, 4 * sizeof(float)); } m_constantsData.m_heap->Unmap(0, &CD3DX12_RANGE(heapOffset, heapOffset + bufferSize)); diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 596c48e468..ce684fd32b 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -1032,7 +1032,7 @@ void GLGSRender::InitVertexData() 0.0f, 0.0f, 0.0f, 1.0f }; - for (const RSXTransformConstant& c : m_transform_constants) +/* for (const RSXTransformConstant& c : m_transform_constants) { const std::string name = fmt::format("vc[%u]", c.id); l = m_program.GetLocation(name); @@ -1040,7 +1040,7 @@ void GLGSRender::InitVertexData() glUniform4f(l, c.x, c.y, c.z, c.w); checkForGlError("glUniform4f " + name + fmt::format(" %d [%f %f %f %f]", l, c.x, c.y, c.z, c.w)); - } + }*/ // Scale scaleOffsetMat[0] = (GLfloat&)rsx::method_registers[NV4097_SET_VIEWPORT_SCALE + (0x4 * 0)] / (RSXThread::m_width / RSXThread::m_width_scale); diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 4f0660eaea..6b2f5a5d6d 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -1066,11 +1066,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const const u32 z = ARGS(i); i++; const u32 w = ARGS(i); i++; - RSXTransformConstant c(id, (float&)x, (float&)y, (float&)z, (float&)w); + color4f c((float&)x, (float&)y, (float&)z, (float&)w); - m_transform_constants.push_back(c); - - //LOG_NOTICE(RSX, "NV4097_SET_TRANSFORM_CONSTANT_LOAD: [%d : %d] = (%f, %f, %f, %f)", i, id, c.x, c.y, c.z, c.w); + transform_constants[id] = c; } break; } @@ -2150,7 +2148,6 @@ void RSXThread::End() m_indexed_array.Reset(); m_fragment_constants.clear(); - m_transform_constants.clear(); m_cur_fragment_prog_num = 0; m_clear_surface_mask = 0; diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 82aa1647eb..dec0ecdb82 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -8,7 +8,7 @@ #include "Utilities/Semaphore.h" #include "Utilities/Thread.h" #include "Utilities/Timer.h" - +#include "Utilities/types.h" namespace rsx { @@ -152,9 +152,12 @@ public: rsx::data_array_format_info vertex_arrays_info[rsx::limits::vertex_count]; std::vector vertex_arrays[rsx::limits::vertex_count]; RSXIndexArrayData m_indexed_array; + + std::unordered_map> transform_constants; + std::vector m_fragment_constants; - std::vector m_transform_constants; - + + u32 m_shader_ctrl, m_cur_fragment_prog_num; RSXFragmentProgram m_fragment_progs[rsx::limits::fragment_count]; RSXFragmentProgram* m_cur_fragment_prog;