aboutsummaryrefslogtreecommitdiffstats
path: root/src/amd/vulkan
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2019-10-17 15:05:59 +0200
committerSamuel Pitoiset <[email protected]>2019-11-25 16:29:23 +0100
commit2af39c719eecf6ffde29ead442c530b6fa6750d5 (patch)
tree22fa79db2005e38d700de51cb784c7626e79523e /src/amd/vulkan
parent905c005561015957da8faf1613034521f8ac42ca (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/vulkan')
-rw-r--r--src/amd/vulkan/radv_meta_decompress.c20
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);