st/mesa: don't update vertex elements when GL doesn't change them
authorMarek Olšák <marek.olsak@amd.com>
Sun, 24 Oct 2021 07:57:14 +0000 (03:57 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 3 Nov 2021 23:22:31 +0000 (23:22 +0000)
commitcdc288993e06224cb5da97f4458fd50ce257e491
treef2b990fd5fb40880abfc00f02895bfbcf495f335
parent69ee132b867864a57080289796e7680b11480200
st/mesa: don't update vertex elements when GL doesn't change them

We rely on mesa/main to tell us whether to update vertex elements.
This decreases overhead for obvious reasons.

The select/feedback code path doesn't use this, which is why you see
unconditional "ALL" in a few codepaths.

This sequence of GL calls doesn't update vertex elements if only
the pointer and stride vary:
    glVertexPointer()
    glDrawElements()
    glVertexPointer()
    glDrawElements()
    glVertexPointer()
    glDrawElements()

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13512>
13 files changed:
src/mesa/state_tracker/st_atom.c
src/mesa/state_tracker/st_atom_array.cpp
src/mesa/state_tracker/st_cb_bitmap.c
src/mesa/state_tracker/st_cb_clear.c
src/mesa/state_tracker/st_cb_drawpixels.c
src/mesa/state_tracker/st_cb_drawtex.c
src/mesa/state_tracker/st_cb_readpixels.c
src/mesa/state_tracker/st_cb_texture.c
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h
src/mesa/state_tracker/st_draw.c
src/mesa/state_tracker/st_manager.c
src/mesa/state_tracker/st_program.c