glthread: use 8-bit GLenum for prim modes where it results in better packing
authorMarek Olšák <marek.olsak@amd.com>
Sun, 21 Aug 2022 21:30:18 +0000 (17:30 -0400)
committerMarge Bot <emma+marge@anholt.net>
Mon, 26 Sep 2022 22:58:16 +0000 (22:58 +0000)
This is OK because all modes > 14 are invalid.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18828>

src/mesa/main/glheader.h
src/mesa/main/glthread_draw.c

index 12c9b94..cf17f1e 100644 (file)
@@ -44,6 +44,7 @@ extern "C" {
 
 
 /* Custom Mesa types to save space. */
+typedef unsigned char GLenum8; /* only for primitive modes */
 typedef unsigned short GLenum16;
 typedef unsigned char GLbitfield8;
 typedef unsigned short GLbitfield16;
index 2e709c4..030b7be 100644 (file)
@@ -671,7 +671,7 @@ struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance
 {
    struct marshal_cmd_base cmd_base;
    bool index_bounds_valid;
-   GLenum16 mode;
+   GLenum8 mode;
    GLenum16 type;
    GLsizei count;
    GLsizei instance_count;
@@ -756,7 +756,7 @@ draw_elements_async_user(struct gl_context *ctx, GLenum mode, GLsizei count,
    struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance *cmd;
 
    cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsInstancedBaseVertexBaseInstance, cmd_size);
-   cmd->mode = MIN2(mode, 0xffff);
+   cmd->mode = MIN2(mode, 0xff); /* primitive types go from 0 to 14 */
    cmd->type = MIN2(type, 0xffff);
    cmd->count = count;
    cmd->indices = indices;
@@ -887,7 +887,7 @@ struct marshal_cmd_MultiDrawElementsBaseVertex
 {
    struct marshal_cmd_base cmd_base;
    bool has_base_vertex;
-   GLenum16 mode;
+   GLenum8 mode;
    GLenum16 type;
    GLsizei draw_count;
    GLuint user_buffer_mask;
@@ -972,7 +972,7 @@ multi_draw_elements_async(struct gl_context *ctx, GLenum mode,
    }
 
    cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawElementsBaseVertex, cmd_size);
-   cmd->mode = MIN2(mode, 0xffff);
+   cmd->mode = MIN2(mode, 0xff); /* primitive types go from 0 to 14 */
    cmd->type = MIN2(type, 0xffff);
    cmd->draw_count = draw_count;
    cmd->user_buffer_mask = user_buffer_mask;