Mesa (main): gallium,vbo: add PIPE_BIND_VERTEX_STATE for display lists
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 13:45:27 UTC 2021
Module: Mesa
Branch: main
Commit: cc2f3a0168d11d74022b87b48f20c03ddeee6f53
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc2f3a0168d11d74022b87b48f20c03ddeee6f53
Author: Marek Olšák <marek.olsak at amd.com>
Date: Sun Oct 17 14:06:50 2021 -0400
gallium,vbo: add PIPE_BIND_VERTEX_STATE for display lists
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13399>
---
src/gallium/include/pipe/p_defines.h | 1 +
src/mesa/main/dd.h | 6 ++++++
src/mesa/state_tracker/st_cb_bufferobjects.c | 5 ++++-
src/mesa/vbo/vbo_save_api.c | 6 ++++--
4 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index c88aee3936f..5c009017ac5 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -480,6 +480,7 @@ enum pipe_flush_flags
#define PIPE_BIND_INDEX_BUFFER (1 << 5) /* draw_elements */
#define PIPE_BIND_CONSTANT_BUFFER (1 << 6) /* set_constant_buffer */
#define PIPE_BIND_DISPLAY_TARGET (1 << 7) /* flush_front_buffer */
+#define PIPE_BIND_VERTEX_STATE (1 << 8) /* create_vertex_state */
/* gap */
#define PIPE_BIND_STREAM_OUTPUT (1 << 10) /* set_stream_output_buffers */
#define PIPE_BIND_CURSOR (1 << 11) /* mouse cursor */
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index dd246585dca..ebd29c584d1 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -92,6 +92,12 @@ struct pipe_vertex_element;
/* This buffer will only be mapped/unmapped once */
#define MESA_MAP_ONCE 0x10000
+/* This BufferStorage flag indicates that the buffer will be used
+ * by pipe_vertex_state, which doesn't track buffer busyness and doesn't
+ * support invalidations.
+ */
+#define MESA_GALLIUM_VERTEX_STATE_STORAGE 0x20000
+
/**
* Device driver function table.
diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
index fdb1ec69a67..782c0250b79 100644
--- a/src/mesa/state_tracker/st_cb_bufferobjects.c
+++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
@@ -353,7 +353,10 @@ bufferobj_data(struct gl_context *ctx,
release_buffer(obj);
- const unsigned bindings = buffer_target_to_bind_flags(target);
+ unsigned bindings = buffer_target_to_bind_flags(target);
+
+ if (storageFlags & MESA_GALLIUM_VERTEX_STATE_STORAGE)
+ bindings |= PIPE_BIND_VERTEX_STATE;
if (ST_DEBUG & DEBUG_BUFFER) {
debug_printf("Create buffer size %" PRId64 " bind 0x%x\n",
diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c
index 7f2b1d4b917..dbfe1650888 100644
--- a/src/mesa/vbo/vbo_save_api.c
+++ b/src/mesa/vbo/vbo_save_api.c
@@ -746,7 +746,8 @@ compile_vertex_list(struct gl_context *ctx)
GL_ELEMENT_ARRAY_BUFFER_ARB,
MAX2(total_bytes_needed, VBO_SAVE_BUFFER_SIZE),
NULL,
- GL_STATIC_DRAW_ARB, GL_MAP_WRITE_BIT,
+ GL_STATIC_DRAW_ARB, GL_MAP_WRITE_BIT |
+ MESA_GALLIUM_VERTEX_STATE_STORAGE,
save->current_bo);
if (!success) {
_mesa_reference_buffer_object(ctx, &save->current_bo, NULL);
@@ -876,7 +877,8 @@ end:
GL_ELEMENT_ARRAY_BUFFER_ARB,
VBO_SAVE_BUFFER_SIZE,
NULL,
- GL_STATIC_DRAW_ARB, GL_MAP_WRITE_BIT,
+ GL_STATIC_DRAW_ARB, GL_MAP_WRITE_BIT |
+ MESA_GALLIUM_VERTEX_STATE_STORAGE,
save->current_bo);
if (!success)
handle_out_of_memory(ctx);
More information about the mesa-commit
mailing list