diff options
author | Bas Nieuwenhuizen <[email protected]> | 2017-12-29 01:25:07 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2017-12-29 12:21:44 +0100 |
commit | 1cfab28e6ee2f53a665f93169aaed9053820cfbb (patch) | |
tree | 26c08143d94bccca80a0478a1af010bdf7acac01 /src/amd/vulkan/radv_private.h | |
parent | 3e2a6191c9e161b687eb8561f3cf8da8208811fb (diff) |
radv: Make color meta operations layout aware.
For fast clear eliminate and decompressions, we always use the most compressed
format.
For clears, the code already creates a renderpass on demand with the exact same
layout as specified.
Otherwise we start distinguishing between GENERAL and TRANSFER_DST_OPTIMAL.
Reviewed-by: Dave Airlie <[email protected]>
Tested-by: Dieter Nützel <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_private.h')
-rw-r--r-- | src/amd/vulkan/radv_private.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index d7e9070fbb8..db8ea895e3a 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -369,6 +369,22 @@ static inline VkImageLayout radv_meta_blit_ds_to_layout(enum radv_blit_ds_layout return ds_layout == RADV_BLIT_DS_LAYOUT_TILE_ENABLE ? VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL : VK_IMAGE_LAYOUT_GENERAL; } +enum radv_meta_dst_layout { + RADV_META_DST_LAYOUT_GENERAL, + RADV_META_DST_LAYOUT_OPTIMAL, + RADV_META_DST_LAYOUT_COUNT, +}; + +static inline enum radv_meta_dst_layout radv_meta_dst_layout_from_layout(VkImageLayout layout) +{ + return (layout == VK_IMAGE_LAYOUT_GENERAL) ? RADV_META_DST_LAYOUT_GENERAL : RADV_META_DST_LAYOUT_OPTIMAL; +} + +static inline VkImageLayout radv_meta_dst_layout_to_layout(enum radv_meta_dst_layout layout) +{ + return layout == RADV_META_DST_LAYOUT_OPTIMAL ? VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL : VK_IMAGE_LAYOUT_GENERAL; +} + struct radv_meta_state { VkAllocationCallbacks alloc; @@ -390,7 +406,7 @@ struct radv_meta_state { VkPipelineLayout clear_color_p_layout; VkPipelineLayout clear_depth_p_layout; struct { - VkRenderPass render_pass[NUM_META_FS_KEYS]; + VkRenderPass render_pass[NUM_META_FS_KEYS][RADV_META_DST_LAYOUT_COUNT]; /** Pipeline that blits from a 1D image. */ VkPipeline pipeline_1d_src[NUM_META_FS_KEYS]; @@ -415,7 +431,7 @@ struct radv_meta_state { } blit; struct { - VkRenderPass render_passes[NUM_META_FS_KEYS]; + VkRenderPass render_passes[NUM_META_FS_KEYS][RADV_META_DST_LAYOUT_COUNT]; VkPipelineLayout p_layouts[3]; VkDescriptorSetLayout ds_layouts[3]; @@ -474,7 +490,7 @@ struct radv_meta_state { VkPipelineLayout p_layout; struct { - VkRenderPass render_pass[NUM_META_FS_KEYS]; + VkRenderPass render_pass[NUM_META_FS_KEYS][RADV_META_DST_LAYOUT_COUNT]; VkPipeline pipeline[NUM_META_FS_KEYS]; } rc[MAX_SAMPLES_LOG2]; } resolve_fragment; |