• Paul Berry's avatar
    mesa: Fix computation of default vertex attrib stride for 2_10_10_10 formats. · 62678530
    Paul Berry authored
    Previously, if the client program didn't specify a stride when setting
    up a vertex attribute, we used _mesa_sizeof_type() to compute the size
    of the type, and multiplied it by the number of components.
    
    This didn't work for the 2_10_10_10 formats, since _mesa_sizeof_type()
    returns -1 for those types, resulting in all kinds of havoc, since it
    was causing the hardware to be programmed with a negative stride
    value.
    
    This patch adds a new function _mesa_bytes_per_vertex_attrib(), which
    is similar to the existing function _mesa_bytes_per_pixel(), but which
    computes the size of a vertex attribute based on the type and the
    number of formats.  For packed formats (currently only the 2_10_10_10
    formats), it verifies that the number of components is correct and
    returns the size of the packed format.  For unpacked formats, it
    returns the size of the type times the number of components.
    
    In addition, this patch adds an assertion so that if we ever forget to
    update _mesa_bytes_per_vertex_attrib() when adding a new vertex
    format, we'll see the problem quickly rather than having to debug a
    subtle conformance test failure.
    
    Fixes GLES3 conformance tests
    vertex_type_2_10_10_10_rev_{conversion,divisor,stride_pointer}.test.
    Reviewed-by: default avatarBrian Paul <brianp@vmware.com>
    62678530
glformats.c 43.2 KB