<p dir="ltr">I remember the first tone you fixed this but when I was going the ISL_SWIZZLE stuff, I couldn't find it in the git log so I went ahead and pushed the change. Thanks for fixing it again.</p>
<p dir="ltr">Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>></p>
<div class="gmail_extra"><br><div class="gmail_quote">On Sep 30, 2016 1:00 PM,  <<a href="mailto:ville.syrjala@linux.intel.com">ville.syrjala@linux.intel.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Ville Syrjälä <<a href="mailto:ville.syrjala@linux.intel.com">ville.syrjala@linux.intel.com</a><wbr>><br>
<br>
gcc-4 and earlier don't allow compound literals where a constant<br>
is required in -std=c99/gnu99 mode, so we can't use ISL_SWIZZLE()<br>
when populating the anv_formats[] array. There are a few ways around<br>
it: First one would be -std=c89/gnu89, but the rest of the code<br>
depends on c99 so it's not really an option. The second option<br>
would be to upgrade to gcc-5+ where the compiler behaviour was relaxed<br>
a bit [1]. And the third option is just to avoid using compound<br>
literals. I chose the last option since it keeps gcc-4 and earlier<br>
working.<br>
<br>
[1] <a href="https://gcc.gnu.org/gcc-5/porting_to.html" rel="noreferrer" target="_blank">https://gcc.gnu.org/gcc-5/<wbr>porting_to.html</a><br>
<br>
Cc: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
Cc: Topi Pohjolainen <<a href="mailto:topi.pohjolainen@intel.com">topi.pohjolainen@intel.com</a>><br>
Fixes: 7ddb21708c80 ("intel/isl: Add an isl_swizzle structure and use it for isl_view swizzles")<br>
Signed-off-by: Ville Syrjälä <<a href="mailto:ville.syrjala@linux.intel.com">ville.syrjala@linux.intel.com</a><wbr>><br>
---<br>
 src/intel/vulkan/anv_formats.c | 23 +++++++++++++++++++----<br>
 1 file changed, 19 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_<wbr>formats.c b/src/intel/vulkan/anv_<wbr>formats.c<br>
index 7341d725cd0a..f6915540fb3d 100644<br>
--- a/src/intel/vulkan/anv_<wbr>formats.c<br>
+++ b/src/intel/vulkan/anv_<wbr>formats.c<br>
@@ -24,9 +24,24 @@<br>
 #include "anv_private.h"<br>
 #include "vk_format_info.h"<br>
<br>
-#define RGBA ISL_SWIZZLE(RED, GREEN, BLUE, ALPHA)<br>
-#define BGRA ISL_SWIZZLE(BLUE, GREEN, RED, ALPHA)<br>
-#define RGB1 ISL_SWIZZLE(RED, GREEN, BLUE, ONE)<br>
+/*<br>
+ * gcc-4 and earlier don't allow compound literals where a constant<br>
+ * is required in -std=c99/gnu99 mode, so we can't use ISL_SWIZZLE()<br>
+ * here. -std=c89/gnu89 would allow it, but we depend on c99 features<br>
+ * so using -std=c89/gnu89 is not an option. Starting from gcc-5<br>
+ * compound literals can also be considered constant in -std=c99/gnu99<br>
+ * mode.<br>
+ */<br>
+#define _ISL_SWIZZLE(r, g, b, a) { \<br>
+      ISL_CHANNEL_SELECT_##r, \<br>
+      ISL_CHANNEL_SELECT_##g, \<br>
+      ISL_CHANNEL_SELECT_##b, \<br>
+      ISL_CHANNEL_SELECT_##a, \<br>
+}<br>
+<br>
+#define RGBA _ISL_SWIZZLE(RED, GREEN, BLUE, ALPHA)<br>
+#define BGRA _ISL_SWIZZLE(BLUE, GREEN, RED, ALPHA)<br>
+#define RGB1 _ISL_SWIZZLE(RED, GREEN, BLUE, ONE)<br>
<br>
 #define swiz_fmt(__vk_fmt, __hw_fmt, __swizzle)     \<br>
    [__vk_fmt] = { \<br>
@@ -276,7 +291,7 @@ anv_get_format(const struct gen_device_info *devinfo, VkFormat vk_format,<br>
          format.isl_format = rgbx;<br>
       } else {<br>
          format.isl_format = isl_format_rgb_to_rgba(format.<wbr>isl_format);<br>
-         format.swizzle = RGB1;<br>
+         format.swizzle = ISL_SWIZZLE(RED, GREEN, BLUE, ONE);<br>
       }<br>
    }<br>
<br>
--<br>
2.7.4<br>
<br>
</blockquote></div></div>