anv/formats: Fix build on gcc-4 and earlier
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 <jason@jlekstrand.net>
Cc: Topi Pohjolainen <topi.pohjolainen@intel.com>
Fixes: 7ddb21708c
("intel/isl: Add an isl_swizzle structure and use it for isl_view swizzles")
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user