diff --git a/src/d3d9/d3d9_constant_layout.h b/src/d3d9/d3d9_constant_layout.h index df4120bc..44efafae 100644 --- a/src/d3d9/d3d9_constant_layout.h +++ b/src/d3d9/d3d9_constant_layout.h @@ -21,9 +21,9 @@ namespace dxvk { : 0; } - uint32_t floatOffset() const { return 0; } - uint32_t intOffset() const { return floatOffset() + floatSize(); } - uint32_t bitmaskOffset() const { return intOffset() + intSize(); } + uint32_t intOffset() const { return 0; } + uint32_t floatOffset() const { return intOffset() + intSize(); } + uint32_t bitmaskOffset() const { return floatOffset() + floatSize(); } uint32_t totalSize() const { return floatSize() + intSize() + bitmaskSize(); } }; diff --git a/src/d3d9/d3d9_constant_set.h b/src/d3d9/d3d9_constant_set.h index 210df885..a927a1b1 100644 --- a/src/d3d9/d3d9_constant_set.h +++ b/src/d3d9/d3d9_constant_set.h @@ -21,20 +21,20 @@ namespace dxvk { // We make an assumption later based on the packing of this struct for copying. struct D3D9ShaderConstantsVSSoftware { - Vector4 fConsts[caps::MaxFloatConstantsSoftware]; Vector4i iConsts[caps::MaxOtherConstantsSoftware]; + Vector4 fConsts[caps::MaxFloatConstantsSoftware]; uint32_t bConsts[caps::MaxOtherConstantsSoftware / 32]; }; struct D3D9ShaderConstantsVSHardware { - Vector4 fConsts[caps::MaxFloatConstantsVS]; Vector4i iConsts[caps::MaxOtherConstants]; + Vector4 fConsts[caps::MaxFloatConstantsVS]; uint32_t bConsts[1]; }; struct D3D9ShaderConstantsPS { - Vector4 fConsts[caps::MaxFloatConstantsPS]; Vector4i iConsts[caps::MaxOtherConstants]; + Vector4 fConsts[caps::MaxFloatConstantsPS]; uint32_t bConsts[1]; }; diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 12dafff8..2b5d47eb 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -4979,7 +4979,7 @@ namespace dxvk { std::memcpy(dst->iConsts, Src.iConsts, constSet.meta.maxConstIndexI * sizeof(Vector4i)); if (constSet.meta.needsConstantCopies) { - Vector4* data = reinterpret_cast(slice.mapPtr); + Vector4* data = reinterpret_cast(dst->fConsts); auto& shaderConsts = GetCommonShader(Shader)->GetConstants(); diff --git a/src/dxso/dxso_compiler.cpp b/src/dxso/dxso_compiler.cpp index d121d1f5..9756076d 100644 --- a/src/dxso/dxso_compiler.cpp +++ b/src/dxso/dxso_compiler.cpp @@ -289,15 +289,15 @@ namespace dxvk { void DxsoCompiler::emitDclConstantBuffer() { std::array members = { - // float f[256 or 224 or 8192] - m_module.defArrayTypeUnique( - getVectorTypeId({ DxsoScalarType::Float32, 4 }), - m_module.constu32(m_layout->floatCount)), - // int i[16 or 2048] m_module.defArrayTypeUnique( getVectorTypeId({ DxsoScalarType::Sint32, 4 }), - m_module.constu32(m_layout->intCount)) + m_module.constu32(m_layout->intCount)), + + // float f[256 or 224 or 8192] + m_module.defArrayTypeUnique( + getVectorTypeId({ DxsoScalarType::Float32, 4 }), + m_module.constu32(m_layout->floatCount)) }; // Decorate array strides, this is required. @@ -311,8 +311,8 @@ namespace dxvk { ? spv::DecorationBufferBlock : spv::DecorationBlock); - m_module.memberDecorateOffset(structType, 0, m_layout->floatOffset()); - m_module.memberDecorateOffset(structType, 1, m_layout->intOffset()); + m_module.memberDecorateOffset(structType, 0, m_layout->intOffset()); + m_module.memberDecorateOffset(structType, 1, m_layout->floatOffset()); m_module.setDebugName(structType, "cbuffer_t"); m_module.setDebugMemberName(structType, 0, "f"); @@ -1007,7 +1007,7 @@ namespace dxvk { structIdx = m_module.constu32(0); cBufferId = m_cFloatBuffer; } else { - structIdx = m_module.constu32(0); + structIdx = m_module.constu32(1); cBufferId = m_cBuffer; } } else { @@ -1015,7 +1015,7 @@ namespace dxvk { structIdx = m_module.constu32(0); cBufferId = m_cIntBuffer; } else { - structIdx = m_module.constu32(1); + structIdx = m_module.constu32(0); cBufferId = m_cBuffer; } }