From f8392b4f83ba72cdc88ced4465901c5353dd02bb Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 30 Jul 2018 21:08:52 +0200 Subject: [PATCH] [dxbc] Fix incorrect pointer type when loading from baked ICBs --- src/dxbc/dxbc_compiler.cpp | 23 ++++++++++++++--------- tests/d3d11/test_d3d11_triangle.cpp | 6 +++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 444326ec4..50bef816f 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -4309,21 +4309,19 @@ namespace dxvk { DxbcRegisterPointer DxbcCompiler::emitGetImmConstBufPtr( const DxbcRegister& operand) { - DxbcRegisterInfo ptrInfo; - ptrInfo.type.ctype = DxbcScalarType::Float32; - ptrInfo.type.ccount = 4; - ptrInfo.type.alength = 0; - - DxbcRegisterPointer result; - result.type.ctype = ptrInfo.type.ctype; - result.type.ccount = ptrInfo.type.ccount; - const DxbcRegisterValue constId = emitIndexLoad(operand.idx[0]); if (m_immConstBuf != 0) { + DxbcRegisterInfo ptrInfo; + ptrInfo.type.ctype = DxbcScalarType::Uint32; + ptrInfo.type.ccount = 4; + ptrInfo.type.alength = 0; ptrInfo.sclass = spv::StorageClassPrivate; + DxbcRegisterPointer result; + result.type.ctype = ptrInfo.type.ctype; + result.type.ccount = ptrInfo.type.ccount; result.id = m_module.opAccessChain( getPointerTypeId(ptrInfo), m_immConstBuf, 1, &constId.id); @@ -4332,8 +4330,15 @@ namespace dxvk { const std::array indices = {{ m_module.consti32(0), constId.id }}; + DxbcRegisterInfo ptrInfo; + ptrInfo.type.ctype = DxbcScalarType::Float32; + ptrInfo.type.ccount = 4; + ptrInfo.type.alength = 0; ptrInfo.sclass = spv::StorageClassUniform; + DxbcRegisterPointer result; + result.type.ctype = ptrInfo.type.ctype; + result.type.ccount = ptrInfo.type.ccount; result.id = m_module.opAccessChain( getPointerTypeId(ptrInfo), m_constantBuffers.at(Icb_BindingSlotId).varId, diff --git a/tests/d3d11/test_d3d11_triangle.cpp b/tests/d3d11/test_d3d11_triangle.cpp index 38fb720cb..65ea37f71 100644 --- a/tests/d3d11/test_d3d11_triangle.cpp +++ b/tests/d3d11/test_d3d11_triangle.cpp @@ -31,11 +31,15 @@ const std::string g_vertexShaderCode = " float4 pos : SV_POSITION;\n" " float4 color : COLOR;\n" "};\n" + "static const float4 g_pos[] = {\n" + " float4(-0.25f, -0.15f, 0.0f, 1.0f),\n" + " float4(-0.50f, -0.65f, 0.0f, 1.0f),\n" + " float4(-0.75f, -0.15f, 0.0f, 1.0f) };\n" "vs_out main(float4 vsIn : IN_POSITION,\n" " uint vid : SV_VERTEXID,\n" " uint iid : SV_INSTANCEID) {\n" " vs_out result;\n" - " result.pos = vsIn;\n" + " result.pos = g_pos[vid];\n" " result.color.x = buf[vid].x;\n" " result.color.y = buf[iid * 3].y;\n" " result.color.z = buf[0].z;\n"