intel/rt: Implement support for shader call payloads
Both traceRay() and executeCallable() take a payload parameter which gets passed from the caller to the callee and which the callee can write to pass data back to the caller. We implement these by passing a pointer to the data structure in the callee to the caller as the second QWord on its stack. Coming out of spirv_to_nir, the incoming call payloads get the nir_var_shader_call_data variable mode allowing us to easily identify them. Outgoing call payloads get assigned the nir_var_shader_temp mode and will have been turned into function_temp by nir_lower_global_vars_to_local. All we have to do is crawl the shader looking for references to the nir_var_shader_call_data variable and rewrite those to use the passed in pointer. nir_lower_explicit_io will do the rest for us. Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7356>
This commit is contained in:

committed by
Marge Bot

parent
72354b0e9d
commit
1f6ae809ef
@@ -41,9 +41,10 @@ void brw_nir_lower_combined_intersection_any_hit(nir_shader *intersection,
|
||||
const nir_shader *any_hit,
|
||||
const struct gen_device_info *devinfo);
|
||||
|
||||
/* We reserve the first 8B of the stack for callee data pointers */
|
||||
/* We reserve the first 16B of the stack for callee data pointers */
|
||||
#define BRW_BTD_STACK_RESUME_BSR_ADDR_OFFSET 0
|
||||
#define BRW_BTD_STACK_CALLEE_DATA_SIZE 8
|
||||
#define BRW_BTD_STACK_CALL_DATA_PTR_OFFSET 8
|
||||
#define BRW_BTD_STACK_CALLEE_DATA_SIZE 16
|
||||
|
||||
/* We require the stack to be 8B aligned at the start of a shader */
|
||||
#define BRW_BTD_STACK_ALIGN 8
|
||||
|
Reference in New Issue
Block a user