mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 15:40:11 +01:00
anv/cmd_buffer: Don't partially fast clear image layers
v2: Don't pass in the command buffer (Jason Ekstrand). v3: Remove an incorrect assertion and an if condition for gen7. Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
07cc2ec9db
commit
9ffe87122b
1 changed files with 23 additions and 8 deletions
|
|
@ -231,12 +231,14 @@ color_is_zero_one(VkClearColorValue value, enum isl_format format)
|
|||
}
|
||||
|
||||
static void
|
||||
color_attachment_compute_aux_usage(struct anv_device *device,
|
||||
struct anv_attachment_state *att_state,
|
||||
struct anv_image_view *iview,
|
||||
VkRect2D render_area,
|
||||
color_attachment_compute_aux_usage(struct anv_device * device,
|
||||
struct anv_cmd_state * cmd_state,
|
||||
uint32_t att, VkRect2D render_area,
|
||||
union isl_color_value *fast_clear_color)
|
||||
{
|
||||
struct anv_attachment_state *att_state = &cmd_state->attachments[att];
|
||||
struct anv_image_view *iview = cmd_state->framebuffer->attachments[att];
|
||||
|
||||
if (iview->image->aux_surface.isl.size == 0) {
|
||||
att_state->aux_usage = ISL_AUX_USAGE_NONE;
|
||||
att_state->input_aux_usage = ISL_AUX_USAGE_NONE;
|
||||
|
|
@ -274,8 +276,7 @@ color_attachment_compute_aux_usage(struct anv_device *device,
|
|||
* don't want to deal with now.
|
||||
*/
|
||||
if (iview->isl.base_level > 0 ||
|
||||
iview->isl.base_array_layer > 0 ||
|
||||
iview->isl.array_len > 1)
|
||||
iview->isl.base_array_layer > 0)
|
||||
att_state->fast_clear = false;
|
||||
}
|
||||
|
||||
|
|
@ -283,6 +284,21 @@ 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 allow fast clears when all aux layers of the miplevel are targeted.
|
||||
* See add_fast_clear_state_buffer() for more information. Also, because
|
||||
* we only either do a fast clear or a normal clear and not both, this
|
||||
* complies with the gen7 restriction of not fast-clearing multiple
|
||||
* layers.
|
||||
*/
|
||||
if (cmd_state->framebuffer->layers !=
|
||||
anv_image_aux_layers(iview->image, iview->isl.base_level)) {
|
||||
att_state->fast_clear = false;
|
||||
if (GEN_GEN == 7) {
|
||||
anv_perf_warn("Not fast-clearing the first layer in "
|
||||
"a multi-layer fast clear.");
|
||||
}
|
||||
}
|
||||
|
||||
if (att_state->fast_clear) {
|
||||
memcpy(fast_clear_color->u32, att_state->clear_value.color.uint32,
|
||||
sizeof(fast_clear_color->u32));
|
||||
|
|
@ -629,8 +645,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,
|
||||
&state->attachments[i],
|
||||
iview, begin->renderArea,
|
||||
state, i, begin->renderArea,
|
||||
&clear_color);
|
||||
|
||||
struct isl_view view = iview->isl;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue