This additional buffer stores workaround border colors & mask based of the format's number of channels for integer formats on Gen7.5.
Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> --- src/intel/vulkan/anv_descriptor_set.c | 16 ++++++++++++++++ src/intel/vulkan/anv_private.h | 13 +++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 30aa50e..7b5efc2 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -500,6 +500,7 @@ anv_descriptor_set_create(struct anv_device *device, set->buffer_views = (struct anv_buffer_view *) &set->descriptors[layout->size]; set->buffer_count = layout->buffer_count; + memset(&set->gen7, 0, sizeof(set->gen7)); /* By defining the descriptors to be zero now, we can later verify that * a descriptor has not been populated with user data. @@ -542,6 +543,15 @@ anv_descriptor_set_create(struct anv_device *device, set->buffer_views[b].surface_state = state; } + /* Allocate border color workaround buffer if needed. */ + if (layout->border_color_index > 0) { + set->gen7.border_colors_state = + anv_state_pool_alloc(&device->dynamic_state_pool, + sizeof(*set->gen7.border_colors) * + layout->border_color_count, 64); + set->gen7.border_colors = set->gen7.border_colors_state.map; + } + *out_set = set; return VK_SUCCESS; @@ -552,6 +562,12 @@ anv_descriptor_set_destroy(struct anv_device *device, struct anv_descriptor_pool *pool, struct anv_descriptor_set *set) { + /* Free border color workaround buffer if it was allocated. */ + if (set->gen7.border_colors_state.alloc_size > 0) { + anv_state_pool_free(&device->dynamic_state_pool, + set->gen7.border_colors_state); + } + /* Put the buffer view surface state back on the free list. */ for (uint32_t b = 0; b < set->buffer_count; b++) { struct surface_state_free_list_entry *entry = diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 19b08b3..d3bbd97 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -878,8 +878,21 @@ struct anv_descriptor { }; }; +struct gen7_border_color { + uint32_t color[4]; + uint32_t color_mask[4]; + uint32_t alpha_overwrite; + uint32_t wrapping; +}; + struct anv_descriptor_set { const struct anv_descriptor_set_layout *layout; + + struct { + struct anv_state border_colors_state; + struct gen7_border_color *border_colors; + } gen7; + uint32_t size; uint32_t buffer_count; struct anv_buffer_view *buffer_views; -- 2.10.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev