Unverified Commit 99508c1c by John Kessenich Committed by GitHub

Merge pull request #2157 from neslimsah/master

GL_EXT_ray_query pass-by-reference issues
parents 2df8c712 054b5e35
......@@ -2197,7 +2197,15 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
node->getOp() == glslang::EOpAtomicCounterDecrement ||
node->getOp() == glslang::EOpAtomicCounter ||
node->getOp() == glslang::EOpInterpolateAtCentroid) {
node->getOp() == glslang::EOpInterpolateAtCentroid ||
node->getOp() == glslang::EOpRayQueryProceed ||
node->getOp() == glslang::EOpRayQueryGetRayTMin ||
node->getOp() == glslang::EOpRayQueryGetRayFlags ||
node->getOp() == glslang::EOpRayQueryGetWorldRayOrigin ||
node->getOp() == glslang::EOpRayQueryGetWorldRayDirection ||
node->getOp() == glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque ||
node->getOp() == glslang::EOpRayQueryTerminate ||
node->getOp() == glslang::EOpRayQueryConfirmIntersection) {
operand = builder.accessChainGetLValue(); // Special case l-value operands
lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType());
......@@ -2296,7 +2304,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
case glslang::EOpRayQueryConfirmIntersection:
builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operand);
return false;
#endif
default:
......
rayQuery-initialize.rgen
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 105
// Id's are bound by 103
Capability RayQueryProvisionalKHR
Capability RayTracingNV
......@@ -38,7 +38,6 @@ rayQuery-initialize.rgen
Name 76 ""
Name 89 "rayQuery"
Name 90 "param"
Name 92 "param"
Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
Decorate 50(rtas) DescriptorSet 0
......@@ -89,14 +88,13 @@ rayQuery-initialize.rgen
75: TypePointer Uniform 74(Rays)
76: 75(ptr) Variable Uniform
78: TypePointer Uniform 72(Ray)
96: 6(int) Constant 32
94: 6(int) Constant 32
4(main): 2 Function None 3
5: Label
69(index): 68(ptr) Variable Function
71(ray): 15(ptr) Variable Function
89(rayQuery): 11(ptr) Variable Function
90(param): 11(ptr) Variable Function
92(param): 15(ptr) Variable Function
90(param): 15(ptr) Variable Function
70: 6(int) FunctionCall 8(launchIndex()
Store 69(index) 70
77: 6(int) Load 69(index)
......@@ -114,21 +112,19 @@ rayQuery-initialize.rgen
87: 12(float) CompositeExtract 80 3
88: 59(ptr) AccessChain 71(ray) 65
Store 88 87
91: 10 Load 89(rayQuery)
91: 14(Ray) Load 71(ray)
Store 90(param) 91
93: 14(Ray) Load 71(ray)
Store 92(param) 93
94: 2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 90(param) 92(param)
95: 48 Load 50(rtas)
97: 55(ptr) AccessChain 71(ray) 54
98: 13(fvec3) Load 97
99: 59(ptr) AccessChain 71(ray) 58
100: 12(float) Load 99
101: 55(ptr) AccessChain 71(ray) 62
102: 13(fvec3) Load 101
103: 59(ptr) AccessChain 71(ray) 65
104: 12(float) Load 103
RayQueryInitializeKHR 89(rayQuery) 95 33 96 98 100 102 104
92: 2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 89(rayQuery) 90(param)
93: 48 Load 50(rtas)
95: 55(ptr) AccessChain 71(ray) 54
96: 13(fvec3) Load 95
97: 59(ptr) AccessChain 71(ray) 58
98: 12(float) Load 97
99: 55(ptr) AccessChain 71(ray) 62
100: 13(fvec3) Load 99
101: 59(ptr) AccessChain 71(ray) 65
102: 12(float) Load 101
RayQueryInitializeKHR 89(rayQuery) 93 33 94 96 98 100 102
Return
FunctionEnd
8(launchIndex(): 6(int) Function None 7
......
rayQuery-no-cse.rgen
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 111
// Id's are bound by 107
Capability RayQueryProvisionalKHR
Capability RayTracingNV
......@@ -38,10 +38,8 @@ rayQuery-no-cse.rgen
Name 76 ""
Name 89 "rayQuery1"
Name 90 "param"
Name 92 "param"
Name 105 "rayQuery2"
Name 106 "param"
Name 108 "param"
Name 103 "rayQuery2"
Name 104 "param"
Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
Decorate 50(rtas) DescriptorSet 0
......@@ -92,17 +90,15 @@ rayQuery-no-cse.rgen
75: TypePointer Uniform 74(Rays)
76: 75(ptr) Variable Uniform
78: TypePointer Uniform 72(Ray)
96: 6(int) Constant 32
94: 6(int) Constant 32
4(main): 2 Function None 3
5: Label
69(index): 68(ptr) Variable Function
71(ray): 15(ptr) Variable Function
89(rayQuery1): 11(ptr) Variable Function
90(param): 11(ptr) Variable Function
92(param): 15(ptr) Variable Function
105(rayQuery2): 11(ptr) Variable Function
106(param): 11(ptr) Variable Function
108(param): 15(ptr) Variable Function
90(param): 15(ptr) Variable Function
103(rayQuery2): 11(ptr) Variable Function
104(param): 15(ptr) Variable Function
70: 6(int) FunctionCall 8(launchIndex()
Store 69(index) 70
77: 6(int) Load 69(index)
......@@ -120,26 +116,22 @@ rayQuery-no-cse.rgen
87: 12(float) CompositeExtract 80 3
88: 59(ptr) AccessChain 71(ray) 65
Store 88 87
91: 10 Load 89(rayQuery1)
91: 14(Ray) Load 71(ray)
Store 90(param) 91
93: 14(Ray) Load 71(ray)
Store 92(param) 93
94: 2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 90(param) 92(param)
95: 48 Load 50(rtas)
97: 55(ptr) AccessChain 71(ray) 54
98: 13(fvec3) Load 97
99: 59(ptr) AccessChain 71(ray) 58
100: 12(float) Load 99
101: 55(ptr) AccessChain 71(ray) 62
102: 13(fvec3) Load 101
103: 59(ptr) AccessChain 71(ray) 65
104: 12(float) Load 103
RayQueryInitializeKHR 89(rayQuery1) 95 33 96 98 100 102 104
107: 10 Load 105(rayQuery2)
Store 106(param) 107
109: 14(Ray) Load 71(ray)
Store 108(param) 109
110: 2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 106(param) 108(param)
92: 2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 89(rayQuery1) 90(param)
93: 48 Load 50(rtas)
95: 55(ptr) AccessChain 71(ray) 54
96: 13(fvec3) Load 95
97: 59(ptr) AccessChain 71(ray) 58
98: 12(float) Load 97
99: 55(ptr) AccessChain 71(ray) 62
100: 13(fvec3) Load 99
101: 59(ptr) AccessChain 71(ray) 65
102: 12(float) Load 101
RayQueryInitializeKHR 89(rayQuery1) 93 33 94 96 98 100 102
105: 14(Ray) Load 71(ray)
Store 104(param) 105
106: 2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 103(rayQuery2) 104(param)
Return
FunctionEnd
8(launchIndex(): 6(int) Function None 7
......
rayQuery.rgen
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 46
// Id's are bound by 44
Capability RayQueryProvisionalKHR
Capability RayTracingNV
......@@ -51,7 +51,7 @@ rayQuery.rgen
30: 29(int) Constant 1
31: TypePointer ShaderRecordBufferKHR 25(fvec3)
35: 29(int) Constant 0
40: TypeBool
39: TypeBool
4(main): 2 Function None 3
5: Label
8(rayFlags): 7(ptr) Variable Function
......@@ -70,15 +70,13 @@ rayQuery.rgen
37: 25(fvec3) Load 36
38: 10(float) Load 14(tMax)
RayQueryInitializeKHR 18(localRayQuery) 22 23 24 33 34 37 38
39: 16 Load 18(localRayQuery)
41: 40(bool) RayQueryProceedKHR 39
42: 40(bool) LogicalNot 41
SelectionMerge 44 None
BranchConditional 42 43 44
43: Label
45: 16 Load 18(localRayQuery)
RayQueryTerminateKHR 45
Branch 44
44: Label
40: 39(bool) RayQueryProceedKHR 18(localRayQuery)
41: 39(bool) LogicalNot 40
SelectionMerge 43 None
BranchConditional 41 42 43
42: Label
RayQueryTerminateKHR 18(localRayQuery)
Branch 43
43: Label
Return
FunctionEnd
#version 460
#extension GL_NV_ray_tracing : enable
#extension GL_EXT_ray_query : enable
struct Ray
{
vec3 pos;
float tmin;
vec3 dir;
float tmax;
};
layout(binding = 0, set = 0) uniform accelerationStructureNV rtas;
layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
uint launchIndex()
{
return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
}
void doInitialize(rayQueryEXT rayQuery, Ray ray)
{
rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
}
int C;
void main()
{
uint index = launchIndex();
Ray ray = rays[index];
rayQueryEXT rayQuery[2];
doInitialize(rayQuery[0], rays[index]);
rayQueryInitializeEXT(rayQuery[1], rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullFrontFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
doInitialize(rayQuery[C], ray);
}
......@@ -1674,7 +1674,7 @@ public:
}
virtual bool isOpaque() const { return basicType == EbtSampler
#ifndef GLSLANG_WEB
|| basicType == EbtAtomicUint || basicType == EbtAccStruct
|| basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery
#endif
; }
virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
......
......@@ -231,7 +231,6 @@ INSTANTIATE_TEST_CASE_P(
"spv.while-simple.vert",
// vulkan-specific tests
"rayQuery.rgen",
"rayQuery-array-2d-dynamic.rgen",
"rayQuery-decls.rgen",
"rayQuery-no-cse.rgen",
"rayQuery-initialize.rgen",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment