When does it happen that first_non_void < 0? Doesn't this require PIPE_FORMAT_NONE, and why would that occur?

Nicolai

On 20.01.2017 20:07, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

Cc: 17.0 <mesa-sta...@lists.freedesktop.org>
---
 src/gallium/drivers/radeonsi/si_state.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state.c 
b/src/gallium/drivers/radeonsi/si_state.c
index 876cbf6..01edff9 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -3361,21 +3361,21 @@ static void *si_create_vertex_elements(struct 
pipe_context *ctx,

                if (!used[vbo_index]) {
                        v->first_vb_use_mask |= 1 << i;
                        used[vbo_index] = true;
                }

                desc = util_format_description(elements[i].src_format);
                first_non_void = 
util_format_get_first_non_void_channel(elements[i].src_format);
                data_format = si_translate_buffer_dataformat(ctx->screen, desc, 
first_non_void);
                num_format = si_translate_buffer_numformat(ctx->screen, desc, 
first_non_void);
-               channel = &desc->channel[first_non_void];
+               channel = first_non_void >= 0 ? &desc->channel[first_non_void] 
: NULL;

                v->rsrc_word3[i] = 
S_008F0C_DST_SEL_X(si_map_swizzle(desc->swizzle[0])) |
                                   
S_008F0C_DST_SEL_Y(si_map_swizzle(desc->swizzle[1])) |
                                   
S_008F0C_DST_SEL_Z(si_map_swizzle(desc->swizzle[2])) |
                                   
S_008F0C_DST_SEL_W(si_map_swizzle(desc->swizzle[3])) |
                                   S_008F0C_NUM_FORMAT(num_format) |
                                   S_008F0C_DATA_FORMAT(data_format);
                v->format_size[i] = desc->block.bits / 8;

                /* The hardware always treats the 2-bit alpha channel as
@@ -3383,26 +3383,26 @@ static void *si_create_vertex_elements(struct 
pipe_context *ctx,
                 */
                if (data_format == V_008F0C_BUF_DATA_FORMAT_2_10_10_10) {
                        if (num_format == V_008F0C_BUF_NUM_FORMAT_SNORM) {
                                v->fix_fetch |= (uint64_t)SI_FIX_FETCH_A2_SNORM 
<< (4 * i);
                        } else if (num_format == 
V_008F0C_BUF_NUM_FORMAT_SSCALED) {
                                v->fix_fetch |= (uint64_t)SI_FIX_FETCH_A2_SSCALED 
<< (4 * i);
                        } else if (num_format == V_008F0C_BUF_NUM_FORMAT_SINT) {
                                /* This isn't actually used in OpenGL. */
                                v->fix_fetch |= (uint64_t)SI_FIX_FETCH_A2_SINT 
<< (4 * i);
                        }
-               } else if (channel->type == UTIL_FORMAT_TYPE_FIXED) {
+               } else if (channel && channel->type == UTIL_FORMAT_TYPE_FIXED) {
                        if (desc->swizzle[3] == PIPE_SWIZZLE_1)
                                v->fix_fetch |= (uint64_t)SI_FIX_FETCH_RGBX_32_FIXED 
<< (4 * i);
                        else
                                v->fix_fetch |= (uint64_t)SI_FIX_FETCH_RGBA_32_FIXED 
<< (4 * i);
-               } else if (channel->size == 32 && !channel->pure_integer) {
+               } else if (channel && channel->size == 32 && 
!channel->pure_integer) {
                        if (channel->type == UTIL_FORMAT_TYPE_SIGNED) {
                                if (channel->normalized) {
                                        if (desc->swizzle[3] == PIPE_SWIZZLE_1)
                                                v->fix_fetch |= 
(uint64_t)SI_FIX_FETCH_RGBX_32_SNORM << (4 * i);
                                        else
                                                v->fix_fetch |= 
(uint64_t)SI_FIX_FETCH_RGBA_32_SNORM << (4 * i);
                                } else {
                                        v->fix_fetch |= 
(uint64_t)SI_FIX_FETCH_RGBA_32_SSCALED << (4 * i);
                                }
                        } else if (channel->type == UTIL_FORMAT_TYPE_UNSIGNED) {

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to