From b71406dda19e2699b1f43f5f5372633fa63f5c1b Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Sat, 30 Jan 2021 21:35:59 +0100 Subject: [PATCH] radv: Determine swizzles correctly. Previously we were calculating the inverse swizzle instead and doing something horrible to get 0/1 right, and then "fixing" our table. Let's do it right an align with the mesa-wide table. Reviewed-by: Samuel Pitoiset Part-of: --- .../radv/deqp-radv-navi10-aco-fails.txt | 2 ++ .../radv/deqp-radv-navi14-aco-fails.txt | 2 ++ ci-expects/radv/deqp-radv-raven-aco-fails.txt | 2 ++ .../deqp-radv-sienna_cichlid-aco-fails.txt | 2 ++ .../radv/deqp-radv-vega10-aco-fails.txt | 2 ++ src/amd/vulkan/radv_image.c | 4 +++- src/amd/vulkan/vk_format.h | 19 +------------------ src/amd/vulkan/vk_format_layout.csv | 4 ++-- 8 files changed, 16 insertions(+), 21 deletions(-) diff --git a/ci-expects/radv/deqp-radv-navi10-aco-fails.txt b/ci-expects/radv/deqp-radv-navi10-aco-fails.txt index b2ef102628c..98ada161a96 100644 --- a/ci-expects/radv/deqp-radv-navi10-aco-fails.txt +++ b/ci-expects/radv/deqp-radv-navi10-aco-fails.txt @@ -160,6 +160,8 @@ dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_snorm,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_srgb,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_uint,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_unorm,Fail +dEQP-VK.drm_format_modifiers.export_import.b4g4r4a4_unorm_pack16,Fail +dEQP-VK.drm_format_modifiers.export_import.b5g5r5a1_unorm_pack16,Fail # Fixed by ffd6cbac3 ("Fix validation of DRM modifier compatibility with image properties") dEQP-VK.drm_format_modifiers.create_list_modifiers.r16g16b16_sfloat,Crash diff --git a/ci-expects/radv/deqp-radv-navi14-aco-fails.txt b/ci-expects/radv/deqp-radv-navi14-aco-fails.txt index b2ef102628c..98ada161a96 100644 --- a/ci-expects/radv/deqp-radv-navi14-aco-fails.txt +++ b/ci-expects/radv/deqp-radv-navi14-aco-fails.txt @@ -160,6 +160,8 @@ dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_snorm,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_srgb,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_uint,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_unorm,Fail +dEQP-VK.drm_format_modifiers.export_import.b4g4r4a4_unorm_pack16,Fail +dEQP-VK.drm_format_modifiers.export_import.b5g5r5a1_unorm_pack16,Fail # Fixed by ffd6cbac3 ("Fix validation of DRM modifier compatibility with image properties") dEQP-VK.drm_format_modifiers.create_list_modifiers.r16g16b16_sfloat,Crash diff --git a/ci-expects/radv/deqp-radv-raven-aco-fails.txt b/ci-expects/radv/deqp-radv-raven-aco-fails.txt index b2ef102628c..98ada161a96 100644 --- a/ci-expects/radv/deqp-radv-raven-aco-fails.txt +++ b/ci-expects/radv/deqp-radv-raven-aco-fails.txt @@ -160,6 +160,8 @@ dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_snorm,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_srgb,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_uint,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_unorm,Fail +dEQP-VK.drm_format_modifiers.export_import.b4g4r4a4_unorm_pack16,Fail +dEQP-VK.drm_format_modifiers.export_import.b5g5r5a1_unorm_pack16,Fail # Fixed by ffd6cbac3 ("Fix validation of DRM modifier compatibility with image properties") dEQP-VK.drm_format_modifiers.create_list_modifiers.r16g16b16_sfloat,Crash diff --git a/ci-expects/radv/deqp-radv-sienna_cichlid-aco-fails.txt b/ci-expects/radv/deqp-radv-sienna_cichlid-aco-fails.txt index b2ef102628c..98ada161a96 100644 --- a/ci-expects/radv/deqp-radv-sienna_cichlid-aco-fails.txt +++ b/ci-expects/radv/deqp-radv-sienna_cichlid-aco-fails.txt @@ -160,6 +160,8 @@ dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_snorm,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_srgb,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_uint,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_unorm,Fail +dEQP-VK.drm_format_modifiers.export_import.b4g4r4a4_unorm_pack16,Fail +dEQP-VK.drm_format_modifiers.export_import.b5g5r5a1_unorm_pack16,Fail # Fixed by ffd6cbac3 ("Fix validation of DRM modifier compatibility with image properties") dEQP-VK.drm_format_modifiers.create_list_modifiers.r16g16b16_sfloat,Crash diff --git a/ci-expects/radv/deqp-radv-vega10-aco-fails.txt b/ci-expects/radv/deqp-radv-vega10-aco-fails.txt index b2ef102628c..98ada161a96 100644 --- a/ci-expects/radv/deqp-radv-vega10-aco-fails.txt +++ b/ci-expects/radv/deqp-radv-vega10-aco-fails.txt @@ -160,6 +160,8 @@ dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_snorm,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_srgb,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_uint,Fail dEQP-VK.drm_format_modifiers.export_import.r8g8b8a8_unorm,Fail +dEQP-VK.drm_format_modifiers.export_import.b4g4r4a4_unorm_pack16,Fail +dEQP-VK.drm_format_modifiers.export_import.b5g5r5a1_unorm_pack16,Fail # Fixed by ffd6cbac3 ("Fix validation of DRM modifier compatibility with image properties") dEQP-VK.drm_format_modifiers.create_list_modifiers.r16g16b16_sfloat,Crash diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index c3654950789..65b37bc6022 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -556,7 +556,9 @@ radv_compose_swizzle(const struct vk_format_description *desc, for (unsigned i = 0; i < 4; i++) swizzle[i] = desc->swizzle[i]; } else if (desc->colorspace == VK_FORMAT_COLORSPACE_ZS) { - const unsigned char swizzle_xxxx[4] = {0, 0, 0, 0}; + const unsigned char swizzle_xxxx[4] = { + VK_SWIZZLE_X, VK_SWIZZLE_0, VK_SWIZZLE_0, VK_SWIZZLE_1 + }; vk_format_compose_swizzles(mapping, swizzle_xxxx, swizzle); } else { vk_format_compose_swizzles(mapping, desc->swizzle, swizzle); diff --git a/src/amd/vulkan/vk_format.h b/src/amd/vulkan/vk_format.h index 237d9fa47a0..2017eb6d896 100644 --- a/src/amd/vulkan/vk_format.h +++ b/src/amd/vulkan/vk_format.h @@ -277,8 +277,6 @@ vk_format_aspects(VkFormat format) static inline enum vk_swizzle radv_swizzle_conv(VkComponentSwizzle component, const unsigned char chan[4], VkComponentSwizzle vk_swiz) { - int x; - if (vk_swiz == VK_COMPONENT_SWIZZLE_IDENTITY) vk_swiz = component; switch (vk_swiz) { @@ -287,25 +285,10 @@ radv_swizzle_conv(VkComponentSwizzle component, const unsigned char chan[4], VkC case VK_COMPONENT_SWIZZLE_ONE: return VK_SWIZZLE_1; case VK_COMPONENT_SWIZZLE_R: - for (x = 0; x < 4; x++) - if (chan[x] == 0) - return (enum vk_swizzle)x; - return VK_SWIZZLE_0; case VK_COMPONENT_SWIZZLE_G: - for (x = 0; x < 4; x++) - if (chan[x] == 1) - return (enum vk_swizzle)x; - return VK_SWIZZLE_0; case VK_COMPONENT_SWIZZLE_B: - for (x = 0; x < 4; x++) - if (chan[x] == 2) - return (enum vk_swizzle)x; - return VK_SWIZZLE_0; case VK_COMPONENT_SWIZZLE_A: - for (x = 0; x < 4; x++) - if (chan[x] == 3) - return (enum vk_swizzle)x; - return VK_SWIZZLE_1; + return (enum vk_swizzle)chan[vk_swiz - VK_COMPONENT_SWIZZLE_R]; default: unreachable("Illegal swizzle"); } diff --git a/src/amd/vulkan/vk_format_layout.csv b/src/amd/vulkan/vk_format_layout.csv index 1d170218a50..aab3a482b76 100644 --- a/src/amd/vulkan/vk_format_layout.csv +++ b/src/amd/vulkan/vk_format_layout.csv @@ -4,13 +4,13 @@ VK_FORMAT_UNDEFINED , plain, 1, 1, u8 , , , , x001, rgb VK_FORMAT_R4G4_UNORM_PACK8 , plain, 1, 1, un4 , un4 , , , xy01, rgb VK_FORMAT_R4G4B4A4_UNORM_PACK16 , plain, 1, 1, un4 , un4 , un4 , un4 , wzyx, rgb -VK_FORMAT_B4G4R4A4_UNORM_PACK16 , plain, 1, 1, un4 , un4 , un4 , un4 , wxyz, rgb +VK_FORMAT_B4G4R4A4_UNORM_PACK16 , plain, 1, 1, un4 , un4 , un4 , un4 , yzwx, rgb VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT , plain, 1, 1, un4 , un4 , un4 , un4 , zyxw, rgb VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT , plain, 1, 1, un4 , un4 , un4 , un4 , xyzw, rgb VK_FORMAT_R5G6B5_UNORM_PACK16 , plain, 1, 1, un5 , un6 , un5 , , zyx1, rgb VK_FORMAT_B5G6R5_UNORM_PACK16 , plain, 1, 1, un5 , un6 , un5 , , xyz1, rgb VK_FORMAT_R5G5B5A1_UNORM_PACK16 , plain, 1, 1, un1 , un5 , un5 , un5 , wzyx, rgb -VK_FORMAT_B5G5R5A1_UNORM_PACK16 , plain, 1, 1, un1 , un5 , un5 , un5 , wxyz, rgb +VK_FORMAT_B5G5R5A1_UNORM_PACK16 , plain, 1, 1, un1 , un5 , un5 , un5 , yzwx, rgb VK_FORMAT_A1R5G5B5_UNORM_PACK16 , plain, 1, 1, un5 , un5 , un5 , un1 , zyxw, rgb VK_FORMAT_R8_UNORM , plain, 1, 1, un8 , , , , x001, rgb VK_FORMAT_R8_SNORM , plain, 1, 1, sn8 , , , , x001, rgb