spirv: Implement the new ray-tracing storage classes
The SPV_KHR_ray_tracing extension adds 6 new storage classes which is a bit on the ridiculous side. In order to avoid adding that many variable modes to NIR, we make a few simplifying assumptions: 1. CallableData and RayPayload data actually lives on the stack somewhere, presumably in the caller's stack. We assume that these are no different from global variables and use nir_var_shader_temp for them. We still need a separate storage class for the incoming variants but only so we can figure out which one the incoming one is and lower it to something useful. 2. There's no difference between incoming CallableData and RayPaolad data. We can use a single storage class for both. 3. ShaderRecordBuffer data is just a global memory access. This lets us avoid NIR variables entirely and just fetch the pointer via the shader_record_ptr system value and it's accessed using a 64-bit global memory pointer. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6479>
This commit is contained in:

committed by
Marge Bot

parent
84a8ca1db8
commit
6b8fd65e84
@@ -675,6 +675,7 @@ system_value("ray_hit_kind", 1)
|
||||
system_value("ray_flags", 1)
|
||||
system_value("ray_geometry_index", 1)
|
||||
system_value("ray_instance_custom_index", 1)
|
||||
system_value("shader_record_ptr", 1, bit_sizes=[64])
|
||||
|
||||
# Driver-specific viewport scale/offset parameters.
|
||||
#
|
||||
|
Reference in New Issue
Block a user