diff options
author | Samuel Pitoiset <[email protected]> | 2019-10-17 15:05:59 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2019-11-25 16:29:23 +0100 |
commit | 2af39c719eecf6ffde29ead442c530b6fa6750d5 (patch) | |
tree | 22fa79db2005e38d700de51cb784c7626e79523e /src/amd | |
parent | 905c005561015957da8faf1613034521f8ac42ca (diff) |
radv: select the depth decompress path based on the aspect mask
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Diffstat (limited to 'src/amd')
-rw-r--r-- | src/amd/vulkan/radv_meta_decompress.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/amd/vulkan/radv_meta_decompress.c b/src/amd/vulkan/radv_meta_decompress.c index 39340c7a778..3e6c6472018 100644 --- a/src/amd/vulkan/radv_meta_decompress.c +++ b/src/amd/vulkan/radv_meta_decompress.c @@ -330,14 +330,25 @@ cleanup: static VkPipeline * radv_get_depth_pipeline(struct radv_cmd_buffer *cmd_buffer, - struct radv_image *image, enum radv_depth_op op) + struct radv_image *image, + const VkImageSubresourceRange *subresourceRange, + enum radv_depth_op op) { struct radv_meta_state *state = &cmd_buffer->device->meta_state; uint32_t samples = image->info.samples; uint32_t samples_log2 = ffs(samples) - 1; + enum radv_depth_decompress decompress; VkPipeline *pipeline; - if (!state->depth_decomp[samples_log2].decompress_pipeline[DECOMPRESS_DEPTH_STENCIL]) { + if (subresourceRange->aspectMask == VK_IMAGE_ASPECT_DEPTH_BIT) { + decompress = DECOMPRESS_DEPTH; + } else if (subresourceRange->aspectMask == VK_IMAGE_ASPECT_STENCIL_BIT) { + decompress = DECOMPRESS_STENCIL; + } else { + decompress = DECOMPRESS_DEPTH_STENCIL; + } + + if (!state->depth_decomp[samples_log2].decompress_pipeline[decompress]) { VkResult ret; for (uint32_t i = 0; i < NUM_DEPTH_DECOMPRESS_PIPELINES; i++) { @@ -367,7 +378,7 @@ radv_get_depth_pipeline(struct radv_cmd_buffer *cmd_buffer, switch (op) { case DEPTH_DECOMPRESS: - pipeline = &state->depth_decomp[samples_log2].decompress_pipeline[DECOMPRESS_DEPTH_STENCIL]; + pipeline = &state->depth_decomp[samples_log2].decompress_pipeline[decompress]; break; case DEPTH_RESUMMARIZE: pipeline = &state->depth_decomp[samples_log2].resummarize_pipeline; @@ -468,7 +479,8 @@ static void radv_process_depth_image_inplace(struct radv_cmd_buffer *cmd_buffer, RADV_META_SAVE_SAMPLE_LOCATIONS | RADV_META_SAVE_PASS); - pipeline = radv_get_depth_pipeline(cmd_buffer, image, op); + pipeline = radv_get_depth_pipeline(cmd_buffer, image, + subresourceRange, op); radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer), VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); |