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
7bdff2b7
Unverified
Commit
7bdff2b7
authored
Apr 01, 2021
by
Greg Fischer
Committed by
GitHub
Apr 01, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2597 from greg-lunarg/interp0
Fix SPIR-V for HLSL EvaluateAttribute* of interpolants in structs
parents
6dc24ffa
7fbaca0d
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
162 additions
and
304 deletions
+162
-304
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+9
-2
SpvTools.cpp
SPIRV/SpvTools.cpp
+1
-0
hlsl.intrinsics.evalfns.frag.out
Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out
+110
-0
hlsl.intrinsics.evalfns.frag.out
Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+0
-287
hlsl.intrinsics.evalfns.frag
Test/hlsl.intrinsics.evalfns.frag
+29
-6
hlslParseHelper.cpp
glslang/HLSL/hlslParseHelper.cpp
+10
-6
Hlsl.FromFile.cpp
gtests/Hlsl.FromFile.cpp
+1
-1
known_good.json
known_good.json
+2
-2
No files found.
SPIRV/GlslangToSpv.cpp
View file @
7bdff2b7
...
@@ -2301,7 +2301,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
...
@@ -2301,7 +2301,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
if
(
node
->
getOp
()
==
glslang
::
EOpAtomicCounterIncrement
||
if
(
node
->
getOp
()
==
glslang
::
EOpAtomicCounterIncrement
||
node
->
getOp
()
==
glslang
::
EOpAtomicCounterDecrement
||
node
->
getOp
()
==
glslang
::
EOpAtomicCounterDecrement
||
node
->
getOp
()
==
glslang
::
EOpAtomicCounter
||
node
->
getOp
()
==
glslang
::
EOpAtomicCounter
||
node
->
getOp
()
==
glslang
::
EOpInterpolateAtCentroid
||
(
node
->
getOp
()
==
glslang
::
EOpInterpolateAtCentroid
&&
glslangIntermediate
->
getSource
()
!=
glslang
::
EShSourceHlsl
)
||
node
->
getOp
()
==
glslang
::
EOpRayQueryProceed
||
node
->
getOp
()
==
glslang
::
EOpRayQueryProceed
||
node
->
getOp
()
==
glslang
::
EOpRayQueryGetRayTMin
||
node
->
getOp
()
==
glslang
::
EOpRayQueryGetRayTMin
||
node
->
getOp
()
==
glslang
::
EOpRayQueryGetRayFlags
||
node
->
getOp
()
==
glslang
::
EOpRayQueryGetRayFlags
||
...
@@ -2977,7 +2978,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
...
@@ -2977,7 +2978,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case
glslang
:
:
EOpInterpolateAtOffset
:
case
glslang
:
:
EOpInterpolateAtOffset
:
case
glslang
:
:
EOpInterpolateAtVertex
:
case
glslang
:
:
EOpInterpolateAtVertex
:
if
(
arg
==
0
)
{
if
(
arg
==
0
)
{
lvalue
=
true
;
// If GLSL, use the address of the interpolant argument.
// If HLSL, use an internal version of OpInterolates that takes
// the rvalue of the interpolant. A fixup pass in spirv-opt
// legalization will remove the OpLoad and convert to an lvalue.
// Had to do this because legalization will only propagate a
// builtin into an rvalue.
lvalue
=
glslangIntermediate
->
getSource
()
!=
glslang
::
EShSourceHlsl
;
// Does it need a swizzle inversion? If so, evaluation is inverted;
// Does it need a swizzle inversion? If so, evaluation is inverted;
// operate first on the swizzle base, then apply the swizzle.
// operate first on the swizzle base, then apply the swizzle.
...
...
SPIRV/SpvTools.cpp
View file @
7bdff2b7
...
@@ -207,6 +207,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
...
@@ -207,6 +207,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
optimizer
.
RegisterPass
(
spvtools
::
CreateAggressiveDCEPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateAggressiveDCEPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateVectorDCEPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateVectorDCEPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateDeadInsertElimPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateDeadInsertElimPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateInterpolateFixupPass
());
if
(
options
->
optimizeSize
)
{
if
(
options
->
optimizeSize
)
{
optimizer
.
RegisterPass
(
spvtools
::
CreateRedundancyEliminationPass
());
optimizer
.
RegisterPass
(
spvtools
::
CreateRedundancyEliminationPass
());
}
}
...
...
Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out
0 → 100644
View file @
7bdff2b7
hlsl.intrinsics.evalfns.frag
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 274
Capability Shader
Capability InterpolationFunction
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 138 142 146 150 154 157 161
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 138 "inF1"
Name 142 "inF2"
Name 146 "inF3"
Name 150 "inF4"
Name 154 "inI2"
Name 157 "i.vPos"
Name 161 "@entryPointOutput"
Decorate 138(inF1) Location 0
Decorate 142(inF2) Location 1
Decorate 146(inF3) Location 2
Decorate 150(inF4) Location 3
Decorate 154(inI2) Flat
Decorate 154(inI2) Location 4
Decorate 157(i.vPos) Location 5
Decorate 161(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
8: TypeVector 6(float) 2
10: TypeVector 6(float) 3
12: TypeVector 6(float) 4
14: TypeInt 32 1
15: TypeVector 14(int) 2
30: 6(float) Constant 3204448256
31: 6(float) Constant 3179282432
32: 8(fvec2) ConstantComposite 30 31
36: 6(float) Constant 0
37: 6(float) Constant 1031798784
38: 8(fvec2) ConstantComposite 36 37
42: 6(float) Constant 1044381696
43: 6(float) Constant 3200253952
44: 8(fvec2) ConstantComposite 42 43
48: 6(float) Constant 1054867456
49: 8(fvec2) ConstantComposite 48 30
53: 14(int) Constant 28
64: TypeInt 32 0
65: 64(int) Constant 3
137: TypePointer Input 6(float)
138(inF1): 137(ptr) Variable Input
141: TypePointer Input 8(fvec2)
142(inF2): 141(ptr) Variable Input
145: TypePointer Input 10(fvec3)
146(inF3): 145(ptr) Variable Input
149: TypePointer Input 12(fvec4)
150(inF4): 149(ptr) Variable Input
153: TypePointer Input 15(ivec2)
154(inI2): 153(ptr) Variable Input
157(i.vPos): 141(ptr) Variable Input
160: TypePointer Output 12(fvec4)
161(@entryPointOutput): 160(ptr) Variable Output
273: 15(ivec2) ConstantComposite 53 53
4(main): 2 Function None 3
5: Label
155: 15(ivec2) Load 154(inI2)
183: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 138(inF1) 32
185: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 142(inF2) 38
187: 10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 146(inF3) 44
189: 12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 150(inF4) 49
193: 15(ivec2) ShiftLeftLogical 155 273
195: 15(ivec2) ShiftRightArithmetic 193 273
196: 8(fvec2) ConvertSToF 195
197: 8(fvec2) VectorTimesScalar 196 37
198: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 138(inF1) 197
200: 6(float) FAdd 183 198
202: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 138(inF1) 65
204: 6(float) FAdd 200 202
206: 8(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 142(inF2) 65
208: 8(fvec2) FAdd 185 206
210: 10(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 146(inF3) 65
212: 10(fvec3) FAdd 187 210
214: 12(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 150(inF4) 65
216: 12(fvec4) FAdd 189 214
219: 14(int) CompositeExtract 155 0
220: 64(int) Bitcast 219
221: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 138(inF1) 220
223: 6(float) FAdd 204 221
225: 6(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 138(inF1)
227: 6(float) FAdd 223 225
229: 8(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 142(inF2)
231: 8(fvec2) FAdd 208 229
233: 10(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 146(inF3)
235: 10(fvec3) FAdd 212 233
237: 12(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 150(inF4)
239: 12(fvec4) FAdd 216 237
242: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 157(i.vPos) 38
244: 8(fvec2) FAdd 231 242
247: 8(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 157(i.vPos) 65
249: 8(fvec2) FAdd 244 247
252: 8(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 157(i.vPos)
254: 8(fvec2) FAdd 249 252
257: 6(float) CompositeExtract 254 1
259: 6(float) CompositeExtract 235 2
261: 6(float) CompositeExtract 239 3
262: 12(fvec4) CompositeConstruct 227 257 259 261
Store 161(@entryPointOutput) 262
Return
FunctionEnd
Test/baseResults/hlsl.intrinsics.evalfns.frag.out
deleted
100644 → 0
View file @
6dc24ffa
hlsl.intrinsics.evalfns.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
0:3 Function Parameters:
0:3 'inF1' ( in float)
0:3 'inF2' ( in 2-component vector of float)
0:3 'inF3' ( in 3-component vector of float)
0:3 'inF4' ( in 4-component vector of float)
0:3 'inI2' ( in 2-component vector of int)
0:? Sequence
0:4 interpolateAtOffset ( temp float)
0:4 'inF1' ( in float)
0:? Constant:
0:? -0.500000
0:? -0.062500
0:5 interpolateAtOffset ( temp 2-component vector of float)
0:5 'inF2' ( in 2-component vector of float)
0:? Constant:
0:? 0.000000
0:? 0.062500
0:6 interpolateAtOffset ( temp 3-component vector of float)
0:6 'inF3' ( in 3-component vector of float)
0:? Constant:
0:? 0.187500
0:? -0.375000
0:7 interpolateAtOffset ( temp 4-component vector of float)
0:7 'inF4' ( in 4-component vector of float)
0:? Constant:
0:? 0.437500
0:? -0.500000
0:9 interpolateAtOffset ( temp float)
0:9 'inF1' ( in float)
0:9 vector-scale ( temp 2-component vector of float)
0:9 Convert int to float ( temp 2-component vector of float)
0:9 right-shift ( temp 2-component vector of int)
0:9 left-shift ( temp 2-component vector of int)
0:9 'inI2' ( in 2-component vector of int)
0:9 Constant:
0:9 28 (const int)
0:9 Constant:
0:9 28 (const int)
0:9 Constant:
0:9 0.062500
0:3 Function Definition: main( ( temp void)
0:3 Function Parameters:
0:? Sequence
0:3 move second child to first child ( temp float)
0:? 'inF1' ( temp float)
0:? 'inF1' (layout( location=0) in float)
0:3 move second child to first child ( temp 2-component vector of float)
0:? 'inF2' ( temp 2-component vector of float)
0:? 'inF2' (layout( location=1) in 2-component vector of float)
0:3 move second child to first child ( temp 3-component vector of float)
0:? 'inF3' ( temp 3-component vector of float)
0:? 'inF3' (layout( location=2) in 3-component vector of float)
0:3 move second child to first child ( temp 4-component vector of float)
0:? 'inF4' ( temp 4-component vector of float)
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:3 move second child to first child ( temp 2-component vector of int)
0:? 'inI2' ( temp 2-component vector of int)
0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
0:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
0:? 'inF1' ( temp float)
0:? 'inF2' ( temp 2-component vector of float)
0:? 'inF3' ( temp 3-component vector of float)
0:? 'inF4' ( temp 4-component vector of float)
0:? 'inI2' ( temp 2-component vector of int)
0:? Linker Objects
0:? 'inF1' (layout( location=0) in float)
0:? 'inF2' (layout( location=1) in 2-component vector of float)
0:? 'inF3' (layout( location=2) in 3-component vector of float)
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
0:3 Function Parameters:
0:3 'inF1' ( in float)
0:3 'inF2' ( in 2-component vector of float)
0:3 'inF3' ( in 3-component vector of float)
0:3 'inF4' ( in 4-component vector of float)
0:3 'inI2' ( in 2-component vector of int)
0:? Sequence
0:4 interpolateAtOffset ( temp float)
0:4 'inF1' ( in float)
0:? Constant:
0:? -0.500000
0:? -0.062500
0:5 interpolateAtOffset ( temp 2-component vector of float)
0:5 'inF2' ( in 2-component vector of float)
0:? Constant:
0:? 0.000000
0:? 0.062500
0:6 interpolateAtOffset ( temp 3-component vector of float)
0:6 'inF3' ( in 3-component vector of float)
0:? Constant:
0:? 0.187500
0:? -0.375000
0:7 interpolateAtOffset ( temp 4-component vector of float)
0:7 'inF4' ( in 4-component vector of float)
0:? Constant:
0:? 0.437500
0:? -0.500000
0:9 interpolateAtOffset ( temp float)
0:9 'inF1' ( in float)
0:9 vector-scale ( temp 2-component vector of float)
0:9 Convert int to float ( temp 2-component vector of float)
0:9 right-shift ( temp 2-component vector of int)
0:9 left-shift ( temp 2-component vector of int)
0:9 'inI2' ( in 2-component vector of int)
0:9 Constant:
0:9 28 (const int)
0:9 Constant:
0:9 28 (const int)
0:9 Constant:
0:9 0.062500
0:3 Function Definition: main( ( temp void)
0:3 Function Parameters:
0:? Sequence
0:3 move second child to first child ( temp float)
0:? 'inF1' ( temp float)
0:? 'inF1' (layout( location=0) in float)
0:3 move second child to first child ( temp 2-component vector of float)
0:? 'inF2' ( temp 2-component vector of float)
0:? 'inF2' (layout( location=1) in 2-component vector of float)
0:3 move second child to first child ( temp 3-component vector of float)
0:? 'inF3' ( temp 3-component vector of float)
0:? 'inF3' (layout( location=2) in 3-component vector of float)
0:3 move second child to first child ( temp 4-component vector of float)
0:? 'inF4' ( temp 4-component vector of float)
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:3 move second child to first child ( temp 2-component vector of int)
0:? 'inI2' ( temp 2-component vector of int)
0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
0:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
0:? 'inF1' ( temp float)
0:? 'inF2' ( temp 2-component vector of float)
0:? 'inF3' ( temp 3-component vector of float)
0:? 'inF4' ( temp 4-component vector of float)
0:? 'inI2' ( temp 2-component vector of int)
0:? Linker Objects
0:? 'inF1' (layout( location=0) in float)
0:? 'inF2' (layout( location=1) in 2-component vector of float)
0:? 'inF3' (layout( location=2) in 3-component vector of float)
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 80
Capability Shader
Capability InterpolationFunction
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 51 55 59 63 67
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 23 "@main(f1;vf2;vf3;vf4;vi2;"
Name 18 "inF1"
Name 19 "inF2"
Name 20 "inF3"
Name 21 "inF4"
Name 22 "inI2"
Name 49 "inF1"
Name 51 "inF1"
Name 53 "inF2"
Name 55 "inF2"
Name 57 "inF3"
Name 59 "inF3"
Name 61 "inF4"
Name 63 "inF4"
Name 65 "inI2"
Name 67 "inI2"
Name 69 "param"
Name 71 "param"
Name 73 "param"
Name 75 "param"
Name 77 "param"
Decorate 51(inF1) Location 0
Decorate 55(inF2) Location 1
Decorate 59(inF3) Location 2
Decorate 63(inF4) Location 3
Decorate 67(inI2) Flat
Decorate 67(inI2) Location 4
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypePointer Function 6(float)
8: TypeVector 6(float) 2
9: TypePointer Function 8(fvec2)
10: TypeVector 6(float) 3
11: TypePointer Function 10(fvec3)
12: TypeVector 6(float) 4
13: TypePointer Function 12(fvec4)
14: TypeInt 32 1
15: TypeVector 14(int) 2
16: TypePointer Function 15(ivec2)
17: TypeFunction 2 7(ptr) 9(ptr) 11(ptr) 13(ptr) 16(ptr)
25: 6(float) Constant 3204448256
26: 6(float) Constant 3179282432
27: 8(fvec2) ConstantComposite 25 26
29: 6(float) Constant 0
30: 6(float) Constant 1031798784
31: 8(fvec2) ConstantComposite 29 30
33: 6(float) Constant 1044381696
34: 6(float) Constant 3200253952
35: 8(fvec2) ConstantComposite 33 34
37: 6(float) Constant 1054867456
38: 8(fvec2) ConstantComposite 37 25
41: 14(int) Constant 28
50: TypePointer Input 6(float)
51(inF1): 50(ptr) Variable Input
54: TypePointer Input 8(fvec2)
55(inF2): 54(ptr) Variable Input
58: TypePointer Input 10(fvec3)
59(inF3): 58(ptr) Variable Input
62: TypePointer Input 12(fvec4)
63(inF4): 62(ptr) Variable Input
66: TypePointer Input 15(ivec2)
67(inI2): 66(ptr) Variable Input
4(main): 2 Function None 3
5: Label
49(inF1): 7(ptr) Variable Function
53(inF2): 9(ptr) Variable Function
57(inF3): 11(ptr) Variable Function
61(inF4): 13(ptr) Variable Function
65(inI2): 16(ptr) Variable Function
69(param): 7(ptr) Variable Function
71(param): 9(ptr) Variable Function
73(param): 11(ptr) Variable Function
75(param): 13(ptr) Variable Function
77(param): 16(ptr) Variable Function
52: 6(float) Load 51(inF1)
Store 49(inF1) 52
56: 8(fvec2) Load 55(inF2)
Store 53(inF2) 56
60: 10(fvec3) Load 59(inF3)
Store 57(inF3) 60
64: 12(fvec4) Load 63(inF4)
Store 61(inF4) 64
68: 15(ivec2) Load 67(inI2)
Store 65(inI2) 68
70: 6(float) Load 49(inF1)
Store 69(param) 70
72: 8(fvec2) Load 53(inF2)
Store 71(param) 72
74: 10(fvec3) Load 57(inF3)
Store 73(param) 74
76: 12(fvec4) Load 61(inF4)
Store 75(param) 76
78: 15(ivec2) Load 65(inI2)
Store 77(param) 78
79: 2 FunctionCall 23(@main(f1;vf2;vf3;vf4;vi2;) 69(param) 71(param) 73(param) 75(param) 77(param)
Return
FunctionEnd
23(@main(f1;vf2;vf3;vf4;vi2;): 2 Function None 17
18(inF1): 7(ptr) FunctionParameter
19(inF2): 9(ptr) FunctionParameter
20(inF3): 11(ptr) FunctionParameter
21(inF4): 13(ptr) FunctionParameter
22(inI2): 16(ptr) FunctionParameter
24: Label
28: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 27
32: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 19(inF2) 31
36: 10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 20(inF3) 35
39: 12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 21(inF4) 38
40: 15(ivec2) Load 22(inI2)
42: 15(ivec2) CompositeConstruct 41 41
43: 15(ivec2) ShiftLeftLogical 40 42
44: 15(ivec2) CompositeConstruct 41 41
45: 15(ivec2) ShiftRightArithmetic 43 44
46: 8(fvec2) ConvertSToF 45
47: 8(fvec2) VectorTimesScalar 46 30
48: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 47
Return
FunctionEnd
Test/hlsl.intrinsics.evalfns.frag
View file @
7bdff2b7
struct
PS_INPUT
{
float2
vPos
:
TEXCOORD0
;
};
void
main
(
float
inF1
,
float2
inF2
,
float3
inF3
,
float4
inF4
,
int2
inI2
)
:
COLOR
float4
main
(
float
inF1
,
float2
inF2
,
float3
inF3
,
float4
inF4
,
int2
inI2
,
PS_INPUT
i
)
:
COLOR
{
{
EvaluateAttributeSnapped
(
inF1
,
int2
(
8
,
15
));
float
oF1
=
EvaluateAttributeSnapped
(
inF1
,
int2
(
8
,
15
));
EvaluateAttributeSnapped
(
inF2
,
int2
(
0
,
1
));
float2
oF2
=
EvaluateAttributeSnapped
(
inF2
,
int2
(
0
,
1
));
EvaluateAttributeSnapped
(
inF3
,
int2
(
3
,
10
));
float3
oF3
=
EvaluateAttributeSnapped
(
inF3
,
int2
(
3
,
10
));
EvaluateAttributeSnapped
(
inF4
,
int2
(
7
,
8
));
float4
oF4
=
EvaluateAttributeSnapped
(
inF4
,
int2
(
7
,
8
));
oF1
+=
EvaluateAttributeSnapped
(
inF1
,
inI2
);
oF1
+=
EvaluateAttributeAtSample
(
inF1
,
3
);
oF2
+=
EvaluateAttributeAtSample
(
inF2
,
3
);
oF3
+=
EvaluateAttributeAtSample
(
inF3
,
3
);
oF4
+=
EvaluateAttributeAtSample
(
inF4
,
3
);
oF1
+=
EvaluateAttributeAtSample
(
inF1
,
inI2
.
x
);
oF1
+=
EvaluateAttributeAtCentroid
(
inF1
);
oF2
+=
EvaluateAttributeAtCentroid
(
inF2
);
oF3
+=
EvaluateAttributeAtCentroid
(
inF3
);
oF4
+=
EvaluateAttributeAtCentroid
(
inF4
);
oF2
+=
EvaluateAttributeSnapped
(
i
.
vPos
,
int2
(
0
,
1
));
oF2
+=
EvaluateAttributeAtSample
(
i
.
vPos
,
3
);
oF2
+=
EvaluateAttributeAtCentroid
(
i
.
vPos
);
EvaluateAttributeSnapped
(
inF1
,
inI2
);
float4
color
=
float4
(
oF1
,
oF2
.
y
,
oF3
.
z
,
oF4
.
w
);
return
color
;
}
}
glslang/HLSL/hlslParseHelper.cpp
View file @
7bdff2b7
...
@@ -6075,8 +6075,12 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
...
@@ -6075,8 +6075,12 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
case
EOpInterpolateAtCentroid
:
case
EOpInterpolateAtCentroid
:
case
EOpInterpolateAtSample
:
case
EOpInterpolateAtSample
:
case
EOpInterpolateAtOffset
:
case
EOpInterpolateAtOffset
:
// TODO(greg-lunarg): Re-enable this check. It currently gives false errors for builtins
// defined and passed as members of a struct. In this case the storage class is showing to be
// Function. See glslang #2584
// Make sure the first argument is an interpolant, or an array element of an interpolant
// Make sure the first argument is an interpolant, or an array element of an interpolant
if
(
arg0
->
getType
().
getQualifier
().
storage
!=
EvqVaryingIn
)
{
//
if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
// It might still be an array element.
// It might still be an array element.
//
//
// We could check more, but the semantics of the first argument are already met; the
// We could check more, but the semantics of the first argument are already met; the
...
@@ -6084,11 +6088,11 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
...
@@ -6084,11 +6088,11 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
//
//
// ES and desktop 4.3 and earlier: swizzles may not be used
// ES and desktop 4.3 and earlier: swizzles may not be used
// desktop 4.4 and later: swizzles may be used
// desktop 4.4 and later: swizzles may be used
const
TIntermTyped
*
base
=
TIntermediate
::
findLValueBase
(
arg0
,
true
);
//
const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true);
if
(
base
==
nullptr
||
base
->
getType
().
getQualifier
().
storage
!=
EvqVaryingIn
)
//
if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn)
error
(
loc
,
"first argument must be an interpolant, or interpolant-array element"
,
//
error(loc, "first argument must be an interpolant, or interpolant-array element",
fnCandidate
.
getName
().
c_str
(),
""
);
//
fnCandidate.getName().c_str(), "");
}
//
}
break
;
break
;
default
:
default
:
...
...
gtests/Hlsl.FromFile.cpp
View file @
7bdff2b7
...
@@ -245,7 +245,6 @@ INSTANTIATE_TEST_SUITE_P(
...
@@ -245,7 +245,6 @@ INSTANTIATE_TEST_SUITE_P(
{
"hlsl.isfinite.frag"
,
"main"
},
{
"hlsl.isfinite.frag"
,
"main"
},
{
"hlsl.intrinsics.barriers.comp"
,
"ComputeShaderFunction"
},
{
"hlsl.intrinsics.barriers.comp"
,
"ComputeShaderFunction"
},
{
"hlsl.intrinsics.comp"
,
"ComputeShaderFunction"
},
{
"hlsl.intrinsics.comp"
,
"ComputeShaderFunction"
},
{
"hlsl.intrinsics.evalfns.frag"
,
"main"
},
{
"hlsl.intrinsics.d3dcolortoubyte4.frag"
,
"main"
},
{
"hlsl.intrinsics.d3dcolortoubyte4.frag"
,
"main"
},
{
"hlsl.intrinsics.double.frag"
,
"PixelShaderFunction"
},
{
"hlsl.intrinsics.double.frag"
,
"PixelShaderFunction"
},
{
"hlsl.intrinsics.f1632.frag"
,
"main"
},
{
"hlsl.intrinsics.f1632.frag"
,
"main"
},
...
@@ -471,6 +470,7 @@ INSTANTIATE_TEST_SUITE_P(
...
@@ -471,6 +470,7 @@ INSTANTIATE_TEST_SUITE_P(
{
"hlsl.flattenOpaqueInitMix.vert"
,
"main"
},
{
"hlsl.flattenOpaqueInitMix.vert"
,
"main"
},
{
"hlsl.flattenSubset.frag"
,
"main"
},
{
"hlsl.flattenSubset.frag"
,
"main"
},
{
"hlsl.flattenSubset2.frag"
,
"main"
},
{
"hlsl.flattenSubset2.frag"
,
"main"
},
{
"hlsl.intrinsics.evalfns.frag"
,
"main"
},
{
"hlsl.partialFlattenLocal.vert"
,
"main"
},
{
"hlsl.partialFlattenLocal.vert"
,
"main"
},
{
"hlsl.partialFlattenMixed.vert"
,
"main"
}
{
"hlsl.partialFlattenMixed.vert"
,
"main"
}
}),
}),
...
...
known_good.json
View file @
7bdff2b7
...
@@ -5,14 +5,14 @@
...
@@ -5,14 +5,14 @@
"site"
:
"github"
,
"site"
:
"github"
,
"subrepo"
:
"KhronosGroup/SPIRV-Tools"
,
"subrepo"
:
"KhronosGroup/SPIRV-Tools"
,
"subdir"
:
"External/spirv-tools"
,
"subdir"
:
"External/spirv-tools"
,
"commit"
:
"
c79edd260c2b503f0eca57310057b4a100999cc5
"
"commit"
:
"
48007a5c7f7cc671b391bebd46e87fd6edc6c24b
"
},
},
{
{
"name"
:
"spirv-tools/external/spirv-headers"
,
"name"
:
"spirv-tools/external/spirv-headers"
,
"site"
:
"github"
,
"site"
:
"github"
,
"subrepo"
:
"KhronosGroup/SPIRV-Headers"
,
"subrepo"
:
"KhronosGroup/SPIRV-Headers"
,
"subdir"
:
"External/spirv-tools/external/spirv-headers"
,
"subdir"
:
"External/spirv-tools/external/spirv-headers"
,
"commit"
:
"
75b30a659c8a4979104986652c54cc421fc51129
"
"commit"
:
"
f88a1f98fa7a44ccfcf33d810c72b200e7d9a78a
"
}
}
]
]
}
}
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