yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Wint3rNightDon't emit OpUConvert for spec constants before SPIR-V 1.42d0f1968

main
1.2 KiB37 linesraw
1#version 450
2#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
3#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
4#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require
5
6// Integer width conversions of specialization constants, with the source value
7// having its high bit set so that zero extension is distinguishable from sign
8// extension.
9
10layout(constant_id = 0) const uint su = 0x80000001u;
11layout(constant_id = 1) const uint16_t su16 = 0x8001us;
12layout(constant_id = 2) const uint64_t su64 = 0x8000000000000001ul;
13layout(constant_id = 3) const int si = -2;
14layout(constant_id = 4) const uint8_t su8 = uint8_t(0x81);
15
16const uint16_t u_to_u16 = uint16_t(su);
17const uint64_t u_to_u64 = uint64_t(su);
18const uint u16_to_u = uint(su16);
19const uint u64_to_u = uint(su64);
20const uint u8_to_u = uint(su8);
21const uint16_t i_to_u16 = uint16_t(si);
22const uint64_t i_to_u64 = uint64_t(si);
23
24layout(binding = 0) buffer S {
25    uint p_out[7];
26};
27
28void main()
29{
30    p_out[0] = uint(u_to_u16);
31    p_out[1] = uint(u_to_u64);
32    p_out[2] = u16_to_u;
33    p_out[3] = u64_to_u;
34    p_out[4] = uint(i_to_u16);
35    p_out[5] = uint(i_to_u64);
36    p_out[6] = u8_to_u;
37}