radeonsi: fix PIPE_FORMAT_R11G11B10_FLOAT handling
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 29 Apr 2016 21:18:27 +0000 (16:18 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 2 May 2016 16:38:23 +0000 (11:38 -0500)
That format has first_non_void < 0. This fixes a regression in piglit
arb_shader_image_load_store-semantics that was introduced by commit 76b8c5cc602,
while hopefully still shutting Coverity up (and failing in a more obvious way
if a similar error should re-appear).

Reviewed-by: Jakob Sinclair <sinclair.jakob@openmailbox.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_state.c

index 1dd468b596d556c0584b3e201ef30dc45c7707f8..16c941ee8cdf3f8c8ff632f7100789c7196e7e8e 100644 (file)
@@ -1760,18 +1760,18 @@ static uint32_t si_translate_buffer_dataformat(struct pipe_screen *screen,
                                               const struct util_format_description *desc,
                                               int first_non_void)
 {
-       if (first_non_void < 0)
-               return V_008F0C_BUF_DATA_FORMAT_INVALID;
-
-       unsigned type = desc->channel[first_non_void].type;
+       unsigned type;
        int i;
 
-       if (type == UTIL_FORMAT_TYPE_FIXED)
-               return V_008F0C_BUF_DATA_FORMAT_INVALID;
-
        if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
                return V_008F0C_BUF_DATA_FORMAT_10_11_11;
 
+       assert(first_non_void >= 0);
+       type = desc->channel[first_non_void].type;
+
+       if (type == UTIL_FORMAT_TYPE_FIXED)
+               return V_008F0C_BUF_DATA_FORMAT_INVALID;
+
        if (desc->nr_channels == 4 &&
            desc->channel[0].size == 10 &&
            desc->channel[1].size == 10 &&
@@ -1837,9 +1837,11 @@ static uint32_t si_translate_buffer_numformat(struct pipe_screen *screen,
                                              const struct util_format_description *desc,
                                              int first_non_void)
 {
-       if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT || first_non_void < 0)
+       if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
                return V_008F0C_BUF_NUM_FORMAT_FLOAT;
 
+       assert(first_non_void >= 0);
+
        switch (desc->channel[first_non_void].type) {
        case UTIL_FORMAT_TYPE_SIGNED:
                if (desc->channel[first_non_void].normalized)