From 3f96b459f425d05dfb1c809b2b9c2f66f8763743 Mon Sep 17 00:00:00 2001 From: Rafael Antognolli Date: Tue, 27 Feb 2018 17:06:13 -0800 Subject: [PATCH] anv: Add a helper to extract clear color from the attachment. Extract the code from color_attachment_compute_aux_usage, so we can later reuse it to update the clear color state buffer. Signed-off-by: Rafael Antognolli Reviewed-by: Jason Ekstrand Reviewed-by: Jordan Justen --- src/intel/vulkan/anv_private.h | 20 ++++++++++++++++++++ src/intel/vulkan/genX_cmd_buffer.c | 14 +------------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index d7a04438165..b2d8079f3c9 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -2902,6 +2902,26 @@ void anv_fill_buffer_surface_state(struct anv_device *device, uint32_t offset, uint32_t range, uint32_t stride); +static inline void +anv_clear_color_from_att_state(union isl_color_value *clear_color, + const struct anv_attachment_state *att_state, + const struct anv_image_view *iview) +{ + const struct isl_format_layout *view_fmtl = + isl_format_get_layout(iview->planes[0].isl.format); + +#define COPY_CLEAR_COLOR_CHANNEL(c, i) \ + if (view_fmtl->channels.c.bits) \ + clear_color->u32[i] = att_state->clear_value.color.uint32[i] + + COPY_CLEAR_COLOR_CHANNEL(r, 0); + COPY_CLEAR_COLOR_CHANNEL(g, 1); + COPY_CLEAR_COLOR_CHANNEL(b, 2); + COPY_CLEAR_COLOR_CHANNEL(a, 3); + +#undef COPY_CLEAR_COLOR_CHANNEL +} + struct anv_ycbcr_conversion { const struct anv_format * format; diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 8287d67a53d..5e5e2bbd6fe 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -272,20 +272,8 @@ color_attachment_compute_aux_usage(struct anv_device * device, assert(iview->image->planes[0].aux_surface.isl.usage & (ISL_SURF_USAGE_CCS_BIT | ISL_SURF_USAGE_MCS_BIT)); - const struct isl_format_layout *view_fmtl = - isl_format_get_layout(iview->planes[0].isl.format); union isl_color_value clear_color = {}; - -#define COPY_CLEAR_COLOR_CHANNEL(c, i) \ - if (view_fmtl->channels.c.bits) \ - clear_color.u32[i] = att_state->clear_value.color.uint32[i] - - COPY_CLEAR_COLOR_CHANNEL(r, 0); - COPY_CLEAR_COLOR_CHANNEL(g, 1); - COPY_CLEAR_COLOR_CHANNEL(b, 2); - COPY_CLEAR_COLOR_CHANNEL(a, 3); - -#undef COPY_CLEAR_COLOR_CHANNEL + anv_clear_color_from_att_state(&clear_color, att_state, iview); att_state->clear_color_is_zero_one = isl_color_value_is_zero_one(clear_color, iview->planes[0].isl.format); -- 2.30.2