Commit 31cd98c7 by t.jung

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.
parent 7274bbc2
...@@ -5,7 +5,7 @@ struct sb_t ...@@ -5,7 +5,7 @@ struct sb_t
bool test2; bool test2;
}; // stride = 20 }; // stride = 20
StructuredBuffer<sb_t> sbuf : register(c10); StructuredBuffer<sb_t> sbuf : register(t10);
StructuredBuffer<float> sbuf2; StructuredBuffer<float> sbuf2;
float4 main(uint pos : FOO) : SV_Target0 float4 main(uint pos : FOO) : SV_Target0
......
...@@ -6066,13 +6066,22 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi ...@@ -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(); const std::vector<std::string>& resourceInfo = intermediate.getResourceSetBinding();
switch (std::tolower(desc[0])) { 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': case 'b':
// textrues and structured buffers
case 't': case 't':
case 'c': // samplers
case 's': case 's':
// uav resources
case 'u': case 'u':
// if nothing else has set the binding, do so now // if nothing else has set the binding, do so now
// (other mechanisms override this one) // (other mechanisms override this one)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment