diff options
author | Alex Smith <[email protected]> | 2018-01-05 11:09:19 +0000 |
---|---|---|
committer | Alex Smith <[email protected]> | 2018-01-08 09:31:17 +0000 |
commit | 0d8b9c529ce34347032912d73c14c245919a3d37 (patch) | |
tree | f017ec64f49aa339de4cdd6da4883e689b9ddc38 /src/intel/vulkan | |
parent | 7e025def6d7d3d6bf94facd6ec6d956f40cbb31e (diff) |
anv: Allow PMA optimization to be enabled in secondary command buffers
This was never enabled in secondary buffers because hiz_enabled was
never set to true for those.
If the app provides a framebuffer in the inheritance info when beginning
a secondary buffer, we can determine if HiZ is enabled and therefore
allow the PMA optimization to be enabled within the command buffer.
This improves performance by ~13% on an internal benchmark on Skylake.
v2: Use anv_cmd_buffer_get_depth_stencil_view().
Signed-off-by: Alex Smith <[email protected]>
Reviewed-by: Lionel Landwerlin <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel/vulkan')
-rw-r--r-- | src/intel/vulkan/genX_cmd_buffer.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 0bd3874db73..b7253d52513 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -977,11 +977,31 @@ genX(BeginCommandBuffer)( anv_render_pass_from_handle(pBeginInfo->pInheritanceInfo->renderPass); cmd_buffer->state.subpass = &cmd_buffer->state.pass->subpasses[pBeginInfo->pInheritanceInfo->subpass]; - cmd_buffer->state.framebuffer = NULL; + + /* This is optional in the inheritance info. */ + cmd_buffer->state.framebuffer = + anv_framebuffer_from_handle(pBeginInfo->pInheritanceInfo->framebuffer); result = genX(cmd_buffer_setup_attachments)(cmd_buffer, cmd_buffer->state.pass, NULL); + /* Record that HiZ is enabled if we can. */ + if (cmd_buffer->state.framebuffer) { + const struct anv_image_view * const iview = + anv_cmd_buffer_get_depth_stencil_view(cmd_buffer); + + if (iview) { + VkImageLayout layout = + cmd_buffer->state.subpass->depth_stencil_attachment.layout; + + enum isl_aux_usage aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, iview->image, + VK_IMAGE_ASPECT_DEPTH_BIT, layout); + + cmd_buffer->state.hiz_enabled = aux_usage == ISL_AUX_USAGE_HIZ; + } + } + cmd_buffer->state.dirty |= ANV_CMD_DIRTY_RENDER_TARGETS; } |