Fix missing check for purity on ray tracing builtins
This commit is contained in:
parent
c96bab0659
commit
90c91e4f23
18
shaders/vulkan/rgen/pure_call.vk.rgen
Normal file
18
shaders/vulkan/rgen/pure_call.vk.rgen
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#version 460
|
||||||
|
#extension GL_NV_ray_tracing : require
|
||||||
|
|
||||||
|
layout(set = 0, binding = 1) uniform accelerationStructureNV as;
|
||||||
|
layout(location = 0) rayPayloadNV float payload;
|
||||||
|
|
||||||
|
float pure_call(vec2 launchID, vec2 launchSize)
|
||||||
|
{
|
||||||
|
vec3 origin = vec3(launchID.x / launchSize.x, launchID.y / launchSize.y, 1.0);
|
||||||
|
vec3 direction = vec3(0.0, 0.0, -1.0);
|
||||||
|
traceNV(as, 0u, 255u, 0u, 1u, 0u, origin, 0.0, direction, 1000.0, 0);
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
pure_call(vec2(gl_LaunchIDNV.xy), vec2(gl_LaunchSizeNV.xy));
|
||||||
|
}
|
@ -144,6 +144,14 @@ bool Compiler::block_is_pure(const SPIRBlock &block)
|
|||||||
case OpMemoryBarrier:
|
case OpMemoryBarrier:
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Ray tracing builtins are impure.
|
||||||
|
case OpReportIntersectionNV:
|
||||||
|
case OpIgnoreIntersectionNV:
|
||||||
|
case OpTerminateRayNV:
|
||||||
|
case OpTraceNV:
|
||||||
|
case OpExecuteCallableNV:
|
||||||
|
return false;
|
||||||
|
|
||||||
// OpExtInst is potentially impure depending on extension, but GLSL builtins are at least pure.
|
// OpExtInst is potentially impure depending on extension, but GLSL builtins are at least pure.
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user