X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fglthread.h;h=a50b2f87ceb4e3d97021e6b02386106591e1345e;hb=b6b1ab8d548252f99df6c86cb124faa95abda26f;hp=306246ca1c5c9a60202e597c43a784c675194275;hpb=25ea7aa5cd15e38f39463053428ac4138fd4ac14;p=mesa.git diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index 306246ca1c5..a50b2f87ceb 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -24,8 +24,6 @@ #ifndef _GLTHREAD_H #define _GLTHREAD_H -#include "main/mtypes.h" - /* The size of one batch and the maximum size of one call. * * This should be as low as possible, so that: @@ -48,8 +46,18 @@ #include #include #include "util/u_queue.h" +#include "GL/gl.h" +#include "compiler/shader_enums.h" + +struct gl_context; +struct _mesa_HashTable; -enum marshal_dispatch_cmd_id; +struct glthread_vao { + GLuint Name; + GLuint CurrentElementBufferName; + GLbitfield Enabled; + GLbitfield UserPointerMask; +}; /** A single batch of commands queued up for execution. */ struct glthread_batch @@ -61,9 +69,14 @@ struct glthread_batch struct gl_context *ctx; /** Amount of data used by batch commands, in bytes. */ - size_t used; + int used; /** Data contained in the command buffer. */ +#ifdef _MSC_VER + __declspec(align(8)) +#else + __attribute__((aligned(8))) +#endif uint8_t buffer[MARSHAL_MAX_CMD_SIZE]; }; @@ -75,33 +88,55 @@ struct glthread_state /** This is sent to the driver for framebuffer overlay / HUD. */ struct util_queue_monitoring stats; + /** Whether GLThread is enabled. */ + bool enabled; + /** The ring of batches in memory. */ struct glthread_batch batches[MARSHAL_MAX_BATCHES]; + /** Pointer to the batch currently being filled. */ + struct glthread_batch *next_batch; + /** Index of the last submitted batch. */ unsigned last; /** Index of the batch being filled and about to be submitted. */ unsigned next; - /** - * Tracks on the main thread side whether the current vertex array binding - * is in a VBO. - */ - bool vertex_array_is_vbo; - - /** - * Tracks on the main thread side whether the current element array (index - * buffer) binding is in a VBO. - */ - bool element_array_is_vbo; + /** Vertex Array objects tracked by glthread independently of Mesa. */ + struct _mesa_HashTable *VAOs; + struct glthread_vao *CurrentVAO; + struct glthread_vao *LastLookedUpVAO; + struct glthread_vao DefaultVAO; + int ClientActiveTexture; + + /** Currently-bound buffer object IDs. */ + GLuint CurrentArrayBufferName; + GLuint CurrentDrawIndirectBufferName; }; void _mesa_glthread_init(struct gl_context *ctx); void _mesa_glthread_destroy(struct gl_context *ctx); -void _mesa_glthread_restore_dispatch(struct gl_context *ctx); +void _mesa_glthread_restore_dispatch(struct gl_context *ctx, const char *func); +void _mesa_glthread_disable(struct gl_context *ctx, const char *func); void _mesa_glthread_flush_batch(struct gl_context *ctx); void _mesa_glthread_finish(struct gl_context *ctx); +void _mesa_glthread_finish_before(struct gl_context *ctx, const char *func); + +void _mesa_glthread_BindBuffer(struct gl_context *ctx, GLenum target, + GLuint buffer); +void _mesa_glthread_DeleteBuffers(struct gl_context *ctx, GLsizei n, + const GLuint *buffers); + +void _mesa_glthread_BindVertexArray(struct gl_context *ctx, GLuint id); +void _mesa_glthread_DeleteVertexArrays(struct gl_context *ctx, + GLsizei n, const GLuint *ids); +void _mesa_glthread_GenVertexArrays(struct gl_context *ctx, + GLsizei n, GLuint *arrays); +void _mesa_glthread_ClientState(struct gl_context *ctx, GLuint *vaobj, + gl_vert_attrib attrib, bool enable); +void _mesa_glthread_AttribPointer(struct gl_context *ctx, + gl_vert_attrib attrib); #endif /* _GLTHREAD_H*/