diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out new file mode 100644 index 000000000..7a57ac44c --- /dev/null +++ b/Test/baseResults/spv.intOps.vert.out @@ -0,0 +1,359 @@ +spv.intOps.vert +Warning, version 310 is not yet complete; most version-specific features are present, but some are missing. + + +Linked vertex stage: + + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 270 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 47 26 173 67 121 142 100 247 156 146 182 83 15 9 21 268 269 + Source ESSL 310 + Name 4 "main" + Name 9 "iout" + Name 15 "uout" + Name 21 "fout" + Name 26 "u2" + Name 30 "u2out" + Name 31 "ResType" + Name 47 "u1" + Name 51 "u1out" + Name 52 "ResType" + Name 67 "u4" + Name 71 "u4outHi" + Name 72 "u4outLow" + Name 73 "ResType" + Name 83 "i4" + Name 87 "i4outHi" + Name 88 "i4outLow" + Name 89 "ResType" + Name 100 "v3" + Name 104 "i3out" + Name 105 "ResType" + Name 121 "v1" + Name 124 "i1out" + Name 125 "ResType" + Name 142 "v2" + Name 146 "i2" + Name 156 "i1" + Name 173 "u3" + Name 182 "i3" + Name 247 "v4" + Name 268 "gl_VertexID" + Name 269 "gl_InstanceID" + Decorate 268(gl_VertexID) BuiltIn VertexId + Decorate 269(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Output 7(ivec4) + 9(iout): 8(ptr) Variable Output + 10: 6(int) Constant 0 + 11: 7(ivec4) ConstantComposite 10 10 10 10 + 12: TypeInt 32 0 + 13: TypeVector 12(int) 4 + 14: TypePointer Output 13(ivec4) + 15(uout): 14(ptr) Variable Output + 16: 12(int) Constant 0 + 17: 13(ivec4) ConstantComposite 16 16 16 16 + 18: TypeFloat 32 + 19: TypeVector 18(float) 4 + 20: TypePointer Output 19(fvec4) + 21(fout): 20(ptr) Variable Output + 22: 18(float) Constant 0 + 23: 19(fvec4) ConstantComposite 22 22 22 22 + 24: TypeVector 12(int) 2 + 25: TypePointer Input 24(ivec2) + 26(u2): 25(ptr) Variable Input + 29: TypePointer Function 24(ivec2) + 31(ResType): TypeStruct 24(ivec2) 24(ivec2) + 46: TypePointer Input 12(int) + 47(u1): 46(ptr) Variable Input + 50: TypePointer Function 12(int) + 52(ResType): TypeStruct 12(int) 12(int) + 56: TypePointer Output 12(int) + 66: TypePointer Input 13(ivec4) + 67(u4): 66(ptr) Variable Input + 70: TypePointer Function 13(ivec4) + 73(ResType): TypeStruct 13(ivec4) 13(ivec4) + 82: TypePointer Input 7(ivec4) + 83(i4): 82(ptr) Variable Input + 86: TypePointer Function 7(ivec4) + 89(ResType): TypeStruct 7(ivec4) 7(ivec4) + 98: TypeVector 18(float) 3 + 99: TypePointer Input 98(fvec3) + 100(v3): 99(ptr) Variable Input + 102: TypeVector 6(int) 3 + 103: TypePointer Function 102(ivec3) + 105(ResType): TypeStruct 98(fvec3) 102(ivec3) + 120: TypePointer Input 18(float) + 121(v1): 120(ptr) Variable Input + 123: TypePointer Function 6(int) + 125(ResType): TypeStruct 18(float) 6(int) + 129: TypePointer Output 18(float) + 135: TypePointer Output 6(int) + 140: TypeVector 18(float) 2 + 141: TypePointer Input 140(fvec2) + 142(v2): 141(ptr) Variable Input + 144: TypeVector 6(int) 2 + 145: TypePointer Input 144(ivec2) + 146(i2): 145(ptr) Variable Input + 155: TypePointer Input 6(int) + 156(i1): 155(ptr) Variable Input + 164: 6(int) Constant 4 + 165: 6(int) Constant 5 + 171: TypeVector 12(int) 3 + 172: TypePointer Input 171(ivec3) + 173(u3): 172(ptr) Variable Input + 181: TypePointer Input 102(ivec3) + 182(i3): 181(ptr) Variable Input + 246: TypePointer Input 19(fvec4) + 247(v4): 246(ptr) Variable Input +268(gl_VertexID): 155(ptr) Variable Input +269(gl_InstanceID): 155(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 30(u2out): 29(ptr) Variable Function + 51(u1out): 50(ptr) Variable Function + 71(u4outHi): 70(ptr) Variable Function + 72(u4outLow): 70(ptr) Variable Function + 87(i4outHi): 86(ptr) Variable Function + 88(i4outLow): 86(ptr) Variable Function + 104(i3out): 103(ptr) Variable Function + 124(i1out): 123(ptr) Variable Function + Store 9(iout) 11 + Store 15(uout) 17 + Store 21(fout) 23 + 27: 24(ivec2) Load 26(u2) + 28: 24(ivec2) Load 26(u2) + 32: 31(ResType) IAddCarry 27 28 + 33: 24(ivec2) CompositeExtract 32 1 + Store 30(u2out) 33 + 34: 24(ivec2) CompositeExtract 32 0 + 35: 13(ivec4) Load 15(uout) + 36: 24(ivec2) VectorShuffle 35 35 0 1 + 37: 24(ivec2) IAdd 36 34 + 38: 13(ivec4) Load 15(uout) + 39: 13(ivec4) VectorShuffle 38 37 4 5 2 3 + Store 15(uout) 39 + 40: 24(ivec2) Load 30(u2out) + 41: 13(ivec4) Load 15(uout) + 42: 24(ivec2) VectorShuffle 41 41 0 1 + 43: 24(ivec2) IAdd 42 40 + 44: 13(ivec4) Load 15(uout) + 45: 13(ivec4) VectorShuffle 44 43 4 5 2 3 + Store 15(uout) 45 + 48: 12(int) Load 47(u1) + 49: 12(int) Load 47(u1) + 53: 52(ResType) ISubBorrow 48 49 + 54: 12(int) CompositeExtract 53 1 + Store 51(u1out) 54 + 55: 12(int) CompositeExtract 53 0 + 57: 56(ptr) AccessChain 15(uout) 16 + 58: 12(int) Load 57 + 59: 12(int) IAdd 58 55 + 60: 56(ptr) AccessChain 15(uout) 16 + Store 60 59 + 61: 12(int) Load 51(u1out) + 62: 56(ptr) AccessChain 15(uout) 16 + 63: 12(int) Load 62 + 64: 12(int) IAdd 63 61 + 65: 56(ptr) AccessChain 15(uout) 16 + Store 65 64 + 68: 13(ivec4) Load 67(u4) + 69: 13(ivec4) Load 67(u4) + 74: 73(ResType) UMulExtended 68 69 + 75: 13(ivec4) CompositeExtract 74 0 + Store 72(u4outLow) 75 + 76: 13(ivec4) CompositeExtract 74 1 + Store 71(u4outHi) 76 + 77: 13(ivec4) Load 71(u4outHi) + 78: 13(ivec4) Load 72(u4outLow) + 79: 13(ivec4) IAdd 77 78 + 80: 13(ivec4) Load 15(uout) + 81: 13(ivec4) IAdd 80 79 + Store 15(uout) 81 + 84: 7(ivec4) Load 83(i4) + 85: 7(ivec4) Load 83(i4) + 90: 89(ResType) SMulExtended 84 85 + 91: 7(ivec4) CompositeExtract 90 0 + Store 88(i4outLow) 91 + 92: 7(ivec4) CompositeExtract 90 1 + Store 87(i4outHi) 92 + 93: 7(ivec4) Load 88(i4outLow) + 94: 7(ivec4) Load 87(i4outHi) + 95: 7(ivec4) IAdd 93 94 + 96: 7(ivec4) Load 9(iout) + 97: 7(ivec4) IAdd 96 95 + Store 9(iout) 97 + 101: 98(fvec3) Load 100(v3) + 106:105(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 101 104(i3out) + 107: 102(ivec3) CompositeExtract 106 1 + Store 104(i3out) 107 + 108: 98(fvec3) CompositeExtract 106 0 + 109: 19(fvec4) Load 21(fout) + 110: 98(fvec3) VectorShuffle 109 109 0 1 2 + 111: 98(fvec3) FAdd 110 108 + 112: 19(fvec4) Load 21(fout) + 113: 19(fvec4) VectorShuffle 112 111 4 5 6 3 + Store 21(fout) 113 + 114: 102(ivec3) Load 104(i3out) + 115: 7(ivec4) Load 9(iout) + 116: 102(ivec3) VectorShuffle 115 115 0 1 2 + 117: 102(ivec3) IAdd 116 114 + 118: 7(ivec4) Load 9(iout) + 119: 7(ivec4) VectorShuffle 118 117 4 5 6 3 + Store 9(iout) 119 + 122: 18(float) Load 121(v1) + 126:125(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 122 124(i1out) + 127: 6(int) CompositeExtract 126 1 + Store 124(i1out) 127 + 128: 18(float) CompositeExtract 126 0 + 130: 129(ptr) AccessChain 21(fout) 16 + 131: 18(float) Load 130 + 132: 18(float) FAdd 131 128 + 133: 129(ptr) AccessChain 21(fout) 16 + Store 133 132 + 134: 6(int) Load 124(i1out) + 136: 135(ptr) AccessChain 9(iout) 16 + 137: 6(int) Load 136 + 138: 6(int) IAdd 137 134 + 139: 135(ptr) AccessChain 9(iout) 16 + Store 139 138 + 143: 140(fvec2) Load 142(v2) + 147: 144(ivec2) Load 146(i2) + 148: 140(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 143 147 + 149: 19(fvec4) Load 21(fout) + 150: 140(fvec2) VectorShuffle 149 149 0 1 + 151: 140(fvec2) FAdd 150 148 + 152: 19(fvec4) Load 21(fout) + 153: 19(fvec4) VectorShuffle 152 151 4 5 2 3 + Store 21(fout) 153 + 154: 18(float) Load 121(v1) + 157: 6(int) Load 156(i1) + 158: 18(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 154 157 + 159: 129(ptr) AccessChain 21(fout) 16 + 160: 18(float) Load 159 + 161: 18(float) FAdd 160 158 + 162: 129(ptr) AccessChain 21(fout) 16 + Store 162 161 + 163: 6(int) Load 156(i1) + 166: 6(int) BitFieldSExtract 163 164 165 + 167: 135(ptr) AccessChain 9(iout) 16 + 168: 6(int) Load 167 + 169: 6(int) IAdd 168 166 + 170: 135(ptr) AccessChain 9(iout) 16 + Store 170 169 + 174: 171(ivec3) Load 173(u3) + 175: 171(ivec3) BitFieldUExtract 174 164 165 + 176: 13(ivec4) Load 15(uout) + 177: 171(ivec3) VectorShuffle 176 176 0 1 2 + 178: 171(ivec3) IAdd 177 175 + 179: 13(ivec4) Load 15(uout) + 180: 13(ivec4) VectorShuffle 179 178 4 5 6 3 + Store 15(uout) 180 + 183: 102(ivec3) Load 182(i3) + 184: 102(ivec3) Load 182(i3) + 185: 102(ivec3) BitFieldInsert 183 184 164 165 + 186: 7(ivec4) Load 9(iout) + 187: 102(ivec3) VectorShuffle 186 186 0 1 2 + 188: 102(ivec3) IAdd 187 185 + 189: 7(ivec4) Load 9(iout) + 190: 7(ivec4) VectorShuffle 189 188 4 5 6 3 + Store 9(iout) 190 + 191: 12(int) Load 47(u1) + 192: 12(int) Load 47(u1) + 193: 12(int) BitFieldInsert 191 192 164 165 + 194: 56(ptr) AccessChain 15(uout) 16 + 195: 12(int) Load 194 + 196: 12(int) IAdd 195 193 + 197: 56(ptr) AccessChain 15(uout) 16 + Store 197 196 + 198: 144(ivec2) Load 146(i2) + 199: 144(ivec2) BitReverse 198 + 200: 7(ivec4) Load 9(iout) + 201: 144(ivec2) VectorShuffle 200 200 0 1 + 202: 144(ivec2) IAdd 201 199 + 203: 7(ivec4) Load 9(iout) + 204: 7(ivec4) VectorShuffle 203 202 4 5 2 3 + Store 9(iout) 204 + 205: 13(ivec4) Load 67(u4) + 206: 13(ivec4) BitReverse 205 + 207: 13(ivec4) Load 15(uout) + 208: 13(ivec4) IAdd 207 206 + Store 15(uout) 208 + 209: 6(int) Load 156(i1) + 210: 6(int) BitCount 209 + 211: 135(ptr) AccessChain 9(iout) 16 + 212: 6(int) Load 211 + 213: 6(int) IAdd 212 210 + 214: 135(ptr) AccessChain 9(iout) 16 + Store 214 213 + 215: 171(ivec3) Load 173(u3) + 216: 102(ivec3) BitCount 215 + 217: 7(ivec4) Load 9(iout) + 218: 102(ivec3) VectorShuffle 217 217 0 1 2 + 219: 102(ivec3) IAdd 218 216 + 220: 7(ivec4) Load 9(iout) + 221: 7(ivec4) VectorShuffle 220 219 4 5 6 3 + Store 9(iout) 221 + 222: 144(ivec2) Load 146(i2) + 223: 144(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 222 + 224: 7(ivec4) Load 9(iout) + 225: 144(ivec2) VectorShuffle 224 224 0 1 + 226: 144(ivec2) IAdd 225 223 + 227: 7(ivec4) Load 9(iout) + 228: 7(ivec4) VectorShuffle 227 226 4 5 2 3 + Store 9(iout) 228 + 229: 13(ivec4) Load 67(u4) + 230: 7(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 229 + 231: 7(ivec4) Load 9(iout) + 232: 7(ivec4) IAdd 231 230 + Store 9(iout) 232 + 233: 6(int) Load 156(i1) + 234: 6(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 233 + 235: 135(ptr) AccessChain 9(iout) 16 + 236: 6(int) Load 235 + 237: 6(int) IAdd 236 234 + 238: 135(ptr) AccessChain 9(iout) 16 + Store 238 237 + 239: 24(ivec2) Load 26(u2) + 240: 144(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 239 + 241: 7(ivec4) Load 9(iout) + 242: 144(ivec2) VectorShuffle 241 241 0 1 + 243: 144(ivec2) IAdd 242 240 + 244: 7(ivec4) Load 9(iout) + 245: 7(ivec4) VectorShuffle 244 243 4 5 2 3 + Store 9(iout) 245 + 248: 19(fvec4) Load 247(v4) + 249: 12(int) ExtInst 1(GLSL.std.450) 55(PackUnorm4x8) 248 + 250: 56(ptr) AccessChain 15(uout) 16 + 251: 12(int) Load 250 + 252: 12(int) IAdd 251 249 + 253: 56(ptr) AccessChain 15(uout) 16 + Store 253 252 + 254: 19(fvec4) Load 247(v4) + 255: 12(int) ExtInst 1(GLSL.std.450) 54(PackSnorm4x8) 254 + 256: 56(ptr) AccessChain 15(uout) 16 + 257: 12(int) Load 256 + 258: 12(int) IAdd 257 255 + 259: 56(ptr) AccessChain 15(uout) 16 + Store 259 258 + 260: 12(int) Load 47(u1) + 261: 19(fvec4) ExtInst 1(GLSL.std.450) 64(UnpackUnorm4x8) 260 + 262: 19(fvec4) Load 21(fout) + 263: 19(fvec4) FAdd 262 261 + Store 21(fout) 263 + 264: 12(int) Load 47(u1) + 265: 19(fvec4) ExtInst 1(GLSL.std.450) 63(UnpackSnorm4x8) 264 + 266: 19(fvec4) Load 21(fout) + 267: 19(fvec4) FAdd 266 265 + Store 21(fout) 267 + Return + FunctionEnd diff --git a/Test/spv.intOps.vert b/Test/spv.intOps.vert new file mode 100644 index 000000000..b7d749b44 --- /dev/null +++ b/Test/spv.intOps.vert @@ -0,0 +1,72 @@ +#version 310 es + +in uint u1; +in uvec2 u2; +in uvec3 u3; +in uvec4 u4; + +in float v1; +in vec2 v2; +in vec3 v3; +in vec4 v4; + +in int i1; +in ivec2 i2; +in ivec3 i3; +in ivec4 i4; + +out uvec4 uout; +out ivec4 iout; +out vec4 fout; + +void main() +{ + iout = ivec4(0); + uout = uvec4(0); + fout = vec4(0.0); + + uvec2 u2out; + uout.xy += uaddCarry(u2, u2, u2out); + uout.xy += u2out; + + uint u1out; + uout.x += usubBorrow(u1, u1, u1out); + uout.x += u1out; + + uvec4 u4outHi, u4outLow; + umulExtended(u4, u4, u4outHi, u4outLow); + uout += u4outHi + u4outLow; + + ivec4 i4outHi, i4outLow; + imulExtended(i4, i4, i4outHi, i4outLow); + iout += i4outLow + i4outHi; + + ivec3 i3out; + fout.xyz += frexp(v3, i3out); + iout.xyz += i3out; + int i1out; + fout.x += frexp(v1, i1out); + iout.x += i1out; + + fout.xy += ldexp(v2, i2); + fout.x += ldexp(v1, i1); + + iout.x += bitfieldExtract(i1, 4, 5); + uout.xyz += bitfieldExtract(u3, 4, 5); + iout.xyz += bitfieldInsert(i3, i3, 4, 5); + uout.x += bitfieldInsert(u1, u1, 4, 5); + iout.xy += bitfieldReverse(i2); + uout += bitfieldReverse(u4); + iout.x += bitCount(i1); + iout.xyz += bitCount(u3); + + iout.xy += findLSB(i2); + iout += findLSB(u4); + iout.x += findMSB(i1); + iout.xy += findMSB(u2); + + uout.x += packUnorm4x8(v4); + uout.x += packSnorm4x8(v4); + fout += unpackUnorm4x8(u1); + fout += unpackSnorm4x8(u1); +} diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index a995181d1..0a7786d4d 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -2,5 +2,5 @@ // For the version, it uses the latest git tag followed by the number of commits. // For the date, it uses the current date (when then script is run). -#define GLSLANG_REVISION "3.0.798" -#define GLSLANG_DATE "15-Nov-2015" +#define GLSLANG_REVISION "SPIRV99.798" +#define GLSLANG_DATE "16-Nov-2015"