On Thu, Apr 27, 2017 at 11:32 AM, Nanley Chery <nanleych...@gmail.com>
wrote:

> Signed-off-by: Nanley Chery <nanley.g.ch...@intel.com>
> ---
>  src/intel/vulkan/genX_cmd_buffer.c | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> index 0ea378fde2..a981b00f67 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -216,7 +216,7 @@ color_is_zero_one(VkClearColorValue value, enum
> isl_format format)
>  }
>
>  static void
> -color_attachment_compute_aux_usage(struct anv_device *device,
> +color_attachment_compute_aux_usage(struct anv_cmd_buffer * const
> cmd_buffer,
>

I t may be better to just pass in the framebuffer and attachment index
rather than the whole command buffer.  Slso, I think you're getting a bit
over-excited with the constness. :-)


>                                     struct anv_attachment_state *att_state,
>                                     struct anv_image_view *iview,
>                                     VkRect2D render_area,
> @@ -249,7 +249,8 @@ color_attachment_compute_aux_usage(struct anv_device
> *device,
>        att_state->input_aux_usage = ISL_AUX_USAGE_CCS_E;
>     } else {
>        att_state->aux_usage = ISL_AUX_USAGE_CCS_D;
> -      if (isl_format_supports_ccs_e(&device->info, iview->isl.format)) {
> +      if (isl_format_supports_ccs_e(&cmd_buffer->device->info,
> +                                    iview->isl.format)) {
>           /* SKL can sample from CCS with one restriction.
>            *
>            * From the Sky Lake PRM, RENDER_SURFACE_STATE::
> AuxiliarySurfaceMode:
> @@ -305,6 +306,17 @@ color_attachment_compute_aux_usage(struct anv_device
> *device,
>        if (GEN_GEN <= 8 && !att_state->clear_color_is_zero_one)
>           att_state->fast_clear = false;
>
> +      /* We can't fast clear a proper subset of a layered image. See
> +       * add_clear_values() for more information.
> +       */
> +      const uint32_t fb_layers = cmd_buffer->state.framebuffer->layers;
> +      const uint32_t aux_layers = anv_color_aux_layers(iview->image,
> +
>  iview->isl.base_level);
> +      if (fb_layers != aux_layers) {
> +         assert(fb_layers < aux_layers);
> +         att_state->fast_clear = false;
> +      }
> +
>        if (att_state->fast_clear) {
>           memcpy(fast_clear_color->u32, att_state->clear_value.color.
> uint32,
>                  sizeof(fast_clear_color->u32));
> @@ -498,7 +510,7 @@ genX(cmd_buffer_setup_attachments)(struct
> anv_cmd_buffer *cmd_buffer,
>
>           union isl_color_value clear_color = { .u32 = { 0, } };
>           if (att_aspects == VK_IMAGE_ASPECT_COLOR_BIT) {
> -            color_attachment_compute_aux_usage(cmd_buffer->device,
> +            color_attachment_compute_aux_usage(cmd_buffer,
>                                                 &state->attachments[i],
>                                                 iview, begin->renderArea,
>                                                 &clear_color);
> --
> 2.12.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to