[Mesa-dev] [PATCH 3/3] radv: do not decompress levels without DCC with the graphics path
Samuel Pitoiset
samuel.pitoiset at gmail.com
Tue Jun 18 08:30:45 UTC 2019
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
src/amd/vulkan/radv_meta_fast_clear.c | 35 +++++++++++++++------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
index cb7b43d546c..12fea8292c0 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -639,9 +639,18 @@ static void
radv_process_color_image(struct radv_cmd_buffer *cmd_buffer,
struct radv_image *image,
const VkImageSubresourceRange *subresourceRange,
- VkPipeline *pipeline)
+ bool decompress_dcc)
{
struct radv_meta_saved_state saved_state;
+ VkPipeline *pipeline;
+
+ if (decompress_dcc && radv_dcc_enabled(image, subresourceRange->baseMipLevel)) {
+ pipeline = &cmd_buffer->device->meta_state.fast_clear_flush.dcc_decompress_pipeline;
+ } else if (radv_image_has_fmask(image)) {
+ pipeline = &cmd_buffer->device->meta_state.fast_clear_flush.fmask_decompress_pipeline;
+ } else {
+ pipeline = &cmd_buffer->device->meta_state.fast_clear_flush.cmask_eliminate_pipeline;
+ }
if (!*pipeline) {
VkResult ret;
@@ -661,11 +670,15 @@ radv_process_color_image(struct radv_cmd_buffer *cmd_buffer,
VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline);
for (uint32_t l = 0; l < radv_get_levelCount(image, subresourceRange); ++l) {
- uint32_t width =
- radv_minify(image->info.width,
+ uint32_t width, height;
+
+ /* Do not decompress levels without DCC. */
+ if (!radv_dcc_enabled(image, subresourceRange->baseMipLevel + l))
+ continue;
+
+ width = radv_minify(image->info.width,
subresourceRange->baseMipLevel + l);
- uint32_t height =
- radv_minify(image->info.height,
+ height = radv_minify(image->info.height,
subresourceRange->baseMipLevel + l);
radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1,
@@ -700,18 +713,9 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer,
bool decompress_dcc)
{
bool old_predicating = false;
- VkPipeline *pipeline;
assert(cmd_buffer->queue_family_index == RADV_QUEUE_GENERAL);
- if (decompress_dcc && radv_dcc_enabled(image, subresourceRange->baseMipLevel)) {
- pipeline = &cmd_buffer->device->meta_state.fast_clear_flush.dcc_decompress_pipeline;
- } else if (radv_image_has_fmask(image)) {
- pipeline = &cmd_buffer->device->meta_state.fast_clear_flush.fmask_decompress_pipeline;
- } else {
- pipeline = &cmd_buffer->device->meta_state.fast_clear_flush.cmask_eliminate_pipeline;
- }
-
if (radv_dcc_enabled(image, subresourceRange->baseMipLevel)) {
uint64_t pred_offset = decompress_dcc ? image->dcc_pred_offset :
image->fce_pred_offset;
@@ -723,7 +727,8 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer,
cmd_buffer->state.predicating = true;
}
- radv_process_color_image(cmd_buffer, image, subresourceRange, pipeline);
+ radv_process_color_image(cmd_buffer, image, subresourceRange,
+ decompress_dcc);
if (radv_dcc_enabled(image, subresourceRange->baseMipLevel)) {
uint64_t pred_offset = decompress_dcc ? image->dcc_pred_offset :
--
2.22.0
More information about the mesa-dev
mailing list