diff options
author | Dave Airlie <[email protected]> | 2017-12-21 16:23:30 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2017-12-22 14:10:04 +1000 |
commit | 821b5379f04cc536de714d0898b1cff25c46b5b9 (patch) | |
tree | 84672a044edb11a364d6413ffb9af3d7d7bbe55e /src/amd/vulkan/radv_private.h | |
parent | 286fe1db473f6341623520cdd75d361c38428c55 (diff) |
radv: handle depth/stencil image copy with layouts better. (v3.1)
If we are doing a general->general transfer with HIZ enabled,
we want to hit the tile surface disable bits in radv_emit_fb_ds_state,
however we never get the current layout to know we are in general
and meta hardcoded the transfer layout which is always tile enabled.
This fixes:
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.depth_stencil.d32_sfloat_s8_uint_d32_sfloat_s8_uint.optimal_general
dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.depth_stencil.d32_sfloat_s8_uint_d32_sfloat_s8_uint.general_general
v2: refactor some shared helpers for blit patches
v3: we only need multiple render passes as they should be compatible.
v3.1: use enum (Bas)
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Cc: "17.2 17.3" <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_private.h')
-rw-r--r-- | src/amd/vulkan/radv_private.h | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 47ae0342ce2..27ed61ec485 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -353,6 +353,22 @@ radv_pipeline_cache_insert_shaders(struct radv_device *device, const void *const *codes, const unsigned *code_sizes); +enum radv_blit_ds_layout { + RADV_BLIT_DS_LAYOUT_TILE_ENABLE, + RADV_BLIT_DS_LAYOUT_TILE_DISABLE, + RADV_BLIT_DS_LAYOUT_COUNT, +}; + +static inline enum radv_blit_ds_layout radv_meta_blit_ds_to_type(VkImageLayout layout) +{ + return (layout == VK_IMAGE_LAYOUT_GENERAL) ? RADV_BLIT_DS_LAYOUT_TILE_DISABLE : RADV_BLIT_DS_LAYOUT_TILE_ENABLE; +} + +static inline VkImageLayout radv_meta_blit_ds_to_layout(enum radv_blit_ds_layout ds_layout) +{ + return ds_layout == RADV_BLIT_DS_LAYOUT_TILE_ENABLE ? VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL : VK_IMAGE_LAYOUT_GENERAL; +} + struct radv_meta_state { VkAllocationCallbacks alloc; @@ -405,10 +421,10 @@ struct radv_meta_state { VkDescriptorSetLayout ds_layouts[3]; VkPipeline pipelines[3][NUM_META_FS_KEYS]; - VkRenderPass depth_only_rp; + VkRenderPass depth_only_rp[RADV_BLIT_DS_LAYOUT_COUNT]; VkPipeline depth_only_pipeline[3]; - VkRenderPass stencil_only_rp; + VkRenderPass stencil_only_rp[RADV_BLIT_DS_LAYOUT_COUNT]; VkPipeline stencil_only_pipeline[3]; } blit2d; |