summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2016-04-29 16:18:27 -0500
committerNicolai Hähnle <[email protected]>2016-05-02 11:38:23 -0500
commit155ce496031888e7d1388c755775233544644eec (patch)
tree195c82d7f138759cbd1d9e3b47f3b0d1893cbea3
parent169ace5636defc032ed2a835b5ea7c55631b930f (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]>
-rw-r--r--src/gallium/drivers/radeonsi/si_state.c18
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)