WIP: HLSL: support global const initializers from non-constant rvalues
Semantic test left over from other source languages is removed, since this is permitted by HLSL.
Also, to support the functionality, a targeted test is performed for this case and it is
turned into a EvqGlobal qualifier to create an AST initialization segment when needed.
Constness is now propagated up aggregate chains during initializer construction. This
handles hierarchical cases such as the distinction between:
static const float2 a[2] = { { 1, 2 }, { 3, 4} };
vs
static const float2 a[2] = { { 1, 2 }, { cbuffer_member, 4} };
The first of which can use a first class constant initalization, and the second cannot.
This commit is contained in:
14
Test/hlsl.global-const-init.frag
Normal file
14
Test/hlsl.global-const-init.frag
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
cbuffer CB {
|
||||
float4 foo;
|
||||
};
|
||||
|
||||
static const float4 bar = foo; // test const (in the immutable sense) initializer from non-const.
|
||||
|
||||
static const float2 a1[2] = { { 1, 2 }, { foo.x, 4 } }; // not entirely constant
|
||||
static const float2 a2[2] = { { 5, 6 }, { 7, 8 } }; // entirely constant
|
||||
|
||||
float4 main() : SV_Target0
|
||||
{
|
||||
return bar;
|
||||
}
|
||||
Reference in New Issue
Block a user