From b2b1e8e40a69bea59df3414d9f100b6bf809cd8e Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Sun, 8 Aug 2021 17:12:58 +0200 Subject: [PATCH] radv: Use correct signedness in misalign test. Lots of the MAX2 args end up subtracting two unsigned numbers, which blows up when the result is negative. Fixes: 4c99d6ff54b ("radv: flush L2 for images affected by the pipe misaligned issue on GFX10+") Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_image.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index be3bf71..beb43a7 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1306,14 +1306,14 @@ static bool radv_image_is_pipe_misaligned(const struct radv_device *device, const struct radv_image *image) { struct radeon_info *rad_info = &device->physical_device->rad_info; - unsigned log2_samples = util_logbase2(image->info.samples); + int log2_samples = util_logbase2(image->info.samples); assert(rad_info->chip_class >= GFX10); for (unsigned i = 0; i < image->plane_count; ++i) { VkFormat fmt = vk_format_get_plane_format(image->vk_format, i); - unsigned log2_bpp = util_logbase2(vk_format_get_blocksize(fmt)); - unsigned log2_bpp_and_samples; + int log2_bpp = util_logbase2(vk_format_get_blocksize(fmt)); + int log2_bpp_and_samples; if (rad_info->chip_class >= GFX10_3) { log2_bpp_and_samples = log2_bpp + log2_samples; @@ -1325,7 +1325,7 @@ radv_image_is_pipe_misaligned(const struct radv_device *device, const struct rad log2_bpp_and_samples = MIN2(6, log2_bpp + log2_samples); } - unsigned num_pipes = G_0098F8_NUM_PIPES(rad_info->gb_addr_config); + int num_pipes = G_0098F8_NUM_PIPES(rad_info->gb_addr_config); int overlap = MAX2(0, log2_bpp_and_samples + num_pipes - 8); if (vk_format_has_depth(image->vk_format)) { @@ -1333,7 +1333,7 @@ radv_image_is_pipe_misaligned(const struct radv_device *device, const struct rad return true; } } else { - unsigned max_compressed_frags = G_0098F8_MAX_COMPRESSED_FRAGS(rad_info->gb_addr_config); + int max_compressed_frags = G_0098F8_MAX_COMPRESSED_FRAGS(rad_info->gb_addr_config); int log2_samples_frag_diff = MAX2(0, log2_samples - max_compressed_frags); int samples_overlap = MIN2(log2_samples, overlap); -- 2.7.4