From 2fef0d108aa52e5e7e7c2b394d18131952a829a6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Fri, 30 Sep 2016 23:00:22 +0300 Subject: [PATCH] anv/formats: Fix build on gcc-4 and earlier MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit gcc-4 and earlier don't allow compound literals where a constant is required in -std=c99/gnu99 mode, so we can't use ISL_SWIZZLE() when populating the anv_formats[] array. There are a few ways around it: First one would be -std=c89/gnu89, but the rest of the code depends on c99 so it's not really an option. The second option would be to upgrade to gcc-5+ where the compiler behaviour was relaxed a bit [1]. And the third option is just to avoid using compound literals. I chose the last option since it keeps gcc-4 and earlier working. [1] https://gcc.gnu.org/gcc-5/porting_to.html Cc: Jason Ekstrand Cc: Topi Pohjolainen Fixes: 7ddb21708c80 ("intel/isl: Add an isl_swizzle structure and use it for isl_view swizzles") Signed-off-by: Ville Syrjälä Reviewed-by: Jason Ekstrand --- src/intel/vulkan/anv_formats.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c index 7341d725cd0..f6915540fb3 100644 --- a/src/intel/vulkan/anv_formats.c +++ b/src/intel/vulkan/anv_formats.c @@ -24,9 +24,24 @@ #include "anv_private.h" #include "vk_format_info.h" -#define RGBA ISL_SWIZZLE(RED, GREEN, BLUE, ALPHA) -#define BGRA ISL_SWIZZLE(BLUE, GREEN, RED, ALPHA) -#define RGB1 ISL_SWIZZLE(RED, GREEN, BLUE, ONE) +/* + * gcc-4 and earlier don't allow compound literals where a constant + * is required in -std=c99/gnu99 mode, so we can't use ISL_SWIZZLE() + * here. -std=c89/gnu89 would allow it, but we depend on c99 features + * so using -std=c89/gnu89 is not an option. Starting from gcc-5 + * compound literals can also be considered constant in -std=c99/gnu99 + * mode. + */ +#define _ISL_SWIZZLE(r, g, b, a) { \ + ISL_CHANNEL_SELECT_##r, \ + ISL_CHANNEL_SELECT_##g, \ + ISL_CHANNEL_SELECT_##b, \ + ISL_CHANNEL_SELECT_##a, \ +} + +#define RGBA _ISL_SWIZZLE(RED, GREEN, BLUE, ALPHA) +#define BGRA _ISL_SWIZZLE(BLUE, GREEN, RED, ALPHA) +#define RGB1 _ISL_SWIZZLE(RED, GREEN, BLUE, ONE) #define swiz_fmt(__vk_fmt, __hw_fmt, __swizzle) \ [__vk_fmt] = { \ @@ -276,7 +291,7 @@ anv_get_format(const struct gen_device_info *devinfo, VkFormat vk_format, format.isl_format = rgbx; } else { format.isl_format = isl_format_rgb_to_rgba(format.isl_format); - format.swizzle = RGB1; + format.swizzle = ISL_SWIZZLE(RED, GREEN, BLUE, ONE); } } -- 2.30.2