Re: [Mesa-dev] [PATCH 09/14] anv: Let blorp handle indirect clear colors for CCS resolves
On Mon, Nov 13, 2017 at 08:12:49AM -0800, Jason Ekstrand wrote: > --- > src/intel/vulkan/anv_blorp.c | 32 +--- > src/intel/vulkan/anv_private.h | 4 +-- > src/intel/vulkan/genX_cmd_buffer.c | 51 > +- > 3 files changed, 20 insertions(+), 67 deletions(-) > This patch is Reviewed-by: Nanley Chery> diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c > index 6deb350..27320c2 100644 > --- a/src/intel/vulkan/anv_blorp.c > +++ b/src/intel/vulkan/anv_blorp.c > @@ -177,6 +177,15 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device, > > #define ANV_AUX_USAGE_DEFAULT ((enum isl_aux_usage)0xff) > > +static struct blorp_address > +anv_to_blorp_address(struct anv_address addr) > +{ > + return (struct blorp_address) { > + .buffer = addr.bo, > + .offset = addr.offset, > + }; > +} > + > static void > get_blorp_surf_for_anv_image(const struct anv_image *image, > VkImageAspectFlags aspect, > @@ -1655,10 +1664,10 @@ anv_gen8_hiz_op_resolve(struct anv_cmd_buffer > *cmd_buffer, > > void > anv_ccs_resolve(struct anv_cmd_buffer * const cmd_buffer, > -const struct anv_state surface_state, > const struct anv_image * const image, > VkImageAspectFlagBits aspect, > -const uint8_t level, const uint32_t layer_count, > +const uint8_t level, > +const uint32_t start_layer, const uint32_t layer_count, > const enum blorp_fast_clear_op op) > { > assert(cmd_buffer && image); > @@ -1667,17 +1676,10 @@ anv_ccs_resolve(struct anv_cmd_buffer * const > cmd_buffer, > > /* The resolved subresource range must have a CCS buffer. */ > assert(level < anv_image_aux_levels(image, aspect)); > - assert(layer_count <= anv_image_aux_layers(image, aspect, level)); > + assert(start_layer + layer_count <= > + anv_image_aux_layers(image, aspect, level)); > assert(image->aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV && > image->samples == 1); > > - /* Create a binding table for this surface state. */ > - uint32_t binding_table; > - VkResult result = > - binding_table_for_surface_state(cmd_buffer, surface_state, > - _table); > - if (result != VK_SUCCESS) > - return; > - > struct blorp_batch batch; > blorp_batch_init(_buffer->device->blorp, , cmd_buffer, > BLORP_BATCH_PREDICATE_ENABLE); > @@ -1686,11 +1688,11 @@ anv_ccs_resolve(struct anv_cmd_buffer * const > cmd_buffer, > get_blorp_surf_for_anv_image(image, aspect, > fast_clear_aux_usage(image, aspect), > ); > + surf.clear_color_addr = anv_to_blorp_address( > + anv_image_get_clear_color_addr(cmd_buffer->device, image, aspect, > level)); > > - blorp_ccs_resolve_attachment(, binding_table, , level, > -layer_count, > -image->planes[plane].surface.isl.format, > -op); > + blorp_ccs_resolve(, , level, start_layer, layer_count, > + image->planes[plane].surface.isl.format, op); > > blorp_batch_finish(); > } > diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h > index 6eed057..a1b1d48 100644 > --- a/src/intel/vulkan/anv_private.h > +++ b/src/intel/vulkan/anv_private.h > @@ -2527,10 +2527,10 @@ anv_gen8_hiz_op_resolve(struct anv_cmd_buffer > *cmd_buffer, > enum blorp_hiz_op op); > void > anv_ccs_resolve(struct anv_cmd_buffer * const cmd_buffer, > -const struct anv_state surface_state, > const struct anv_image * const image, > VkImageAspectFlagBits aspect, > -const uint8_t level, const uint32_t layer_count, > +const uint8_t level, > +const uint32_t start_layer, const uint32_t layer_count, > const enum blorp_fast_clear_op op); > > void > diff --git a/src/intel/vulkan/genX_cmd_buffer.c > b/src/intel/vulkan/genX_cmd_buffer.c > index d7e4f23..2491b1d 100644 > --- a/src/intel/vulkan/genX_cmd_buffer.c > +++ b/src/intel/vulkan/genX_cmd_buffer.c > @@ -179,29 +179,6 @@ add_surface_state_reloc(struct anv_cmd_buffer > *cmd_buffer, > } > > static void > -add_image_relocs(struct anv_cmd_buffer *cmd_buffer, > - const struct anv_image *image, > - const uint32_t plane, > - struct anv_surface_state state) > -{ > - const struct isl_device *isl_dev = _buffer->device->isl_dev; > - > - add_surface_state_reloc(cmd_buffer, state.state, > - image->planes[plane].bo, state.address); > - > - if (state.aux_address) { > - VkResult result = > -
Re: [Mesa-dev] [PATCH 09/14] anv: Let blorp handle indirect clear colors for CCS resolves
Reviewed-by: Lionel Landwerlin___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 09/14] anv: Let blorp handle indirect clear colors for CCS resolves
--- src/intel/vulkan/anv_blorp.c | 32 +--- src/intel/vulkan/anv_private.h | 4 +-- src/intel/vulkan/genX_cmd_buffer.c | 51 +- 3 files changed, 20 insertions(+), 67 deletions(-) diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c index 6deb350..27320c2 100644 --- a/src/intel/vulkan/anv_blorp.c +++ b/src/intel/vulkan/anv_blorp.c @@ -177,6 +177,15 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device, #define ANV_AUX_USAGE_DEFAULT ((enum isl_aux_usage)0xff) +static struct blorp_address +anv_to_blorp_address(struct anv_address addr) +{ + return (struct blorp_address) { + .buffer = addr.bo, + .offset = addr.offset, + }; +} + static void get_blorp_surf_for_anv_image(const struct anv_image *image, VkImageAspectFlags aspect, @@ -1655,10 +1664,10 @@ anv_gen8_hiz_op_resolve(struct anv_cmd_buffer *cmd_buffer, void anv_ccs_resolve(struct anv_cmd_buffer * const cmd_buffer, -const struct anv_state surface_state, const struct anv_image * const image, VkImageAspectFlagBits aspect, -const uint8_t level, const uint32_t layer_count, +const uint8_t level, +const uint32_t start_layer, const uint32_t layer_count, const enum blorp_fast_clear_op op) { assert(cmd_buffer && image); @@ -1667,17 +1676,10 @@ anv_ccs_resolve(struct anv_cmd_buffer * const cmd_buffer, /* The resolved subresource range must have a CCS buffer. */ assert(level < anv_image_aux_levels(image, aspect)); - assert(layer_count <= anv_image_aux_layers(image, aspect, level)); + assert(start_layer + layer_count <= + anv_image_aux_layers(image, aspect, level)); assert(image->aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV && image->samples == 1); - /* Create a binding table for this surface state. */ - uint32_t binding_table; - VkResult result = - binding_table_for_surface_state(cmd_buffer, surface_state, - _table); - if (result != VK_SUCCESS) - return; - struct blorp_batch batch; blorp_batch_init(_buffer->device->blorp, , cmd_buffer, BLORP_BATCH_PREDICATE_ENABLE); @@ -1686,11 +1688,11 @@ anv_ccs_resolve(struct anv_cmd_buffer * const cmd_buffer, get_blorp_surf_for_anv_image(image, aspect, fast_clear_aux_usage(image, aspect), ); + surf.clear_color_addr = anv_to_blorp_address( + anv_image_get_clear_color_addr(cmd_buffer->device, image, aspect, level)); - blorp_ccs_resolve_attachment(, binding_table, , level, -layer_count, -image->planes[plane].surface.isl.format, -op); + blorp_ccs_resolve(, , level, start_layer, layer_count, + image->planes[plane].surface.isl.format, op); blorp_batch_finish(); } diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 6eed057..a1b1d48 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -2527,10 +2527,10 @@ anv_gen8_hiz_op_resolve(struct anv_cmd_buffer *cmd_buffer, enum blorp_hiz_op op); void anv_ccs_resolve(struct anv_cmd_buffer * const cmd_buffer, -const struct anv_state surface_state, const struct anv_image * const image, VkImageAspectFlagBits aspect, -const uint8_t level, const uint32_t layer_count, +const uint8_t level, +const uint32_t start_layer, const uint32_t layer_count, const enum blorp_fast_clear_op op); void diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index d7e4f23..2491b1d 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -179,29 +179,6 @@ add_surface_state_reloc(struct anv_cmd_buffer *cmd_buffer, } static void -add_image_relocs(struct anv_cmd_buffer *cmd_buffer, - const struct anv_image *image, - const uint32_t plane, - struct anv_surface_state state) -{ - const struct isl_device *isl_dev = _buffer->device->isl_dev; - - add_surface_state_reloc(cmd_buffer, state.state, - image->planes[plane].bo, state.address); - - if (state.aux_address) { - VkResult result = - anv_reloc_list_add(_buffer->surface_relocs, -_buffer->pool->alloc, -state.state.offset + isl_dev->ss.aux_addr_offset, -image->planes[plane].bo, -state.aux_address); - if (result != VK_SUCCESS) - anv_batch_set_error(_buffer->batch, result); - } -} - -static void