From bd285a6ad539e366cbbccff29d5a8e8667d6fb61 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 29 Mar 2023 09:47:20 -0500 Subject: [PATCH] anv: Add helpers for getting the surface state from an image view Gets rid of some duplicated logic. Reviewed-by: Ivan Briano Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/vulkan/anv_descriptor_set.c | 7 +++---- src/intel/vulkan/anv_private.h | 16 ++++++++++++++++ src/intel/vulkan/genX_cmd_buffer.c | 8 ++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 33388cd6c19..372e88e601d 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -2030,9 +2030,8 @@ anv_descriptor_set_write_image_view(struct anv_device *device, if (image_view) { for (unsigned p = 0; p < image_view->n_planes; p++) { const struct anv_surface_state *sstate = - (desc->layout == VK_IMAGE_LAYOUT_GENERAL) ? - &image_view->planes[p].general_sampler : - &image_view->planes[p].optimal_sampler; + anv_image_view_texture_surface_state(image_view, p, + desc->layout); desc_data[p].image = anv_surface_state_to_handle(device->physical, sstate->state); } @@ -2057,7 +2056,7 @@ anv_descriptor_set_write_image_view(struct anv_device *device, struct anv_storage_image_descriptor desc_data = { .vanilla = anv_surface_state_to_handle( device->physical, - image_view->planes[0].storage.state), + anv_image_view_storage_surface_state(image_view)->state), .image_depth = image_view->vk.storage.z_slice_count, }; memcpy(desc_surface_map, &desc_data, sizeof(desc_data)); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index cdab06c7c88..15fe1e852c8 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -5329,6 +5329,22 @@ void anv_image_fill_surface_state(struct anv_device *device, enum anv_image_view_state_flags flags, struct anv_surface_state *state_inout); + +static inline const struct anv_surface_state * +anv_image_view_texture_surface_state(const struct anv_image_view *iview, + uint32_t plane, VkImageLayout layout) +{ + return layout == VK_IMAGE_LAYOUT_GENERAL ? + &iview->planes[plane].general_sampler : + &iview->planes[plane].optimal_sampler; +} + +static inline const struct anv_surface_state * +anv_image_view_storage_surface_state(const struct anv_image_view *iview) +{ + return &iview->planes[0].storage; +} + static inline bool anv_cmd_graphics_state_has_image_as_attachment(const struct anv_cmd_graphics_state *state, const struct anv_image *image) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 52970d78bc5..a88df52c31a 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -1879,9 +1879,9 @@ emit_indirect_descriptor_binding_table_entry(struct anv_cmd_buffer *cmd_buffer, case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: { if (desc->image_view) { const struct anv_surface_state *sstate = - (desc->layout == VK_IMAGE_LAYOUT_GENERAL) ? - &desc->image_view->planes[binding->plane].general_sampler : - &desc->image_view->planes[binding->plane].optimal_sampler; + anv_image_view_texture_surface_state(desc->image_view, + binding->plane, + desc->layout); surface_state = desc->image_view->use_surface_state_stream ? sstate->state : anv_bindless_state_for_binding_table(device, sstate->state); @@ -1895,7 +1895,7 @@ emit_indirect_descriptor_binding_table_entry(struct anv_cmd_buffer *cmd_buffer, case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: { if (desc->image_view) { const struct anv_surface_state *sstate = - &desc->image_view->planes[binding->plane].storage; + anv_image_view_storage_surface_state(desc->image_view); surface_state = desc->image_view->use_surface_state_stream ? sstate->state : anv_bindless_state_for_binding_table(device, sstate->state);