Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
glslang
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
glslang
Commits
0a0db9e4
Commit
0a0db9e4
authored
May 05, 2016
by
John Kessenich
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'amdrexu-feature'
parents
6dea76ad
c8a56760
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
507 additions
and
6 deletions
+507
-6
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+22
-1
spv.shaderBallot.comp.out
Test/baseResults/spv.shaderBallot.comp.out
+314
-0
spv.shaderBallot.comp
Test/spv.shaderBallot.comp
+60
-0
test-spirv-list
Test/test-spirv-list
+1
-0
BaseTypes.h
glslang/Include/BaseTypes.h
+14
-0
intermediate.h
glslang/Include/intermediate.h
+4
-0
Initialize.cpp
glslang/MachineIndependent/Initialize.cpp
+83
-5
Versions.cpp
glslang/MachineIndependent/Versions.cpp
+2
-0
Versions.h
glslang/MachineIndependent/Versions.h
+1
-0
intermOut.cpp
glslang/MachineIndependent/intermOut.cpp
+5
-0
Spv.FromFile.cpp
gtests/Spv.FromFile.cpp
+1
-0
No files found.
SPIRV/GlslangToSpv.cpp
View file @
0a0db9e4
...
@@ -435,7 +435,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
...
@@ -435,7 +435,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case
glslang
:
:
EbvBaseInstance
:
case
glslang
:
:
EbvBaseInstance
:
case
glslang
:
:
EbvDrawId
:
case
glslang
:
:
EbvDrawId
:
// TODO: Add SPIR-V builtin ID.
// TODO: Add SPIR-V builtin ID.
logger
->
missingFunctionality
(
"
D
raw parameters"
);
logger
->
missingFunctionality
(
"
shader d
raw parameters"
);
return
(
spv
::
BuiltIn
)
spv
::
BadValue
;
return
(
spv
::
BuiltIn
)
spv
::
BadValue
;
case
glslang
:
:
EbvPrimitiveId
:
return
spv
::
BuiltInPrimitiveId
;
case
glslang
:
:
EbvPrimitiveId
:
return
spv
::
BuiltInPrimitiveId
;
case
glslang
:
:
EbvInvocationId
:
return
spv
::
BuiltInInvocationId
;
case
glslang
:
:
EbvInvocationId
:
return
spv
::
BuiltInInvocationId
;
...
@@ -455,6 +455,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
...
@@ -455,6 +455,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case
glslang
:
:
EbvLocalInvocationId
:
return
spv
::
BuiltInLocalInvocationId
;
case
glslang
:
:
EbvLocalInvocationId
:
return
spv
::
BuiltInLocalInvocationId
;
case
glslang
:
:
EbvLocalInvocationIndex
:
return
spv
::
BuiltInLocalInvocationIndex
;
case
glslang
:
:
EbvLocalInvocationIndex
:
return
spv
::
BuiltInLocalInvocationIndex
;
case
glslang
:
:
EbvGlobalInvocationId
:
return
spv
::
BuiltInGlobalInvocationId
;
case
glslang
:
:
EbvGlobalInvocationId
:
return
spv
::
BuiltInGlobalInvocationId
;
case
glslang
:
:
EbvSubGroupSize
:
case
glslang
:
:
EbvSubGroupInvocation
:
case
glslang
:
:
EbvSubGroupEqMask
:
case
glslang
:
:
EbvSubGroupGeMask
:
case
glslang
:
:
EbvSubGroupGtMask
:
case
glslang
:
:
EbvSubGroupLeMask
:
case
glslang
:
:
EbvSubGroupLtMask
:
// TODO: Add SPIR-V builtin ID.
logger
->
missingFunctionality
(
"shader ballot"
);
return
(
spv
::
BuiltIn
)
spv
::
BadValue
;
default
:
return
(
spv
::
BuiltIn
)
spv
::
BadValue
;
default
:
return
(
spv
::
BuiltIn
)
spv
::
BadValue
;
}
}
}
}
...
@@ -3236,6 +3246,12 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
...
@@ -3236,6 +3246,12 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
libCall
=
spv
::
GLSLstd450FindSMsb
;
libCall
=
spv
::
GLSLstd450FindSMsb
;
break
;
break
;
case
glslang
:
:
EOpBallot
:
case
glslang
:
:
EOpReadFirstInvocation
:
logger
->
missingFunctionality
(
"shader ballot"
);
libCall
=
spv
::
GLSLstd450Bad
;
break
;
default
:
default
:
return
0
;
return
0
;
}
}
...
@@ -3689,6 +3705,11 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
...
@@ -3689,6 +3705,11 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
libCall
=
spv
::
GLSLstd450Ldexp
;
libCall
=
spv
::
GLSLstd450Ldexp
;
break
;
break
;
case
glslang
:
:
EOpReadInvocation
:
logger
->
missingFunctionality
(
"shader ballot"
);
libCall
=
spv
::
GLSLstd450Bad
;
break
;
default
:
default
:
return
0
;
return
0
;
}
}
...
...
Test/baseResults/spv.shaderBallot.comp.out
0 → 100644
View file @
0a0db9e4
spv.shaderBallot.comp
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked compute stage:
Missing functionality: shader ballot
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 241
Capability Shader
Capability Int64
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 22 24 27 30 33
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
SourceExtension "GL_ARB_shader_ballot"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubGroupInvocationARB"
Name 13 "gl_SubGroupSizeARB"
Name 20 "relMask"
Name 22 "gl_SubGroupEqMaskARB"
Name 24 "gl_SubGroupGeMaskARB"
Name 27 "gl_SubGroupGtMaskARB"
Name 30 "gl_SubGroupLeMaskARB"
Name 33 "gl_SubGroupLtMaskARB"
Name 48 "Buffers"
MemberName 48(Buffers) 0 "f4"
MemberName 48(Buffers) 1 "i4"
MemberName 48(Buffers) 2 "u4"
Name 51 "data"
MemberDecorate 48(Buffers) 0 Offset 0
MemberDecorate 48(Buffers) 1 Offset 16
MemberDecorate 48(Buffers) 2 Offset 32
Decorate 48(Buffers) BufferBlock
Decorate 51(data) DescriptorSet 0
Decorate 51(data) Binding 0
Decorate 240 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypePointer Function 6(int)
9: TypePointer Input 6(int)
10(gl_SubGroupInvocationARB): 9(ptr) Variable Input
12: TypePointer UniformConstant 6(int)
13(gl_SubGroupSizeARB): 12(ptr) Variable UniformConstant
16: 6(int) Constant 4
18: TypeInt 64 0
19: TypePointer Function 18(int)
21: TypePointer Input 18(int)
22(gl_SubGroupEqMaskARB): 21(ptr) Variable Input
24(gl_SubGroupGeMaskARB): 21(ptr) Variable Input
27(gl_SubGroupGtMaskARB): 21(ptr) Variable Input
30(gl_SubGroupLeMaskARB): 21(ptr) Variable Input
33(gl_SubGroupLtMaskARB): 21(ptr) Variable Input
37: TypeBool
38: 37(bool) ConstantTrue
43: TypeFloat 32
44: TypeVector 43(float) 4
45: TypeInt 32 1
46: TypeVector 45(int) 4
47: TypeVector 6(int) 4
48(Buffers): TypeStruct 44(fvec4) 46(ivec4) 47(ivec4)
49: TypeArray 48(Buffers) 16
50: TypePointer Uniform 49
51(data): 50(ptr) Variable Uniform
53: 45(int) Constant 0
54: 6(int) Constant 0
55: TypePointer Uniform 43(float)
62: 45(int) Constant 1
63: TypeVector 43(float) 2
64: TypePointer Uniform 44(fvec4)
74: 45(int) Constant 2
75: TypeVector 43(float) 3
85: 45(int) Constant 3
92: TypePointer Uniform 45(int)
99: TypeVector 45(int) 2
100: TypePointer Uniform 46(ivec4)
110: TypeVector 45(int) 3
126: TypePointer Uniform 6(int)
133: TypeVector 6(int) 2
134: TypePointer Uniform 47(ivec4)
144: TypeVector 6(int) 3
238: 6(int) Constant 8
239: 6(int) Constant 1
240: 144(ivec3) ConstantComposite 238 238 239
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
20(relMask): 19(ptr) Variable Function
11: 6(int) Load 10(gl_SubGroupInvocationARB)
14: 6(int) Load 13(gl_SubGroupSizeARB)
15: 6(int) IAdd 11 14
17: 6(int) UMod 15 16
Store 8(invocation) 17
23: 18(int) Load 22(gl_SubGroupEqMaskARB)
25: 18(int) Load 24(gl_SubGroupGeMaskARB)
26: 18(int) IAdd 23 25
28: 18(int) Load 27(gl_SubGroupGtMaskARB)
29: 18(int) IAdd 26 28
31: 18(int) Load 30(gl_SubGroupLeMaskARB)
32: 18(int) IAdd 29 31
34: 18(int) Load 33(gl_SubGroupLtMaskARB)
35: 18(int) IAdd 32 34
Store 20(relMask) 35
36: 18(int) Load 20(relMask)
39: 18(int) ExtInst 1(GLSL.std.450) 0(Unknown) 38
40: 37(bool) IEqual 36 39
SelectionMerge 42 None
BranchConditional 40 41 159
41: Label
52: 6(int) Load 8(invocation)
56: 55(ptr) AccessChain 51(data) 53 53 54
57: 43(float) Load 56
58: 6(int) Load 8(invocation)
59: 43(float) ExtInst 1(GLSL.std.450) 0(Unknown) 57 58
60: 55(ptr) AccessChain 51(data) 52 53 54
Store 60 59
61: 6(int) Load 8(invocation)
65: 64(ptr) AccessChain 51(data) 62 53
66: 44(fvec4) Load 65
67: 63(fvec2) VectorShuffle 66 66 0 1
68: 6(int) Load 8(invocation)
69: 63(fvec2) ExtInst 1(GLSL.std.450) 0(Unknown) 67 68
70: 64(ptr) AccessChain 51(data) 61 53
71: 44(fvec4) Load 70
72: 44(fvec4) VectorShuffle 71 69 4 5 2 3
Store 70 72
73: 6(int) Load 8(invocation)
76: 64(ptr) AccessChain 51(data) 74 53
77: 44(fvec4) Load 76
78: 75(fvec3) VectorShuffle 77 77 0 1 2
79: 6(int) Load 8(invocation)
80: 75(fvec3) ExtInst 1(GLSL.std.450) 0(Unknown) 78 79
81: 64(ptr) AccessChain 51(data) 73 53
82: 44(fvec4) Load 81
83: 44(fvec4) VectorShuffle 82 80 4 5 6 3
Store 81 83
84: 6(int) Load 8(invocation)
86: 64(ptr) AccessChain 51(data) 85 53
87: 44(fvec4) Load 86
88: 6(int) Load 8(invocation)
89: 44(fvec4) ExtInst 1(GLSL.std.450) 0(Unknown) 87 88
90: 64(ptr) AccessChain 51(data) 84 53
Store 90 89
91: 6(int) Load 8(invocation)
93: 92(ptr) AccessChain 51(data) 53 62 54
94: 45(int) Load 93
95: 6(int) Load 8(invocation)
96: 45(int) ExtInst 1(GLSL.std.450) 0(Unknown) 94 95
97: 92(ptr) AccessChain 51(data) 91 62 54
Store 97 96
98: 6(int) Load 8(invocation)
101: 100(ptr) AccessChain 51(data) 62 62
102: 46(ivec4) Load 101
103: 99(ivec2) VectorShuffle 102 102 0 1
104: 6(int) Load 8(invocation)
105: 99(ivec2) ExtInst 1(GLSL.std.450) 0(Unknown) 103 104
106: 100(ptr) AccessChain 51(data) 98 62
107: 46(ivec4) Load 106
108: 46(ivec4) VectorShuffle 107 105 4 5 2 3
Store 106 108
109: 6(int) Load 8(invocation)
111: 100(ptr) AccessChain 51(data) 74 62
112: 46(ivec4) Load 111
113: 110(ivec3) VectorShuffle 112 112 0 1 2
114: 6(int) Load 8(invocation)
115: 110(ivec3) ExtInst 1(GLSL.std.450) 0(Unknown) 113 114
116: 100(ptr) AccessChain 51(data) 109 62
117: 46(ivec4) Load 116
118: 46(ivec4) VectorShuffle 117 115 4 5 6 3
Store 116 118
119: 6(int) Load 8(invocation)
120: 100(ptr) AccessChain 51(data) 85 62
121: 46(ivec4) Load 120
122: 6(int) Load 8(invocation)
123: 46(ivec4) ExtInst 1(GLSL.std.450) 0(Unknown) 121 122
124: 100(ptr) AccessChain 51(data) 119 62
Store 124 123
125: 6(int) Load 8(invocation)
127: 126(ptr) AccessChain 51(data) 53 74 54
128: 6(int) Load 127
129: 6(int) Load 8(invocation)
130: 6(int) ExtInst 1(GLSL.std.450) 0(Unknown) 128 129
131: 126(ptr) AccessChain 51(data) 125 74 54
Store 131 130
132: 6(int) Load 8(invocation)
135: 134(ptr) AccessChain 51(data) 62 74
136: 47(ivec4) Load 135
137: 133(ivec2) VectorShuffle 136 136 0 1
138: 6(int) Load 8(invocation)
139: 133(ivec2) ExtInst 1(GLSL.std.450) 0(Unknown) 137 138
140: 134(ptr) AccessChain 51(data) 132 74
141: 47(ivec4) Load 140
142: 47(ivec4) VectorShuffle 141 139 4 5 2 3
Store 140 142
143: 6(int) Load 8(invocation)
145: 134(ptr) AccessChain 51(data) 74 74
146: 47(ivec4) Load 145
147: 144(ivec3) VectorShuffle 146 146 0 1 2
148: 6(int) Load 8(invocation)
149: 144(ivec3) ExtInst 1(GLSL.std.450) 0(Unknown) 147 148
150: 134(ptr) AccessChain 51(data) 143 74
151: 47(ivec4) Load 150
152: 47(ivec4) VectorShuffle 151 149 4 5 6 3
Store 150 152
153: 6(int) Load 8(invocation)
154: 134(ptr) AccessChain 51(data) 85 74
155: 47(ivec4) Load 154
156: 6(int) Load 8(invocation)
157: 47(ivec4) ExtInst 1(GLSL.std.450) 0(Unknown) 155 156
158: 134(ptr) AccessChain 51(data) 153 74
Store 158 157
Branch 42
159: Label
160: 6(int) Load 8(invocation)
161: 55(ptr) AccessChain 51(data) 53 53 54
162: 43(float) Load 161
163: 43(float) ExtInst 1(GLSL.std.450) 0(Unknown) 162
164: 55(ptr) AccessChain 51(data) 160 53 54
Store 164 163
165: 6(int) Load 8(invocation)
166: 64(ptr) AccessChain 51(data) 62 53
167: 44(fvec4) Load 166
168: 63(fvec2) VectorShuffle 167 167 0 1
169: 63(fvec2) ExtInst 1(GLSL.std.450) 0(Unknown) 168
170: 64(ptr) AccessChain 51(data) 165 53
171: 44(fvec4) Load 170
172: 44(fvec4) VectorShuffle 171 169 4 5 2 3
Store 170 172
173: 6(int) Load 8(invocation)
174: 64(ptr) AccessChain 51(data) 74 53
175: 44(fvec4) Load 174
176: 75(fvec3) VectorShuffle 175 175 0 1 2
177: 75(fvec3) ExtInst 1(GLSL.std.450) 0(Unknown) 176
178: 64(ptr) AccessChain 51(data) 173 53
179: 44(fvec4) Load 178
180: 44(fvec4) VectorShuffle 179 177 4 5 6 3
Store 178 180
181: 6(int) Load 8(invocation)
182: 64(ptr) AccessChain 51(data) 85 53
183: 44(fvec4) Load 182
184: 44(fvec4) ExtInst 1(GLSL.std.450) 0(Unknown) 183
185: 64(ptr) AccessChain 51(data) 181 53
Store 185 184
186: 6(int) Load 8(invocation)
187: 92(ptr) AccessChain 51(data) 53 62 54
188: 45(int) Load 187
189: 45(int) ExtInst 1(GLSL.std.450) 0(Unknown) 188
190: 92(ptr) AccessChain 51(data) 186 62 54
Store 190 189
191: 6(int) Load 8(invocation)
192: 100(ptr) AccessChain 51(data) 62 62
193: 46(ivec4) Load 192
194: 99(ivec2) VectorShuffle 193 193 0 1
195: 99(ivec2) ExtInst 1(GLSL.std.450) 0(Unknown) 194
196: 100(ptr) AccessChain 51(data) 191 62
197: 46(ivec4) Load 196
198: 46(ivec4) VectorShuffle 197 195 4 5 2 3
Store 196 198
199: 6(int) Load 8(invocation)
200: 100(ptr) AccessChain 51(data) 74 62
201: 46(ivec4) Load 200
202: 110(ivec3) VectorShuffle 201 201 0 1 2
203: 110(ivec3) ExtInst 1(GLSL.std.450) 0(Unknown) 202
204: 100(ptr) AccessChain 51(data) 199 62
205: 46(ivec4) Load 204
206: 46(ivec4) VectorShuffle 205 203 4 5 6 3
Store 204 206
207: 6(int) Load 8(invocation)
208: 100(ptr) AccessChain 51(data) 85 62
209: 46(ivec4) Load 208
210: 46(ivec4) ExtInst 1(GLSL.std.450) 0(Unknown) 209
211: 100(ptr) AccessChain 51(data) 207 62
Store 211 210
212: 6(int) Load 8(invocation)
213: 126(ptr) AccessChain 51(data) 53 74 54
214: 6(int) Load 213
215: 6(int) ExtInst 1(GLSL.std.450) 0(Unknown) 214
216: 126(ptr) AccessChain 51(data) 212 74 54
Store 216 215
217: 6(int) Load 8(invocation)
218: 134(ptr) AccessChain 51(data) 62 74
219: 47(ivec4) Load 218
220: 133(ivec2) VectorShuffle 219 219 0 1
221: 133(ivec2) ExtInst 1(GLSL.std.450) 0(Unknown) 220
222: 134(ptr) AccessChain 51(data) 217 74
223: 47(ivec4) Load 222
224: 47(ivec4) VectorShuffle 223 221 4 5 2 3
Store 222 224
225: 6(int) Load 8(invocation)
226: 134(ptr) AccessChain 51(data) 74 74
227: 47(ivec4) Load 226
228: 144(ivec3) VectorShuffle 227 227 0 1 2
229: 144(ivec3) ExtInst 1(GLSL.std.450) 0(Unknown) 228
230: 134(ptr) AccessChain 51(data) 225 74
231: 47(ivec4) Load 230
232: 47(ivec4) VectorShuffle 231 229 4 5 6 3
Store 230 232
233: 6(int) Load 8(invocation)
234: 134(ptr) AccessChain 51(data) 85 74
235: 47(ivec4) Load 234
236: 47(ivec4) ExtInst 1(GLSL.std.450) 0(Unknown) 235
237: 134(ptr) AccessChain 51(data) 233 74
Store 237 236
Branch 42
42: Label
Return
FunctionEnd
Test/spv.shaderBallot.comp
0 → 100644
View file @
0a0db9e4
#version 450
#extension GL_ARB_gpu_shader_int64: enable
#extension GL_ARB_shader_ballot: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
} data[4];
void main()
{
uint invocation = (gl_SubGroupInvocationARB + gl_SubGroupSizeARB) % 4;
uint64_t relMask = gl_SubGroupEqMaskARB +
gl_SubGroupGeMaskARB +
gl_SubGroupGtMaskARB +
gl_SubGroupLeMaskARB +
gl_SubGroupLtMaskARB;
if (relMask == ballotARB(true))
{
data[invocation].f4.x = readInvocationARB(data[0].f4.x, invocation);
data[invocation].f4.xy = readInvocationARB(data[1].f4.xy, invocation);
data[invocation].f4.xyz = readInvocationARB(data[2].f4.xyz, invocation);
data[invocation].f4 = readInvocationARB(data[3].f4, invocation);
data[invocation].i4.x = readInvocationARB(data[0].i4.x, invocation);
data[invocation].i4.xy = readInvocationARB(data[1].i4.xy, invocation);
data[invocation].i4.xyz = readInvocationARB(data[2].i4.xyz, invocation);
data[invocation].i4 = readInvocationARB(data[3].i4, invocation);
data[invocation].u4.x = readInvocationARB(data[0].u4.x, invocation);
data[invocation].u4.xy = readInvocationARB(data[1].u4.xy, invocation);
data[invocation].u4.xyz = readInvocationARB(data[2].u4.xyz, invocation);
data[invocation].u4 = readInvocationARB(data[3].u4, invocation);
}
else
{
data[invocation].f4.x = readFirstInvocationARB(data[0].f4.x);
data[invocation].f4.xy = readFirstInvocationARB(data[1].f4.xy);
data[invocation].f4.xyz = readFirstInvocationARB(data[2].f4.xyz);
data[invocation].f4 = readFirstInvocationARB(data[3].f4);
data[invocation].i4.x = readFirstInvocationARB(data[0].i4.x);
data[invocation].i4.xy = readFirstInvocationARB(data[1].i4.xy);
data[invocation].i4.xyz = readFirstInvocationARB(data[2].i4.xyz);
data[invocation].i4 = readFirstInvocationARB(data[3].i4);
data[invocation].u4.x = readFirstInvocationARB(data[0].u4.x);
data[invocation].u4.xy = readFirstInvocationARB(data[1].u4.xy);
data[invocation].u4.xyz = readFirstInvocationARB(data[2].u4.xyz);
data[invocation].u4 = readFirstInvocationARB(data[3].u4);
}
}
\ No newline at end of file
Test/test-spirv-list
View file @
0a0db9e4
...
@@ -72,6 +72,7 @@ spv.intOps.vert
...
@@ -72,6 +72,7 @@ spv.intOps.vert
spv.precision.frag
spv.precision.frag
spv.prepost.frag
spv.prepost.frag
spv.qualifiers.vert
spv.qualifiers.vert
spv.shaderBallot.comp
spv.shiftOps.frag
spv.shiftOps.frag
spv.simpleFunctionCall.frag
spv.simpleFunctionCall.frag
spv.simpleMat.vert
spv.simpleMat.vert
...
...
glslang/Include/BaseTypes.h
View file @
0a0db9e4
...
@@ -130,6 +130,13 @@ enum TBuiltInVariable {
...
@@ -130,6 +130,13 @@ enum TBuiltInVariable {
EbvLocalInvocationId
,
EbvLocalInvocationId
,
EbvGlobalInvocationId
,
EbvGlobalInvocationId
,
EbvLocalInvocationIndex
,
EbvLocalInvocationIndex
,
EbvSubGroupSize
,
EbvSubGroupInvocation
,
EbvSubGroupEqMask
,
EbvSubGroupGeMask
,
EbvSubGroupGtMask
,
EbvSubGroupLeMask
,
EbvSubGroupLtMask
,
EbvVertexId
,
EbvVertexId
,
EbvInstanceId
,
EbvInstanceId
,
EbvVertexIndex
,
EbvVertexIndex
,
...
@@ -223,6 +230,13 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
...
@@ -223,6 +230,13 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case
EbvLocalInvocationId
:
return
"LocalInvocationID"
;
case
EbvLocalInvocationId
:
return
"LocalInvocationID"
;
case
EbvGlobalInvocationId
:
return
"GlobalInvocationID"
;
case
EbvGlobalInvocationId
:
return
"GlobalInvocationID"
;
case
EbvLocalInvocationIndex
:
return
"LocalInvocationIndex"
;
case
EbvLocalInvocationIndex
:
return
"LocalInvocationIndex"
;
case
EbvSubGroupSize
:
return
"SubGroupSize"
;
case
EbvSubGroupInvocation
:
return
"SubGroupInvocation"
;
case
EbvSubGroupEqMask
:
return
"SubGroupEqMask"
;
case
EbvSubGroupGeMask
:
return
"SubGroupGeMask"
;
case
EbvSubGroupGtMask
:
return
"SubGroupGtMask"
;
case
EbvSubGroupLeMask
:
return
"SubGroupLeMask"
;
case
EbvSubGroupLtMask
:
return
"SubGroupLtMask"
;
case
EbvVertexId
:
return
"VertexId"
;
case
EbvVertexId
:
return
"VertexId"
;
case
EbvInstanceId
:
return
"InstanceId"
;
case
EbvInstanceId
:
return
"InstanceId"
;
case
EbvVertexIndex
:
return
"VertexIndex"
;
case
EbvVertexIndex
:
return
"VertexIndex"
;
...
...
glslang/Include/intermediate.h
View file @
0a0db9e4
...
@@ -283,6 +283,10 @@ enum TOperator {
...
@@ -283,6 +283,10 @@ enum TOperator {
EOpMemoryBarrierShared
,
// compute only
EOpMemoryBarrierShared
,
// compute only
EOpGroupMemoryBarrier
,
// compute only
EOpGroupMemoryBarrier
,
// compute only
EOpBallot
,
EOpReadInvocation
,
EOpReadFirstInvocation
,
EOpAtomicAdd
,
EOpAtomicAdd
,
EOpAtomicMin
,
EOpAtomicMin
,
EOpAtomicMax
,
EOpAtomicMax
,
...
...
glslang/MachineIndependent/Initialize.cpp
View file @
0a0db9e4
...
@@ -1325,6 +1325,44 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
...
@@ -1325,6 +1325,44 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
"
\n
"
);
"
\n
"
);
}
}
// GL_ARB_shader_ballot
if
(
profile
!=
EEsProfile
&&
version
>=
450
)
{
commonBuiltins
.
append
(
"uint64_t ballotARB(bool);"
"float readInvocationARB(float, uint);"
"vec2 readInvocationARB(vec2, uint);"
"vec3 readInvocationARB(vec3, uint);"
"vec4 readInvocationARB(vec4, uint);"
"int readInvocationARB(int, uint);"
"ivec2 readInvocationARB(ivec2, uint);"
"ivec3 readInvocationARB(ivec3, uint);"
"ivec4 readInvocationARB(ivec4, uint);"
"uint readInvocationARB(uint, uint);"
"uvec2 readInvocationARB(uvec2, uint);"
"uvec3 readInvocationARB(uvec3, uint);"
"uvec4 readInvocationARB(uvec4, uint);"
"float readFirstInvocationARB(float);"
"vec2 readFirstInvocationARB(vec2);"
"vec3 readFirstInvocationARB(vec3);"
"vec4 readFirstInvocationARB(vec4);"
"int readFirstInvocationARB(int);"
"ivec2 readFirstInvocationARB(ivec2);"
"ivec3 readFirstInvocationARB(ivec3);"
"ivec4 readFirstInvocationARB(ivec4);"
"uint readFirstInvocationARB(uint);"
"uvec2 readFirstInvocationARB(uvec2);"
"uvec3 readFirstInvocationARB(uvec3);"
"uvec4 readFirstInvocationARB(uvec4);"
"
\n
"
);
}
//============================================================================
//============================================================================
//
//
// Prototypes for built-in functions seen by vertex shaders only.
// Prototypes for built-in functions seen by vertex shaders only.
...
@@ -2232,6 +2270,21 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
...
@@ -2232,6 +2270,21 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
if
(
version
>=
130
)
if
(
version
>=
130
)
add2ndGenerationSamplingImaging
(
version
,
profile
,
spv
,
vulkan
);
add2ndGenerationSamplingImaging
(
version
,
profile
,
spv
,
vulkan
);
// GL_ARB_shader_ballot
if
(
profile
!=
EEsProfile
&&
version
>=
450
)
{
commonBuiltins
.
append
(
"uniform uint gl_SubGroupSizeARB;"
"in uint gl_SubGroupInvocationARB;"
"in uint64_t gl_SubGroupEqMaskARB;"
"in uint64_t gl_SubGroupGeMaskARB;"
"in uint64_t gl_SubGroupGtMaskARB;"
"in uint64_t gl_SubGroupLeMaskARB;"
"in uint64_t gl_SubGroupLtMaskARB;"
"
\n
"
);
}
//printf("%s\n", commonBuiltins.c_str());
//printf("%s\n", commonBuiltins.c_str());
//printf("%s\n", stageBuiltins[EShLangFragment].c_str());
//printf("%s\n", stageBuiltins[EShLangFragment].c_str());
}
}
...
@@ -3394,7 +3447,7 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
...
@@ -3394,7 +3447,7 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
switch
(
language
)
{
switch
(
language
)
{
case
EShLangVertex
:
case
EShLangVertex
:
if
(
profile
!=
EEsProfile
&&
version
>=
440
)
{
if
(
profile
!=
EEsProfile
)
{
symbolTable
.
setVariableExtensions
(
"gl_BaseVertexARB"
,
1
,
&
E_GL_ARB_shader_draw_parameters
);
symbolTable
.
setVariableExtensions
(
"gl_BaseVertexARB"
,
1
,
&
E_GL_ARB_shader_draw_parameters
);
symbolTable
.
setVariableExtensions
(
"gl_BaseInstanceARB"
,
1
,
&
E_GL_ARB_shader_draw_parameters
);
symbolTable
.
setVariableExtensions
(
"gl_BaseInstanceARB"
,
1
,
&
E_GL_ARB_shader_draw_parameters
);
symbolTable
.
setVariableExtensions
(
"gl_DrawIDARB"
,
1
,
&
E_GL_ARB_shader_draw_parameters
);
symbolTable
.
setVariableExtensions
(
"gl_DrawIDARB"
,
1
,
&
E_GL_ARB_shader_draw_parameters
);
...
@@ -3404,6 +3457,28 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
...
@@ -3404,6 +3457,28 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
BuiltInVariable
(
"gl_DrawIDARB"
,
EbvDrawId
,
symbolTable
);
BuiltInVariable
(
"gl_DrawIDARB"
,
EbvDrawId
,
symbolTable
);
}
}
if
(
profile
!=
EEsProfile
)
{
symbolTable
.
setVariableExtensions
(
"gl_SubGroupSizeARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubGroupInvocationARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubGroupEqMaskARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubGroupGeMaskARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubGroupGtMaskARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubGroupLeMaskARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubGroupLtMaskARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setFunctionExtensions
(
"ballotARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setFunctionExtensions
(
"readInvocationARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
symbolTable
.
setFunctionExtensions
(
"readFirstInvocationARB"
,
1
,
&
E_GL_ARB_shader_ballot
);
BuiltInVariable
(
"gl_SubGroupSizeARB"
,
EbvSubGroupSize
,
symbolTable
);
BuiltInVariable
(
"gl_SubGroupInvocationARB"
,
EbvSubGroupInvocation
,
symbolTable
);
BuiltInVariable
(
"gl_SubGroupEqMaskARB"
,
EbvSubGroupEqMask
,
symbolTable
);
BuiltInVariable
(
"gl_SubGroupGeMaskARB"
,
EbvSubGroupGeMask
,
symbolTable
);
BuiltInVariable
(
"gl_SubGroupGtMaskARB"
,
EbvSubGroupGtMask
,
symbolTable
);
BuiltInVariable
(
"gl_SubGroupLeMaskARB"
,
EbvSubGroupLeMask
,
symbolTable
);
BuiltInVariable
(
"gl_SubGroupLtMaskARB"
,
EbvSubGroupLtMask
,
symbolTable
);
}
// Compatibility variables, vertex only
// Compatibility variables, vertex only
if
(
spv
==
0
)
{
if
(
spv
==
0
)
{
BuiltInVariable
(
"gl_Color"
,
EbvColor
,
symbolTable
);
BuiltInVariable
(
"gl_Color"
,
EbvColor
,
symbolTable
);
...
@@ -3963,8 +4038,7 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
...
@@ -3963,8 +4038,7 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
symbolTable
.
relateToOperator
(
"shadow2DProjLod"
,
EOpTextureProjLod
);
symbolTable
.
relateToOperator
(
"shadow2DProjLod"
,
EOpTextureProjLod
);
}
}
if
(
profile
!=
EEsProfile
)
if
(
profile
!=
EEsProfile
)
{
{
symbolTable
.
relateToOperator
(
"sparseTextureARB"
,
EOpSparseTexture
);
symbolTable
.
relateToOperator
(
"sparseTextureARB"
,
EOpSparseTexture
);
symbolTable
.
relateToOperator
(
"sparseTextureLodARB"
,
EOpSparseTextureLod
);
symbolTable
.
relateToOperator
(
"sparseTextureLodARB"
,
EOpSparseTextureLod
);
symbolTable
.
relateToOperator
(
"sparseTextureOffsetARB"
,
EOpSparseTextureOffset
);
symbolTable
.
relateToOperator
(
"sparseTextureOffsetARB"
,
EOpSparseTextureOffset
);
...
@@ -3987,6 +4061,10 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
...
@@ -3987,6 +4061,10 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
symbolTable
.
relateToOperator
(
"textureOffsetClampARB"
,
EOpTextureOffsetClamp
);
symbolTable
.
relateToOperator
(
"textureOffsetClampARB"
,
EOpTextureOffsetClamp
);
symbolTable
.
relateToOperator
(
"textureGradClampARB"
,
EOpTextureGradClamp
);
symbolTable
.
relateToOperator
(
"textureGradClampARB"
,
EOpTextureGradClamp
);
symbolTable
.
relateToOperator
(
"textureGradOffsetClampARB"
,
EOpTextureGradOffsetClamp
);
symbolTable
.
relateToOperator
(
"textureGradOffsetClampARB"
,
EOpTextureGradOffsetClamp
);
symbolTable
.
relateToOperator
(
"ballotARB"
,
EOpBallot
);
symbolTable
.
relateToOperator
(
"readInvocationARB"
,
EOpReadInvocation
);
symbolTable
.
relateToOperator
(
"readFirstInvocationARB"
,
EOpReadFirstInvocation
);
}
}
}
}
...
@@ -4023,8 +4101,8 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
...
@@ -4023,8 +4101,8 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLan
break
;
break
;
case
EShLangCompute
:
case
EShLangCompute
:
symbolTable
.
relateToOperator
(
"memoryBarrierShared"
,
EOpMemoryBarrierShared
);
symbolTable
.
relateToOperator
(
"memoryBarrierShared"
,
EOpMemoryBarrierShared
);
symbolTable
.
relateToOperator
(
"groupMemoryBarrier"
,
EOpGroupMemoryBarrier
);
symbolTable
.
relateToOperator
(
"groupMemoryBarrier"
,
EOpGroupMemoryBarrier
);
break
;
break
;
default
:
default
:
...
...
glslang/MachineIndependent/Versions.cpp
View file @
0a0db9e4
...
@@ -176,6 +176,7 @@ void TParseVersions::initializeExtensionBehavior()
...
@@ -176,6 +176,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior
[
E_GL_ARB_viewport_array
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_viewport_array
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_gpu_shader_int64
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_gpu_shader_int64
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_gl_spirv
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_gl_spirv
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_shader_ballot
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_sparse_texture2
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_sparse_texture2
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_sparse_texture_clamp
]
=
EBhDisable
;
extensionBehavior
[
E_GL_ARB_sparse_texture_clamp
]
=
EBhDisable
;
// extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
// extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
...
@@ -277,6 +278,7 @@ void TParseVersions::getPreamble(std::string& preamble)
...
@@ -277,6 +278,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_ARB_viewport_array 1
\n
"
"#define GL_ARB_viewport_array 1
\n
"
"#define GL_ARB_gpu_shader_int64 1
\n
"
"#define GL_ARB_gpu_shader_int64 1
\n
"
"#define GL_ARB_gl_spirv 1
\n
"
"#define GL_ARB_gl_spirv 1
\n
"
"#define GL_ARB_shader_ballot 1
\n
"
"#define GL_ARB_sparse_texture2 1
\n
"
"#define GL_ARB_sparse_texture2 1
\n
"
"#define GL_ARB_sparse_texture_clamp 1
\n
"
"#define GL_ARB_sparse_texture_clamp 1
\n
"
// "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members
// "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members
...
...
glslang/MachineIndependent/Versions.h
View file @
0a0db9e4
...
@@ -113,6 +113,7 @@ const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture
...
@@ -113,6 +113,7 @@ const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture
const
char
*
const
E_GL_ARB_viewport_array
=
"GL_ARB_viewport_array"
;
const
char
*
const
E_GL_ARB_viewport_array
=
"GL_ARB_viewport_array"
;
const
char
*
const
E_GL_ARB_gpu_shader_int64
=
"GL_ARB_gpu_shader_int64"
;
const
char
*
const
E_GL_ARB_gpu_shader_int64
=
"GL_ARB_gpu_shader_int64"
;
const
char
*
const
E_GL_ARB_gl_spirv
=
"GL_ARB_gl_spirv"
;
const
char
*
const
E_GL_ARB_gl_spirv
=
"GL_ARB_gl_spirv"
;
const
char
*
const
E_GL_ARB_shader_ballot
=
"GL_ARB_shader_ballot"
;
const
char
*
const
E_GL_ARB_sparse_texture2
=
"GL_ARB_sparse_texture2"
;
const
char
*
const
E_GL_ARB_sparse_texture2
=
"GL_ARB_sparse_texture2"
;
const
char
*
const
E_GL_ARB_sparse_texture_clamp
=
"GL_ARB_sparse_texture_clamp"
;
const
char
*
const
E_GL_ARB_sparse_texture_clamp
=
"GL_ARB_sparse_texture_clamp"
;
//const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members
//const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members
...
...
glslang/MachineIndependent/intermOut.cpp
View file @
0a0db9e4
...
@@ -351,6 +351,9 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
...
@@ -351,6 +351,9 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case
EOpNoise
:
out
.
debug
<<
"noise"
;
break
;
case
EOpNoise
:
out
.
debug
<<
"noise"
;
break
;
case
EOpBallot
:
out
.
debug
<<
"ballot"
;
break
;
case
EOpReadFirstInvocation
:
out
.
debug
<<
"readFirstInvocation"
;
break
;
default
:
out
.
debug
.
message
(
EPrefixError
,
"Bad unary op"
);
default
:
out
.
debug
.
message
(
EPrefixError
,
"Bad unary op"
);
}
}
...
@@ -466,6 +469,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
...
@@ -466,6 +469,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case
EOpMemoryBarrierShared
:
out
.
debug
<<
"MemoryBarrierShared"
;
break
;
case
EOpMemoryBarrierShared
:
out
.
debug
<<
"MemoryBarrierShared"
;
break
;
case
EOpGroupMemoryBarrier
:
out
.
debug
<<
"GroupMemoryBarrier"
;
break
;
case
EOpGroupMemoryBarrier
:
out
.
debug
<<
"GroupMemoryBarrier"
;
break
;
case
EOpReadInvocation
:
out
.
debug
<<
"readInvocation"
;
break
;
case
EOpAtomicAdd
:
out
.
debug
<<
"AtomicAdd"
;
break
;
case
EOpAtomicAdd
:
out
.
debug
<<
"AtomicAdd"
;
break
;
case
EOpAtomicMin
:
out
.
debug
<<
"AtomicMin"
;
break
;
case
EOpAtomicMin
:
out
.
debug
<<
"AtomicMin"
;
break
;
case
EOpAtomicMax
:
out
.
debug
<<
"AtomicMax"
;
break
;
case
EOpAtomicMax
:
out
.
debug
<<
"AtomicMax"
;
break
;
...
...
gtests/Spv.FromFile.cpp
View file @
0a0db9e4
...
@@ -138,6 +138,7 @@ INSTANTIATE_TEST_CASE_P(
...
@@ -138,6 +138,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.precision.frag"
,
"spv.precision.frag"
,
"spv.prepost.frag"
,
"spv.prepost.frag"
,
"spv.qualifiers.vert"
,
"spv.qualifiers.vert"
,
"spv.shaderBallot.comp"
,
"spv.shiftOps.frag"
,
"spv.shiftOps.frag"
,
"spv.simpleFunctionCall.frag"
,
"spv.simpleFunctionCall.frag"
,
"spv.simpleMat.vert"
,
"spv.simpleMat.vert"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment