Add type checks for hitObjectNV (#3689)
`VK_NV_ray_tracing_invocation_reorder` extension introduces `hitObjectNV`, a special opaque type
that can only be declared without storage qualifiers in either global or function scope.
Added checks/tests to enforce this constraint.
References:
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_NV_ray_tracing_invocation_reorder.html
3e0d9a3b3f/extensions/nv/GLSL_NV_shader_invocation_reorder.txt (L180)
Co-authored-by: Tianyun <tianyuny@nvidia.com>
This commit is contained in:
parent
5398d55e33
commit
7c4d91e781
5 changed files with 48 additions and 0 deletions
9
Test/baseResults/spv.nv.hitobject-errors.rgen.out
Normal file
9
Test/baseResults/spv.nv.hitobject-errors.rgen.out
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
spv.nv.hitobject-errors.rgen
|
||||
ERROR: 0:7: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: uHitObj
|
||||
ERROR: 0:9: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: hobjIn
|
||||
ERROR: 0:10: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: hobjOut
|
||||
ERROR: 0:21: 'hObjWrapper' : struct is not allowed to contain hitObjectNV: wrapper
|
||||
ERROR: 4 compilation errors. No code generated.
|
||||
|
||||
|
||||
SPIR-V is not generated for failed compile or link
|
||||
24
Test/spv.nv.hitobject-errors.rgen
Normal file
24
Test/spv.nv.hitobject-errors.rgen
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#version 460
|
||||
#extension GL_EXT_ray_tracing : enable
|
||||
#extension GL_NV_shader_invocation_reorder : enable
|
||||
|
||||
|
||||
hitObjectNV hObjGlob; // OK
|
||||
uniform hitObjectNV uHitObj; // ERROR
|
||||
|
||||
layout(location=0) in hitObjectNV hobjIn; // ERROR
|
||||
out hitObjectNV hobjOut; // ERROR
|
||||
|
||||
struct hObjWrapper{
|
||||
hitObjectNV objField;
|
||||
vec3 v;
|
||||
};
|
||||
|
||||
void foo(hitObjectNV hObjArg) {} // OK
|
||||
|
||||
void main()
|
||||
{
|
||||
hObjWrapper wrapper; // ERROR
|
||||
hitObjectNV localHitObj; // OK
|
||||
foo(localHitObj); // OK
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue