glslang/Test/hlsl.global-const-init.frag
LoopDawg 0fca0bafaf 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.
2017-07-11 13:41:39 -06:00

15 lines
339 B
GLSL

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;
}