mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-08 11:30:06 +00:00
3fd1232665
This is an alternate fix for the issue described in commit be63facd
, whose
solution didn't work if there were non-trivial operations involved in computing
a constant initializer which caused the 'constant unfolding' code to kick in
(addConstantReferenceConversion). Instead, this change does the 'unfolding'
later in createSpvConstantFromConstUnionArray. If a reference-type constant has
survived that long, then folding is already done, this must be a 'real' (inside
a function) use of the constant, and it should be safe to unfold and apply the
bitcast.
27 lines
660 B
GLSL
27 lines
660 B
GLSL
#version 450
|
|
|
|
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
|
|
#extension GL_EXT_buffer_reference : enable
|
|
#extension GL_EXT_scalar_block_layout : enable
|
|
|
|
layout(buffer_reference) buffer T1 {
|
|
int x;
|
|
bool y;
|
|
};
|
|
layout(buffer_reference) buffer T2 {
|
|
int x;
|
|
};
|
|
|
|
const int s = int(uint64_t(T1(T2(uint64_t(3)))));
|
|
int x[s];
|
|
const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));
|
|
|
|
void main()
|
|
{
|
|
T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));
|
|
T1 c = true ? a : b;
|
|
T1 d = (a,b);
|
|
T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));
|
|
T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));
|
|
}
|