From 546a6752ac2ab8001cb8ca27885d84e204c324a3 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 30 Mar 2023 13:22:53 +0300 Subject: [PATCH] anv: compute the largest GRL kernel scratch size Signed-off-by: Lionel Landwerlin Reviewed-by: Felix DeGrood Part-of: --- src/intel/vulkan/anv_private.h | 3 +++ src/intel/vulkan/genX_state.c | 1 + src/intel/vulkan/grl/genX_grl.h | 3 +++ src/intel/vulkan/grl/genX_grl_dispatch.c | 16 ++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index e9b9a2a7817..cf9d67ea0e4 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1000,6 +1000,9 @@ struct anv_physical_device { uint8_t device_uuid[VK_UUID_SIZE]; uint8_t rt_uuid[VK_UUID_SIZE]; + /* Maximum amount of scratch space used by all the GRL kernels */ + uint32_t max_grl_scratch_size; + struct vk_sync_type sync_syncobj_type; struct vk_sync_timeline_type sync_timeline_type; const struct vk_sync_type * sync_types[4]; diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c index 2639b9d251a..e6498e712e0 100644 --- a/src/intel/vulkan/genX_state.c +++ b/src/intel/vulkan/genX_state.c @@ -527,6 +527,7 @@ genX(init_physical_device_state)(ASSERTED struct anv_physical_device *pdevice) assert(pdevice->info.verx10 == GFX_VERx10); #if GFX_VERx10 >= 125 && ANV_SUPPORT_RT genX(grl_load_rt_uuid)(pdevice->rt_uuid); + pdevice->max_grl_scratch_size = genX(grl_max_scratch_size)(); #endif } diff --git a/src/intel/vulkan/grl/genX_grl.h b/src/intel/vulkan/grl/genX_grl.h index 687edf71173..57aefa72de0 100644 --- a/src/intel/vulkan/grl/genX_grl.h +++ b/src/intel/vulkan/grl/genX_grl.h @@ -44,6 +44,9 @@ genX(grl_dispatch)(struct anv_cmd_buffer *cmd_buffer, void genX(grl_load_rt_uuid)(uint8_t *out_uuid); +uint32_t +genX(grl_max_scratch_size)(void); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/src/intel/vulkan/grl/genX_grl_dispatch.c b/src/intel/vulkan/grl/genX_grl_dispatch.c index 347a4619396..eff7c4074fc 100644 --- a/src/intel/vulkan/grl/genX_grl_dispatch.c +++ b/src/intel/vulkan/grl/genX_grl_dispatch.c @@ -90,3 +90,19 @@ genX(grl_dispatch)(struct anv_cmd_buffer *cmd_buffer, genX(cmd_buffer_dispatch_kernel)(cmd_buffer, &ak, global_size, arg_count, args); } + +uint32_t +genX(grl_max_scratch_size)(void) +{ + uint32_t scratch_size = 0; + + for (uint32_t i = 0; i < GRL_CL_KERNEL_MAX; i++) { + struct brw_kernel kernel_data; + genX(grl_get_cl_kernel)(&kernel_data, i); + + scratch_size = MAX2(kernel_data.prog_data.base.total_scratch, + scratch_size); + } + + return scratch_size; +}