From: Chuck Atkins Date: Wed, 29 Jun 2016 02:32:02 +0000 (-0400) Subject: gallium: Force blend color to 16-byte alignment X-Git-Tag: upstream/17.1.0~8382 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d8d6091a846ac2a40a011d512d6d57f6c8442e6a;p=platform%2Fupstream%2Fmesa.git gallium: Force blend color to 16-byte alignment 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: Reported-by: Tim Rowley Tested-by: Tim Rowley Signed-off-by: Chuck Atkins Acked-by: Roland Scheidegger --- 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]; };