[Mesa-dev] [PATCH 2/2] llvmpipe: Ensure the packed input of the lp_test_format is aligned.

jfonseca at vmware.com jfonseca at vmware.com
Fri Oct 24 12:34:52 PDT 2014


From: José Fonseca <jfonseca at vmware.com>

https://bugs.freedesktop.org/show_bug.cgi?id=85377
http://llvm.org/bugs/show_bug.cgi?id=21365
---
 src/gallium/drivers/llvmpipe/lp_test_format.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_test_format.c b/src/gallium/drivers/llvmpipe/lp_test_format.c
index a4b3b56..48bf06e 100644
--- a/src/gallium/drivers/llvmpipe/lp_test_format.c
+++ b/src/gallium/drivers/llvmpipe/lp_test_format.c
@@ -133,6 +133,7 @@ test_format_float(unsigned verbose, FILE *fp,
    struct gallivm_state *gallivm;
    LLVMValueRef fetch = NULL;
    fetch_ptr_t fetch_ptr;
+   PIPE_ALIGN_VAR(16) uint8_t packed[UTIL_FORMAT_MAX_PACKED_BYTES];
    PIPE_ALIGN_VAR(16) float unpacked[4];
    boolean first = TRUE;
    boolean success = TRUE;
@@ -160,13 +161,16 @@ test_format_float(unsigned verbose, FILE *fp,
             first = FALSE;
          }
 
+         /* To ensure it's 16-byte aligned */
+         memcpy(packed, test->packed, sizeof packed);
+
          for (i = 0; i < desc->block.height; ++i) {
             for (j = 0; j < desc->block.width; ++j) {
                boolean match = TRUE;
 
                memset(unpacked, 0, sizeof unpacked);
 
-               fetch_ptr(unpacked, test->packed, j, i);
+               fetch_ptr(unpacked, packed, j, i);
 
                for(k = 0; k < 4; ++k) {
                   if (util_double_inf_sign(test->unpacked[i][j][k]) != util_inf_sign(unpacked[k])) {
@@ -220,6 +224,7 @@ test_format_unorm8(unsigned verbose, FILE *fp,
    struct gallivm_state *gallivm;
    LLVMValueRef fetch = NULL;
    fetch_ptr_t fetch_ptr;
+   PIPE_ALIGN_VAR(16) uint8_t packed[UTIL_FORMAT_MAX_PACKED_BYTES];
    uint8_t unpacked[4];
    boolean first = TRUE;
    boolean success = TRUE;
@@ -246,13 +251,16 @@ test_format_unorm8(unsigned verbose, FILE *fp,
             first = FALSE;
          }
 
+         /* To ensure it's 16-byte aligned */
+         memcpy(packed, test->packed, sizeof packed);
+
          for (i = 0; i < desc->block.height; ++i) {
             for (j = 0; j < desc->block.width; ++j) {
                boolean match;
 
                memset(unpacked, 0, sizeof unpacked);
 
-               fetch_ptr(unpacked, test->packed, j, i);
+               fetch_ptr(unpacked, packed, j, i);
 
                match = TRUE;
                for(k = 0; k < 4; ++k) {
-- 
1.9.1



More information about the mesa-dev mailing list