From: Mathias Fröhlich <[email protected]> Introduce a new capability for the maximum value of pipe_vertex_element::src_offset. Initially just every driver backend returns the value previously set from _mesa_init_constants. So this shall end up in no functional change.
Signed-off-by: Mathias Fröhlich <[email protected]> --- src/gallium/auxiliary/util/u_screen.c | 3 +++ src/gallium/docs/source/screen.rst | 3 +++ src/gallium/include/pipe/p_defines.h | 1 + src/mesa/state_tracker/st_extensions.c | 6 ++++++ 4 files changed, 13 insertions(+) diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c index c41e28820b..d97c3cf5d9 100644 --- a/src/gallium/auxiliary/util/u_screen.c +++ b/src/gallium/auxiliary/util/u_screen.c @@ -318,6 +318,9 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen, case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE: return 0; + case PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET: + return 2047; + default: unreachable("bad PIPE_CAP_*"); } diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst index 93415a5df1..6e5d123107 100644 --- a/src/gallium/docs/source/screen.rst +++ b/src/gallium/docs/source/screen.rst @@ -466,6 +466,9 @@ subpixel precision bias in bits during conservative rasterization. * ``PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS``: Maximum total number of atomic counter buffers. A value of 0 means the sum of all per-shader stage maximums (see ``PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS``). +* ``PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET``: The maximum supported value for + of pipe_vertex_element::src_offset. + .. _pipe_capf: diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index bdd3f4680f..3a686c4cc3 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -821,6 +821,7 @@ enum pipe_cap PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS, PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS, PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS, + PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET, }; /** diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 244c12595e..43ef6a40f9 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -403,6 +403,12 @@ void st_init_limits(struct pipe_screen *screen, c->MaxVertexAttribStride = screen->get_param(screen, PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE); + /* The value cannot be larger than that since pipe_vertex_buffer::src_offset + * is only 16 bits. + */ + temp = screen->get_param(screen, PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET); + c->MaxVertexAttribRelativeOffset = MIN2(0xffff, temp); + c->StripTextureBorder = GL_TRUE; c->GLSLSkipStrictMaxUniformLimitCheck = -- 2.17.1 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
