diff options
author | Nanley Chery <[email protected]> | 2017-03-31 13:52:53 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-07-22 20:12:09 -0700 |
commit | dcff5ab9f164afbc29c051b18990a377bb46e4bc (patch) | |
tree | a0bacae022c1b28dfb7114a58aefe8f2022a8199 /src/intel/vulkan/genX_cmd_buffer.c | |
parent | 9ffe87122bedefd48d2618e85df44e6507be80af (diff) |
anv/cmd_buffer: Restrict fast clears in the GENERAL layout
v2: Remove ::first_subpass_layout assertion (Jason Ekstrand).
v3: Allow some fast clears in the GENERAL layout.
v4: Remove extra '||' and adjust line break (Jason Ekstrand).
Signed-off-by: Nanley Chery <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel/vulkan/genX_cmd_buffer.c')
-rw-r--r-- | src/intel/vulkan/genX_cmd_buffer.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 9ffe1ee3aa3..f81d58de844 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -255,6 +255,11 @@ color_attachment_compute_aux_usage(struct anv_device * device, att_state->clear_color_is_zero_one = color_is_zero_one(att_state->clear_value.color, iview->isl.format); + att_state->clear_color_is_zero = + att_state->clear_value.color.uint32[0] == 0 && + att_state->clear_value.color.uint32[1] == 0 && + att_state->clear_value.color.uint32[2] == 0 && + att_state->clear_value.color.uint32[3] == 0; if (att_state->pending_clear_aspects == VK_IMAGE_ASPECT_COLOR_BIT) { /* Start off assuming fast clears are possible */ @@ -299,6 +304,17 @@ color_attachment_compute_aux_usage(struct anv_device * device, } } + /* We only allow fast clears in the GENERAL layout if the auxiliary + * buffer is always enabled and the fast-clear value is all 0's. See + * add_fast_clear_state_buffer() for more information. + */ + if (cmd_state->pass->attachments[att].first_subpass_layout == + VK_IMAGE_LAYOUT_GENERAL && + (!att_state->clear_color_is_zero || + iview->image->aux_usage == ISL_AUX_USAGE_NONE)) { + 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)); |