Add names for composite constants in SPIR-V

Consider the following code:

    layout(constant_id=0) const int Y = 1;
    layout(constant_id=1) const int Z = 2;
    layout(constant_id=3) const int X = Y + Z;

Previously, it would produce SPIR-V decorations like this:

    Decorate 21(Y) SpecId 1
    Decorate 22 SpecId 3
    Decorate 33(Z) SpecId 0

This seems inaccurate, since the spec constant `X` that is dependent on
the two others did not get a name in the SPIR-V decorations. This behavior
may potentially negatively affect shader introspection capabilities.

This change alters the behavior to always add a name, which results in the code
above producing the following decorations:

    Decorate 21(Y) SpecId 1
    Decorate 22(X) SpecId 3
    Decorate 33(Z) SpecId 0
This commit is contained in:
Grigory Dzhavadyan 2018-10-29 22:56:44 -07:00 committed by nicebyte
parent b2b3d81e9b
commit 4c9876b34c
8 changed files with 232 additions and 117 deletions

View file

@ -18,10 +18,68 @@ spv.specConstantOperations.vert
Name 42 "sp_uint"
Name 43 "sp_sint"
Name 45 "sp_double"
Name 46 "float_from_double"
Name 47 "double_from_float"
Name 49 "bool_from_int"
Name 50 "bool_from_uint"
Name 51 "int_from_bool"
Name 53 "uint_from_bool"
Name 54 "sp_uint_from_sint"
Name 55 "sp_sint_from_uint"
Name 56 "negate_int"
Name 57 "not_int"
Name 58 "sp_int_add_two"
Name 61 "sp_int_add_two_sub_three"
Name 63 "sp_int_add_two_sub_four"
Name 64 "sp_sint_mul_two"
Name 66 "sp_uint_mul_two"
Name 68 "sp_sint_mul_two_div_five"
Name 70 "sp_uint_mul_two_div_five"
Name 71 "sp_sint_rem_four"
Name 73 "sp_uint_rem_four"
Name 75 "sp_sint_mul_three_div_five"
Name 77 "sp_sint_shift_right_arithmetic"
Name 79 "sp_uint_shift_right_arithmetic"
Name 80 "sp_sint_shift_left"
Name 81 "sp_uint_shift_left"
Name 83 "sp_sint_or_256"
Name 85 "sp_uint_xor_512"
Name 86 "sp_int_lt_sp_sint"
Name 87 "sp_uint_equal_sp_uint"
Name 88 "sp_int_gt_sp_sint"
Name 91 "iv"
Name 95 "uv"
Name 98 "bv_from_iv"
Name 99 "bv_from_uv"
Name 102 "iv_from_bv"
Name 104 "uv_from_bv"
Name 105 "uv_from_iv"
Name 106 "iv_from_uv"
Name 107 "not_iv"
Name 108 "negate_iv"
Name 110 "iv_add_two"
Name 113 "iv_add_two_sub_three"
Name 115 "iv_add_two_sub_four"
Name 116 "iv_mul_two"
Name 118 "iv_mul_two_div_five"
Name 119 "iv_rem_four"
Name 121 "iv_shift_right_arithmetic"
Name 122 "iv_shift_left"
Name 125 "iv_or_1024"
Name 128 "uv_xor_2048"
Name 129 "iv_x"
Name 131 "iv_yx"
Name 133 "iv_zyx"
Name 134 "iv_yzxw"
Name 135 "a"
Name 136 "b"
Name 137 "c"
Name 142 "ternayArray1"
Name 145 "t1"
Name 146 "t2"
Name 148 "t3"
Name 152 "t4"
Name 161 "v2"
Decorate 19(sp_int) SpecId 201
Decorate 40(sp_float) SpecId 200
Decorate 42(sp_uint) SpecId 202
@ -53,95 +111,95 @@ spv.specConstantOperations.vert
43(sp_sint): 6(int) SpecConstant 4294967286
44: TypeFloat 64
45(sp_double):44(float64_t) SpecConstant 2333366019 1074118410
46: 39(float) SpecConstantOp 115 45(sp_double)
47:44(float64_t) SpecConstantOp 115 40(sp_float)
46(float_from_double): 39(float) SpecConstantOp 115 45(sp_double)
47(double_from_float):44(float64_t) SpecConstantOp 115 40(sp_float)
48: 41(int) Constant 0
49: 22(bool) SpecConstantOp 171 19(sp_int) 48
50: 22(bool) SpecConstantOp 171 42(sp_uint) 48
51: 6(int) SpecConstantOp 169 49 32 12
49(bool_from_int): 22(bool) SpecConstantOp 171 19(sp_int) 48
50(bool_from_uint): 22(bool) SpecConstantOp 171 42(sp_uint) 48
51(int_from_bool): 6(int) SpecConstantOp 169 49(bool_from_int) 32 12
52: 41(int) Constant 1
53: 41(int) SpecConstantOp 169 49 52 48
54: 41(int) SpecConstantOp 128 43(sp_sint) 48
55: 6(int) SpecConstantOp 128 42(sp_uint) 48
56: 6(int) SpecConstantOp 126 19(sp_int)
57: 6(int) SpecConstantOp 200 19(sp_int)
58: 6(int) SpecConstantOp 128 19(sp_int) 20
53(uint_from_bool): 41(int) SpecConstantOp 169 49(bool_from_int) 52 48
54(sp_uint_from_sint): 41(int) SpecConstantOp 128 43(sp_sint) 48
55(sp_sint_from_uint): 6(int) SpecConstantOp 128 42(sp_uint) 48
56(negate_int): 6(int) SpecConstantOp 126 19(sp_int)
57(not_int): 6(int) SpecConstantOp 200 19(sp_int)
58(sp_int_add_two): 6(int) SpecConstantOp 128 19(sp_int) 20
59: 6(int) SpecConstantOp 128 19(sp_int) 20
60: 6(int) Constant 3
61: 6(int) SpecConstantOp 130 59 60
61(sp_int_add_two_sub_three): 6(int) SpecConstantOp 130 59 60
62: 6(int) Constant 4
63: 6(int) SpecConstantOp 130 58 62
64: 6(int) SpecConstantOp 132 43(sp_sint) 20
63(sp_int_add_two_sub_four): 6(int) SpecConstantOp 130 58(sp_int_add_two) 62
64(sp_sint_mul_two): 6(int) SpecConstantOp 132 43(sp_sint) 20
65: 41(int) Constant 2
66: 41(int) SpecConstantOp 132 42(sp_uint) 65
66(sp_uint_mul_two): 41(int) SpecConstantOp 132 42(sp_uint) 65
67: 6(int) Constant 5
68: 6(int) SpecConstantOp 135 64 67
68(sp_sint_mul_two_div_five): 6(int) SpecConstantOp 135 64(sp_sint_mul_two) 67
69: 41(int) Constant 5
70: 41(int) SpecConstantOp 134 66 69
71: 6(int) SpecConstantOp 139 43(sp_sint) 62
70(sp_uint_mul_two_div_five): 41(int) SpecConstantOp 134 66(sp_uint_mul_two) 69
71(sp_sint_rem_four): 6(int) SpecConstantOp 139 43(sp_sint) 62
72: 41(int) Constant 4
73: 41(int) SpecConstantOp 137 42(sp_uint) 72
73(sp_uint_rem_four): 41(int) SpecConstantOp 137 42(sp_uint) 72
74: 6(int) SpecConstantOp 132 43(sp_sint) 60
75: 6(int) SpecConstantOp 135 74 67
75(sp_sint_mul_three_div_five): 6(int) SpecConstantOp 135 74 67
76: 6(int) Constant 10
77: 6(int) SpecConstantOp 195 43(sp_sint) 76
77(sp_sint_shift_right_arithmetic): 6(int) SpecConstantOp 195 43(sp_sint) 76
78: 6(int) Constant 20
79: 41(int) SpecConstantOp 194 42(sp_uint) 78
80: 6(int) SpecConstantOp 196 43(sp_sint) 32
81: 41(int) SpecConstantOp 196 42(sp_uint) 20
79(sp_uint_shift_right_arithmetic): 41(int) SpecConstantOp 194 42(sp_uint) 78
80(sp_sint_shift_left): 6(int) SpecConstantOp 196 43(sp_sint) 32
81(sp_uint_shift_left): 41(int) SpecConstantOp 196 42(sp_uint) 20
82: 6(int) Constant 256
83: 6(int) SpecConstantOp 197 43(sp_sint) 82
83(sp_sint_or_256): 6(int) SpecConstantOp 197 43(sp_sint) 82
84: 41(int) Constant 512
85: 41(int) SpecConstantOp 198 42(sp_uint) 84
86: 22(bool) SpecConstantOp 177 19(sp_int) 43(sp_sint)
87: 22(bool) SpecConstantOp 170 42(sp_uint) 42(sp_uint)
88: 22(bool) SpecConstantOp 173 19(sp_int) 43(sp_sint)
85(sp_uint_xor_512): 41(int) SpecConstantOp 198 42(sp_uint) 84
86(sp_int_lt_sp_sint): 22(bool) SpecConstantOp 177 19(sp_int) 43(sp_sint)
87(sp_uint_equal_sp_uint): 22(bool) SpecConstantOp 170 42(sp_uint) 42(sp_uint)
88(sp_int_gt_sp_sint): 22(bool) SpecConstantOp 173 19(sp_int) 43(sp_sint)
89: 6(int) Constant 30
90: TypeVector 6(int) 4
91: 90(ivec4) SpecConstantComposite 78 89 19(sp_int) 19(sp_int)
91(iv): 90(ivec4) SpecConstantComposite 78 89 19(sp_int) 19(sp_int)
92: 41(int) Constant 4294967295
93: 41(int) Constant 4294967294
94: TypeVector 41(int) 4
95: 94(ivec4) SpecConstantComposite 42(sp_uint) 42(sp_uint) 92 93
95(uv): 94(ivec4) SpecConstantComposite 42(sp_uint) 42(sp_uint) 92 93
96: TypeVector 22(bool) 4
97: 94(ivec4) ConstantComposite 48 48 48 48
98: 96(bvec4) SpecConstantOp 171 91 97
99: 96(bvec4) SpecConstantOp 171 95 97
98(bv_from_iv): 96(bvec4) SpecConstantOp 171 91(iv) 97
99(bv_from_uv): 96(bvec4) SpecConstantOp 171 95(uv) 97
100: 90(ivec4) ConstantComposite 12 12 12 12
101: 90(ivec4) ConstantComposite 32 32 32 32
102: 90(ivec4) SpecConstantOp 169 98 101 100
102(iv_from_bv): 90(ivec4) SpecConstantOp 169 98(bv_from_iv) 101 100
103: 94(ivec4) ConstantComposite 52 52 52 52
104: 94(ivec4) SpecConstantOp 169 98 103 97
105: 94(ivec4) SpecConstantOp 128 91 97
106: 90(ivec4) SpecConstantOp 128 95 97
107: 90(ivec4) SpecConstantOp 200 91
108: 90(ivec4) SpecConstantOp 126 91
104(uv_from_bv): 94(ivec4) SpecConstantOp 169 98(bv_from_iv) 103 97
105(uv_from_iv): 94(ivec4) SpecConstantOp 128 91(iv) 97
106(iv_from_uv): 90(ivec4) SpecConstantOp 128 95(uv) 97
107(not_iv): 90(ivec4) SpecConstantOp 200 91(iv)
108(negate_iv): 90(ivec4) SpecConstantOp 126 91(iv)
109: 90(ivec4) ConstantComposite 20 20 20 20
110: 90(ivec4) SpecConstantOp 128 91 109
111: 90(ivec4) SpecConstantOp 128 91 109
110(iv_add_two): 90(ivec4) SpecConstantOp 128 91(iv) 109
111: 90(ivec4) SpecConstantOp 128 91(iv) 109
112: 90(ivec4) ConstantComposite 60 60 60 60
113: 90(ivec4) SpecConstantOp 130 111 112
113(iv_add_two_sub_three): 90(ivec4) SpecConstantOp 130 111 112
114: 90(ivec4) ConstantComposite 62 62 62 62
115: 90(ivec4) SpecConstantOp 130 113 114
116: 90(ivec4) SpecConstantOp 132 91 109
115(iv_add_two_sub_four): 90(ivec4) SpecConstantOp 130 113(iv_add_two_sub_three) 114
116(iv_mul_two): 90(ivec4) SpecConstantOp 132 91(iv) 109
117: 90(ivec4) ConstantComposite 67 67 67 67
118: 90(ivec4) SpecConstantOp 135 116 117
119: 90(ivec4) SpecConstantOp 139 91 114
118(iv_mul_two_div_five): 90(ivec4) SpecConstantOp 135 116(iv_mul_two) 117
119(iv_rem_four): 90(ivec4) SpecConstantOp 139 91(iv) 114
120: 90(ivec4) ConstantComposite 76 76 76 76
121: 90(ivec4) SpecConstantOp 195 91 120
122: 90(ivec4) SpecConstantOp 196 91 109
121(iv_shift_right_arithmetic): 90(ivec4) SpecConstantOp 195 91(iv) 120
122(iv_shift_left): 90(ivec4) SpecConstantOp 196 91(iv) 109
123: 6(int) Constant 1024
124: 90(ivec4) ConstantComposite 123 123 123 123
125: 90(ivec4) SpecConstantOp 197 91 124
125(iv_or_1024): 90(ivec4) SpecConstantOp 197 91(iv) 124
126: 41(int) Constant 2048
127: 94(ivec4) ConstantComposite 126 126 126 126
128: 94(ivec4) SpecConstantOp 198 95 127
129: 6(int) SpecConstantOp 81 91 0
128(uv_xor_2048): 94(ivec4) SpecConstantOp 198 95(uv) 127
129(iv_x): 6(int) SpecConstantOp 81 91(iv) 0
130: TypeVector 6(int) 2
131: 130(ivec2) SpecConstantOp 79 91 91 1(GLSL.std.450) 0
131(iv_yx): 130(ivec2) SpecConstantOp 79 91(iv) 91(iv) 1(GLSL.std.450) 0
132: TypeVector 6(int) 3
133: 132(ivec3) SpecConstantOp 79 91 91 2 1(GLSL.std.450) 0
134: 90(ivec4) SpecConstantOp 79 91 91 1(GLSL.std.450) 2 0 3
133(iv_zyx): 132(ivec3) SpecConstantOp 79 91(iv) 91(iv) 2 1(GLSL.std.450) 0
134(iv_yzxw): 90(ivec4) SpecConstantOp 79 91(iv) 91(iv) 1(GLSL.std.450) 2 0 3
135(a): 6(int) SpecConstant 4
136(b): 6(int) SpecConstant 6
137(c): 22(bool) SpecConstantTrue
@ -152,14 +210,14 @@ spv.specConstantOperations.vert
142(ternayArray1): 141(ptr) Variable Private
143: 6(int) Constant 13
144: 6(int) Constant 17
145: 6(int) SpecConstantOp 169 137(c) 143 144
146: 6(int) SpecConstantOp 169 137(c) 135(a) 144
145(t1): 6(int) SpecConstantOp 169 137(c) 143 144
146(t2): 6(int) SpecConstantOp 169 137(c) 135(a) 144
147: 22(bool) ConstantTrue
148: 6(int) SpecConstantOp 169 147 135(a) 144
148(t3): 6(int) SpecConstantOp 169 147 135(a) 144
149: 22(bool) SpecConstantOp 173 135(a) 136(b)
150: 6(int) SpecConstantOp 128 143 135(a)
151: 6(int) SpecConstantOp 132 144 136(b)
152: 6(int) SpecConstantOp 169 149 150 151
152(t4): 6(int) SpecConstantOp 169 149 150 151
153: 22(bool) SpecConstantOp 168 137(c)
154: TypeVector 39(float) 2
155: 39(float) Constant 1065353216
@ -168,7 +226,7 @@ spv.specConstantOperations.vert
158: 154(fvec2) ConstantComposite 157 157
159: TypeVector 22(bool) 2
160: 159(bvec2) SpecConstantComposite 153 153
161: 154(fvec2) SpecConstantOp 169 160 156 158
161(v2): 154(fvec2) SpecConstantOp 169 160 156 158
4(main): 2 Function None 3
5: Label
Return