diff options
author | Nicolai Hähnle <[email protected]> | 2016-04-29 16:18:27 -0500 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2016-05-02 11:38:23 -0500 |
commit | 155ce496031888e7d1388c755775233544644eec (patch) | |
tree | 195c82d7f138759cbd1d9e3b47f3b0d1893cbea3 /src/gallium/drivers/radeonsi/si_state.c | |
parent | 169ace5636defc032ed2a835b5ea7c55631b930f (diff) |
radeonsi: fix PIPE_FORMAT_R11G11B10_FLOAT handling
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 <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 1dd468b596d..16c941ee8cd 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -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) |