X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fglthread_marshal.h;h=a519ff0c5cf9d3f5b3d1e6bc9a8cc0575545cecc;hp=2b6d8f923896f67423ff61aeb3214943a0197c34;hb=9037005d6034d6bcbeb508e0f783622e2351b957;hpb=8a4114b9294c8e8f5bb977be47cc7764c9cdf490 diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 2b6d8f92389..a519ff0c5cf 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -56,16 +56,16 @@ _mesa_glthread_allocate_command(struct gl_context *ctx, uint16_t cmd_id, int size) { - struct glthread_state *glthread = ctx->GLThread; - struct glthread_batch *next = &glthread->batches[glthread->next]; + struct glthread_state *glthread = &ctx->GLThread; + struct glthread_batch *next = glthread->next_batch; struct marshal_cmd_base *cmd_base; - const int aligned_size = ALIGN(size, 8); if (unlikely(next->used + size > MARSHAL_MAX_CMD_SIZE)) { _mesa_glthread_flush_batch(ctx); - next = &glthread->batches[glthread->next]; + next = glthread->next_batch; } + const int aligned_size = align(size, 8); cmd_base = (struct marshal_cmd_base *)&next->buffer[next->used]; next->used += aligned_size; cmd_base->cmd_id = cmd_id; @@ -78,51 +78,53 @@ _mesa_glthread_allocate_command(struct gl_context *ctx, * calls (deprecated and removed in GL core), we just disable threading. */ static inline bool -_mesa_glthread_is_non_vbo_draw_elements(const struct gl_context *ctx) +_mesa_glthread_has_non_vbo_vertices_or_indices(const struct gl_context *ctx) { - struct glthread_state *glthread = ctx->GLThread; + const struct glthread_state *glthread = &ctx->GLThread; + struct glthread_vao *vao = glthread->CurrentVAO; return ctx->API != API_OPENGL_CORE && - (glthread->CurrentVAO->IndexBufferIsUserPointer || - glthread->CurrentVAO->HasUserPointer); + (vao->CurrentElementBufferName == 0 || + (vao->UserPointerMask & vao->Enabled)); } static inline bool -_mesa_glthread_is_non_vbo_draw_arrays(const struct gl_context *ctx) +_mesa_glthread_has_non_vbo_vertices(const struct gl_context *ctx) { - struct glthread_state *glthread = ctx->GLThread; + const struct glthread_state *glthread = &ctx->GLThread; + const struct glthread_vao *vao = glthread->CurrentVAO; - return ctx->API != API_OPENGL_CORE && glthread->CurrentVAO->HasUserPointer; + return ctx->API != API_OPENGL_CORE && + (vao->UserPointerMask & vao->Enabled); } static inline bool -_mesa_glthread_is_non_vbo_draw_arrays_indirect(const struct gl_context *ctx) +_mesa_glthread_has_non_vbo_vertices_or_indirect(const struct gl_context *ctx) { - struct glthread_state *glthread = ctx->GLThread; + const struct glthread_state *glthread = &ctx->GLThread; + const struct glthread_vao *vao = glthread->CurrentVAO; return ctx->API != API_OPENGL_CORE && - (!glthread->draw_indirect_buffer_is_vbo || - glthread->CurrentVAO->HasUserPointer ); + (glthread->CurrentDrawIndirectBufferName == 0 || + (vao->UserPointerMask & vao->Enabled)); } static inline bool -_mesa_glthread_is_non_vbo_draw_elements_indirect(const struct gl_context *ctx) +_mesa_glthread_has_non_vbo_vertices_or_indices_or_indirect(const struct gl_context *ctx) { - struct glthread_state *glthread = ctx->GLThread; + const struct glthread_state *glthread = &ctx->GLThread; + struct glthread_vao *vao = glthread->CurrentVAO; return ctx->API != API_OPENGL_CORE && - (!glthread->draw_indirect_buffer_is_vbo || - glthread->CurrentVAO->IndexBufferIsUserPointer || - glthread->CurrentVAO->HasUserPointer); + (glthread->CurrentDrawIndirectBufferName == 0 || + vao->CurrentElementBufferName == 0 || + (vao->UserPointerMask & vao->Enabled)); } struct _glapi_table * _mesa_create_marshal_table(const struct gl_context *ctx); -void -_mesa_glthread_BindBuffer(struct gl_context *ctx, GLenum target, GLuint buffer); - static inline unsigned _mesa_buffer_enum_to_count(GLenum buffer) { @@ -375,4 +377,33 @@ _mesa_semaphore_enum_to_count(GLenum pname) } } +static inline gl_vert_attrib +_mesa_array_to_attrib(struct gl_context *ctx, GLenum array) +{ + switch (array) { + case GL_VERTEX_ARRAY: + return VERT_ATTRIB_POS; + case GL_NORMAL_ARRAY: + return VERT_ATTRIB_NORMAL; + case GL_COLOR_ARRAY: + return VERT_ATTRIB_COLOR0; + case GL_INDEX_ARRAY: + return VERT_ATTRIB_COLOR_INDEX; + case GL_TEXTURE_COORD_ARRAY: + return VERT_ATTRIB_TEX(ctx->GLThread.ClientActiveTexture); + case GL_EDGE_FLAG_ARRAY: + return VERT_ATTRIB_EDGEFLAG; + case GL_FOG_COORDINATE_ARRAY: + return VERT_ATTRIB_FOG; + case GL_SECONDARY_COLOR_ARRAY: + return VERT_ATTRIB_COLOR1; + case GL_POINT_SIZE_ARRAY_OES: + return VERT_ATTRIB_POINT_SIZE; + default: + if (array >= GL_TEXTURE0 && array <= GL_TEXTURE7) + return VERT_ATTRIB_TEX(array - GL_TEXTURE0); + return VERT_ATTRIB_MAX; + } +} + #endif /* MARSHAL_H */