From 31cd98c7b23e7e89f7d740a94f8d4fa3dce367db Mon Sep 17 00:00:00 2001 From: "t.jung" <t.jung@gaijin.ru> Date: Wed, 14 Nov 2018 12:59:18 +0100 Subject: [PATCH] HLSL: implemented c register handling Adjusted a test not to use c register for a structured buffer, they are supposed to use t registers Added comments with hints for what are the register types are used for. --- Test/hlsl.structbuffer.frag | 2 +- hlsl/hlslParseHelper.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Test/hlsl.structbuffer.frag b/Test/hlsl.structbuffer.frag index 4eb6912bf..dd522a697 100644 --- a/Test/hlsl.structbuffer.frag +++ b/Test/hlsl.structbuffer.frag @@ -5,7 +5,7 @@ struct sb_t bool test2; }; // stride = 20 -StructuredBuffer<sb_t> sbuf : register(c10); +StructuredBuffer<sb_t> sbuf : register(t10); StructuredBuffer<float> sbuf2; float4 main(uint pos : FOO) : SV_Target0 diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index ac2943284..6ce182dee 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -6066,13 +6066,22 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi } } - // TODO: learn what all these really mean and how they interact with regNumber and subComponent + // more information about register types see + // https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-variable-register const std::vector<std::string>& resourceInfo = intermediate.getResourceSetBinding(); switch (std::tolower(desc[0])) { + case 'c': + // c register is the register slot in the global const buffer + // each slot is a vector of 4 32 bit components + qualifier.layoutOffset = regNumber * 4 * 4; + break; + // const buffer register slot case 'b': + // textrues and structured buffers case 't': - case 'c': + // samplers case 's': + // uav resources case 'u': // if nothing else has set the binding, do so now // (other mechanisms override this one) -- GitLab