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:
dTry 2024-08-08 07:21:00 -07:00 committed by GitHub
parent 5398d55e33
commit 7c4d91e781
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 48 additions and 0 deletions

View 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

View 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
}