[Mesa-stable] [PATCH] gallium: Force blend color to 16-byte alignment
Tim Rowley
timothy.o.rowley at intel.com
Fri Jul 1 01:07:05 UTC 2016
From: Chuck Atkins <chuck.atkins at kitware.com>
This aligns the 4-element color float array to 16 byte boundaries. This
should allow compiler vectorizers to generate better optimizations.
Also fixes broken vectorization generated by Intel compiler.
v2: Fixed indentation and added a lengthy comment explaining the
reason for the alignment.
Cc: <mesa-stable at lists.freedesktop.org>
Reported-by: Tim Rowley <timothy.o.rowley at intel.com>
Tested-by: Tim Rowley <timothy.o.rowley at intel.com>
Signed-off-by: Chuck Atkins <chuck.atkins at kitware.com>
Acked-by: Roland Scheidegger <sroland at vmware.com>
---
src/gallium/include/pipe/p_state.h | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 1543e90..5526c39 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -326,7 +326,17 @@ struct pipe_blend_state
struct pipe_blend_color
{
- float color[4];
+ /**
+ * Making the color array explicitly 16-byte aligned provides a hint to
+ * compilers to make more efficient auto-vectorization optimizations.
+ * The actual performance gains from vectorizing the blend color array are
+ * fairly minimal, if any, but the alignment is necessary to work around
+ * buggy vectorization in some compilers which fail to generate the correct
+ * unaligned accessors resulting in a segfault. Specifically several
+ * versions of the Intel compiler are known to be affected but it's likely
+ * others are as well.
+ */
+ PIPE_ALIGN_VAR(16) float color[4];
};
--
1.9.1
More information about the mesa-stable
mailing list