radv: Determine swizzles correctly.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sat, 30 Jan 2021 20:35:59 +0000 (21:35 +0100)
committerMarge Bot <eric+marge@anholt.net>
Sat, 13 Feb 2021 21:47:16 +0000 (21:47 +0000)
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 <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8797>

ci-expects/radv/deqp-radv-navi10-aco-fails.txt
ci-expects/radv/deqp-radv-navi14-aco-fails.txt
ci-expects/radv/deqp-radv-raven-aco-fails.txt
ci-expects/radv/deqp-radv-sienna_cichlid-aco-fails.txt
ci-expects/radv/deqp-radv-vega10-aco-fails.txt
src/amd/vulkan/radv_image.c
src/amd/vulkan/vk_format.h
src/amd/vulkan/vk_format_layout.csv

index b2ef102..98ada16 100644 (file)
@@ -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
index b2ef102..98ada16 100644 (file)
@@ -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
index b2ef102..98ada16 100644 (file)
@@ -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
index b2ef102..98ada16 100644 (file)
@@ -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
index b2ef102..98ada16 100644 (file)
@@ -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
index c365495..65b37bc 100644 (file)
@@ -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);
index 237d9fa..2017eb6 100644 (file)
@@ -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");
        }
index 1d17021..aab3a48 100644 (file)
@@ -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