From 4e190bc2ae5d4f98e3903e66d6e5b1758a636c91 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Sat, 23 Jan 2021 21:09:18 -0600 Subject: [PATCH] anv: Add a single anv_genX switch macro This should make future platform enabling a good bit easier and more reliable than having 3 of them. Reviewed-by: Lionel Landwerlin Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/intel/vulkan/anv_cmd_buffer.c | 48 ++++++++------------------------------- src/intel/vulkan/anv_device.c | 28 +---------------------- src/intel/vulkan/anv_private.h | 32 ++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 66 deletions(-) diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index 5a757b0..0c2a9d0 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -384,41 +384,11 @@ VkResult anv_ResetCommandBuffer( return anv_cmd_buffer_reset(cmd_buffer); } -#define anv_genX_call(devinfo, func, ...) \ - switch ((devinfo)->gen) { \ - case 7: \ - if ((devinfo)->is_haswell) { \ - gen75_##func(__VA_ARGS__); \ - } else { \ - gen7_##func(__VA_ARGS__); \ - } \ - break; \ - case 8: \ - gen8_##func(__VA_ARGS__); \ - break; \ - case 9: \ - gen9_##func(__VA_ARGS__); \ - break; \ - case 11: \ - gen11_##func(__VA_ARGS__); \ - break; \ - case 12: \ - if (gen_device_info_is_12hp(devinfo)) { \ - gen125_##func(__VA_ARGS__); \ - } else { \ - gen12_##func(__VA_ARGS__); \ - } \ - break; \ - default: \ - assert(!"Unknown hardware generation"); \ - } - void anv_cmd_buffer_emit_state_base_address(struct anv_cmd_buffer *cmd_buffer) { - anv_genX_call(&cmd_buffer->device->info, - cmd_buffer_emit_state_base_address, - cmd_buffer); + const struct gen_device_info *devinfo = &cmd_buffer->device->info; + anv_genX(devinfo, cmd_buffer_emit_state_base_address)(cmd_buffer); } void @@ -430,18 +400,18 @@ anv_cmd_buffer_mark_image_written(struct anv_cmd_buffer *cmd_buffer, uint32_t base_layer, uint32_t layer_count) { - anv_genX_call(&cmd_buffer->device->info, - cmd_buffer_mark_image_written, - cmd_buffer, image, aspect, aux_usage, - level, base_layer, layer_count); + const struct gen_device_info *devinfo = &cmd_buffer->device->info; + anv_genX(devinfo, cmd_buffer_mark_image_written)(cmd_buffer, image, + aspect, aux_usage, + level, base_layer, + layer_count); } void anv_cmd_emit_conditional_render_predicate(struct anv_cmd_buffer *cmd_buffer) { - anv_genX_call(&cmd_buffer->device->info, - cmd_emit_conditional_render_predicate, - cmd_buffer); + const struct gen_device_info *devinfo = &cmd_buffer->device->info; + anv_genX(devinfo, cmd_emit_conditional_render_predicate)(cmd_buffer); } static bool diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 37e5597..c218cfd 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -3151,33 +3151,7 @@ VkResult anv_CreateDevice( anv_scratch_pool_init(device, &device->scratch_pool); - switch (device->info.gen) { - case 7: - if (!device->info.is_haswell) - result = gen7_init_device_state(device); - else - result = gen75_init_device_state(device); - break; - case 8: - result = gen8_init_device_state(device); - break; - case 9: - result = gen9_init_device_state(device); - break; - case 11: - result = gen11_init_device_state(device); - break; - case 12: - if (gen_device_info_is_12hp(&device->info)) - result = gen125_init_device_state(device); - else - result = gen12_init_device_state(device); - break; - default: - /* Shouldn't get here as we don't create physical devices for any other - * gens. */ - unreachable("unhandled gen"); - } + result = anv_genX(&device->info, init_device_state)(device); if (result != VK_SUCCESS) goto fail_clear_value_bo; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index a75ebf4..2b72c96 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -4609,6 +4609,38 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(anv_performance_configuration_intel, base, VkPerformanceConfigurationINTEL, VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL) +#define anv_genX(devinfo, thing) ({ \ + __typeof(&gen9_##thing) genX_thing; \ + switch ((devinfo)->gen) { \ + case 7: \ + if ((devinfo)->is_haswell) { \ + genX_thing = &gen75_##thing; \ + } else { \ + genX_thing = &gen7_##thing; \ + } \ + break; \ + case 8: \ + genX_thing = &gen8_##thing; \ + break; \ + case 9: \ + genX_thing = &gen9_##thing; \ + break; \ + case 11: \ + genX_thing = &gen11_##thing; \ + break; \ + case 12: \ + if (gen_device_info_is_12hp(devinfo)) { \ + genX_thing = &gen125_##thing; \ + } else { \ + genX_thing = &gen12_##thing; \ + } \ + break; \ + default: \ + assert(!"Unknown hardware generation"); \ + } \ + genX_thing; \ +}) + /* Gen-specific function declarations */ #ifdef genX # include "anv_genX.h" -- 2.7.4