Mesa (master): mesa: shrink VERT_ATTRIB bitfields to 32 bits

Marek Olšák mareko at kemper.freedesktop.org
Sat Nov 25 16:23:06 UTC 2017


Module: Mesa
Branch: master
Commit: 78942e7dbfd234ce080b2773b9317a61deb77788
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=78942e7dbfd234ce080b2773b9317a61deb77788

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed Nov 15 23:53:04 2017 +0100

mesa: shrink VERT_ATTRIB bitfields to 32 bits

There are only 32 vertex attribs now.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/compiler/shader_enums.h                 | 46 ++++++++++++++---------------
 src/mesa/drivers/dri/i965/brw_draw_upload.c |  8 ++---
 src/mesa/main/arrayobj.c                    | 14 ++++-----
 src/mesa/main/enable.c                      |  2 +-
 src/mesa/main/ff_fragment_shader.cpp        |  2 +-
 src/mesa/main/ffvertex_prog.c               |  2 +-
 src/mesa/main/mtypes.h                      | 20 +++++++++----
 src/mesa/main/state.c                       |  2 +-
 src/mesa/main/state.h                       |  2 +-
 src/mesa/main/varray.c                      |  2 +-
 src/mesa/program/program_parse.y            |  2 +-
 src/mesa/vbo/vbo_exec_array.c               |  2 +-
 src/mesa/vbo/vbo_exec_draw.c                |  2 +-
 src/mesa/vbo/vbo_save_draw.c                |  2 +-
 14 files changed, 59 insertions(+), 49 deletions(-)

diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h
index af4008c617..ffe551ab20 100644
--- a/src/compiler/shader_enums.h
+++ b/src/compiler/shader_enums.h
@@ -139,36 +139,36 @@ const char *gl_vert_attrib_name(gl_vert_attrib attrib);
  * These are used in bitfields in many places.
  */
 /*@{*/
-#define VERT_BIT_POS             BITFIELD64_BIT(VERT_ATTRIB_POS)
-#define VERT_BIT_NORMAL          BITFIELD64_BIT(VERT_ATTRIB_NORMAL)
-#define VERT_BIT_COLOR0          BITFIELD64_BIT(VERT_ATTRIB_COLOR0)
-#define VERT_BIT_COLOR1          BITFIELD64_BIT(VERT_ATTRIB_COLOR1)
-#define VERT_BIT_FOG             BITFIELD64_BIT(VERT_ATTRIB_FOG)
-#define VERT_BIT_COLOR_INDEX     BITFIELD64_BIT(VERT_ATTRIB_COLOR_INDEX)
-#define VERT_BIT_EDGEFLAG        BITFIELD64_BIT(VERT_ATTRIB_EDGEFLAG)
-#define VERT_BIT_TEX0            BITFIELD64_BIT(VERT_ATTRIB_TEX0)
-#define VERT_BIT_TEX1            BITFIELD64_BIT(VERT_ATTRIB_TEX1)
-#define VERT_BIT_TEX2            BITFIELD64_BIT(VERT_ATTRIB_TEX2)
-#define VERT_BIT_TEX3            BITFIELD64_BIT(VERT_ATTRIB_TEX3)
-#define VERT_BIT_TEX4            BITFIELD64_BIT(VERT_ATTRIB_TEX4)
-#define VERT_BIT_TEX5            BITFIELD64_BIT(VERT_ATTRIB_TEX5)
-#define VERT_BIT_TEX6            BITFIELD64_BIT(VERT_ATTRIB_TEX6)
-#define VERT_BIT_TEX7            BITFIELD64_BIT(VERT_ATTRIB_TEX7)
-#define VERT_BIT_POINT_SIZE      BITFIELD64_BIT(VERT_ATTRIB_POINT_SIZE)
-#define VERT_BIT_GENERIC0        BITFIELD64_BIT(VERT_ATTRIB_GENERIC0)
-
-#define VERT_BIT(i)              BITFIELD64_BIT(i)
-#define VERT_BIT_ALL             BITFIELD64_RANGE(0, VERT_ATTRIB_MAX)
+#define VERT_BIT_POS             BITFIELD_BIT(VERT_ATTRIB_POS)
+#define VERT_BIT_NORMAL          BITFIELD_BIT(VERT_ATTRIB_NORMAL)
+#define VERT_BIT_COLOR0          BITFIELD_BIT(VERT_ATTRIB_COLOR0)
+#define VERT_BIT_COLOR1          BITFIELD_BIT(VERT_ATTRIB_COLOR1)
+#define VERT_BIT_FOG             BITFIELD_BIT(VERT_ATTRIB_FOG)
+#define VERT_BIT_COLOR_INDEX     BITFIELD_BIT(VERT_ATTRIB_COLOR_INDEX)
+#define VERT_BIT_EDGEFLAG        BITFIELD_BIT(VERT_ATTRIB_EDGEFLAG)
+#define VERT_BIT_TEX0            BITFIELD_BIT(VERT_ATTRIB_TEX0)
+#define VERT_BIT_TEX1            BITFIELD_BIT(VERT_ATTRIB_TEX1)
+#define VERT_BIT_TEX2            BITFIELD_BIT(VERT_ATTRIB_TEX2)
+#define VERT_BIT_TEX3            BITFIELD_BIT(VERT_ATTRIB_TEX3)
+#define VERT_BIT_TEX4            BITFIELD_BIT(VERT_ATTRIB_TEX4)
+#define VERT_BIT_TEX5            BITFIELD_BIT(VERT_ATTRIB_TEX5)
+#define VERT_BIT_TEX6            BITFIELD_BIT(VERT_ATTRIB_TEX6)
+#define VERT_BIT_TEX7            BITFIELD_BIT(VERT_ATTRIB_TEX7)
+#define VERT_BIT_POINT_SIZE      BITFIELD_BIT(VERT_ATTRIB_POINT_SIZE)
+#define VERT_BIT_GENERIC0        BITFIELD_BIT(VERT_ATTRIB_GENERIC0)
+
+#define VERT_BIT(i)              BITFIELD_BIT(i)
+#define VERT_BIT_ALL             BITFIELD_RANGE(0, VERT_ATTRIB_MAX)
 
 #define VERT_BIT_FF(i)           VERT_BIT(i)
-#define VERT_BIT_FF_ALL          BITFIELD64_RANGE(0, VERT_ATTRIB_FF_MAX)
+#define VERT_BIT_FF_ALL          BITFIELD_RANGE(0, VERT_ATTRIB_FF_MAX)
 #define VERT_BIT_TEX(i)          VERT_BIT(VERT_ATTRIB_TEX(i))
 #define VERT_BIT_TEX_ALL         \
-   BITFIELD64_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
+   BITFIELD_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
 
 #define VERT_BIT_GENERIC(i)      VERT_BIT(VERT_ATTRIB_GENERIC(i))
 #define VERT_BIT_GENERIC_ALL     \
-   BITFIELD64_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX)
+   BITFIELD_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX)
 /*@}*/
 
 #define MAX_VARYING 32 /**< number of float[4] vectors */
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index 9b81999ea0..2204bf474b 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -458,7 +458,7 @@ brw_prepare_vertices(struct brw_context *brw)
    /* BRW_NEW_VS_PROG_DATA */
    const struct brw_vs_prog_data *vs_prog_data =
       brw_vs_prog_data(brw->vs.base.prog_data);
-   GLbitfield64 vs_inputs = vs_prog_data->inputs_read;
+   GLbitfield vs_inputs = vs_prog_data->inputs_read;
    const unsigned char *ptr = NULL;
    GLuint interleaved = 0;
    unsigned int min_index = brw->vb.min_index + brw->basevertex;
@@ -487,16 +487,16 @@ brw_prepare_vertices(struct brw_context *brw)
    /* Accumulate the list of enabled arrays. */
    brw->vb.nr_enabled = 0;
    while (vs_inputs) {
-      GLuint first = ffsll(vs_inputs) - 1;
+      GLuint first = ffs(vs_inputs) - 1;
       assert (first < 64);
       GLuint index =
          first - DIV_ROUND_UP(_mesa_bitcount_64(vs_prog_data->double_inputs_read &
                                                 BITFIELD64_MASK(first)), 2);
       struct brw_vertex_element *input = &brw->vb.inputs[index];
       input->is_dual_slot = (vs_prog_data->double_inputs_read & BITFIELD64_BIT(first)) != 0;
-      vs_inputs &= ~BITFIELD64_BIT(first);
+      vs_inputs &= ~BITFIELD_BIT(first);
       if (input->is_dual_slot)
-         vs_inputs &= ~BITFIELD64_BIT(first + 1);
+         vs_inputs &= ~BITFIELD_BIT(first + 1);
       brw->vb.enabled[brw->vb.nr_enabled++] = input;
    }
 
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 18d6d8008c..d9a65ba410 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -252,7 +252,7 @@ init_array(struct gl_context *ctx,
    binding->Offset = 0;
    binding->Stride = array->_ElementSize;
    binding->BufferObj = NULL;
-   binding->_BoundArrays = BITFIELD64_BIT(index);
+   binding->_BoundArrays = BITFIELD_BIT(index);
 
    /* Vertex array buffers */
    _mesa_reference_buffer_object(ctx, &binding->BufferObj,
@@ -314,10 +314,10 @@ void
 _mesa_update_vao_client_arrays(struct gl_context *ctx,
                                struct gl_vertex_array_object *vao)
 {
-   GLbitfield64 arrays = vao->NewArrays;
+   GLbitfield arrays = vao->NewArrays;
 
    while (arrays) {
-      const int attrib = u_bit_scan64(&arrays);
+      const int attrib = u_bit_scan(&arrays);
       struct gl_vertex_array *client_array = &vao->_VertexAttrib[attrib];
       const struct gl_array_attributes *attrib_array =
          &vao->VertexAttrib[attrib];
@@ -334,13 +334,13 @@ bool
 _mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao)
 {
    /* Walk those enabled arrays that have the default vbo attached */
-   GLbitfield64 mask = vao->_Enabled & ~vao->VertexAttribBufferMask;
+   GLbitfield mask = vao->_Enabled & ~vao->VertexAttribBufferMask;
 
    while (mask) {
       /* Do not use u_bit_scan64 as we can walk multiple
        * attrib arrays at once
        */
-      const int i = ffsll(mask) - 1;
+      const int i = ffs(mask) - 1;
       const struct gl_array_attributes *attrib_array =
          &vao->VertexAttrib[i];
       const struct gl_vertex_buffer_binding *buffer_binding =
@@ -368,10 +368,10 @@ bool
 _mesa_all_buffers_are_unmapped(const struct gl_vertex_array_object *vao)
 {
    /* Walk the enabled arrays that have a vbo attached */
-   GLbitfield64 mask = vao->_Enabled & vao->VertexAttribBufferMask;
+   GLbitfield mask = vao->_Enabled & vao->VertexAttribBufferMask;
 
    while (mask) {
-      const int i = ffsll(mask) - 1;
+      const int i = ffs(mask) - 1;
       const struct gl_array_attributes *attrib_array =
          &vao->VertexAttrib[i];
       const struct gl_vertex_buffer_binding *buffer_binding =
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index 8e99f2504f..c859a7ae1c 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -64,7 +64,7 @@ static void
 client_state(struct gl_context *ctx, GLenum cap, GLboolean state)
 {
    struct gl_vertex_array_object *vao = ctx->Array.VAO;
-   GLbitfield64 flag;
+   GLbitfield flag;
    GLboolean *var;
 
    switch (cap) {
diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp
index 2b924f6d10..83541a269a 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -180,7 +180,7 @@ static GLbitfield filter_fp_input_mask( GLbitfield fp_inputs,
       GLbitfield possible_inputs = 0;
 
       /* _NEW_VARYING_VP_INPUTS */
-      GLbitfield64 varying_inputs = ctx->varying_vp_inputs;
+      GLbitfield varying_inputs = ctx->varying_vp_inputs;
 
       /* These get generated in the setup routine regardless of the
        * vertex program:
diff --git a/src/mesa/main/ffvertex_prog.c b/src/mesa/main/ffvertex_prog.c
index 85f8f24d83..44fbf4fb8a 100644
--- a/src/mesa/main/ffvertex_prog.c
+++ b/src/mesa/main/ffvertex_prog.c
@@ -68,7 +68,7 @@ struct state_key {
    unsigned texture_enabled_global:1;
    unsigned fragprog_inputs_read:12;
 
-   GLbitfield64 varying_vp_inputs;
+   GLbitfield varying_vp_inputs;
 
    struct {
       unsigned light_enabled:1;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 4682e02fc8..9d704c1c15 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -56,6 +56,16 @@ extern "C" {
 #endif
 
 
+/** Set a single bit */
+#define BITFIELD_BIT(b)      ((GLbitfield)1 << (b))
+/** Set all bits up to excluding bit b */
+#define BITFIELD_MASK(b)      \
+   ((b) == 32 ? (~(GLbitfield)0) : BITFIELD_BIT(b) - 1)
+/** Set count bits starting from bit b  */
+#define BITFIELD_RANGE(b, count) \
+   (BITFIELD_MASK((b) + (count)) & ~BITFIELD_MASK(b))
+
+
 /**
  * \name 64-bit extension of GLbitfield.
  */
@@ -1507,7 +1517,7 @@ struct gl_vertex_buffer_binding
    GLsizei Stride;                     /**< User-specified stride */
    GLuint InstanceDivisor;             /**< GL_ARB_instanced_arrays */
    struct gl_buffer_object *BufferObj; /**< GL_ARB_vertex_buffer_object */
-   GLbitfield64 _BoundArrays;          /**< Arrays bound to this binding point */
+   GLbitfield _BoundArrays;            /**< Arrays bound to this binding point */
 };
 
 
@@ -1544,13 +1554,13 @@ struct gl_vertex_array_object
    struct gl_vertex_buffer_binding BufferBinding[VERT_ATTRIB_MAX];
 
    /** Mask indicating which vertex arrays have vertex buffer associated. */
-   GLbitfield64 VertexAttribBufferMask;
+   GLbitfield VertexAttribBufferMask;
 
    /** Mask of VERT_BIT_* values indicating which arrays are enabled */
-   GLbitfield64 _Enabled;
+   GLbitfield _Enabled;
 
    /** Mask of VERT_BIT_* values indicating changed/dirty arrays */
-   GLbitfield64 NewArrays;
+   GLbitfield NewArrays;
 
    /** The index buffer (also known as the element array buffer in OpenGL). */
    struct gl_buffer_object *IndexBufferObj;
@@ -4948,7 +4958,7 @@ struct gl_context
 
    GLboolean ViewportInitialized;  /**< has viewport size been initialized? */
 
-   GLbitfield64 varying_vp_inputs;  /**< mask of VERT_BIT_* flags */
+   GLbitfield varying_vp_inputs;  /**< mask of VERT_BIT_* flags */
 
    /** \name Derived state */
    GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 7aec98e578..7a9732d37b 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -414,7 +414,7 @@ _mesa_update_state( struct gl_context *ctx )
  */
 void
 _mesa_set_varying_vp_inputs( struct gl_context *ctx,
-                             GLbitfield64 varying_inputs )
+                             GLbitfield varying_inputs )
 {
    if (ctx->API != API_OPENGL_COMPAT &&
        ctx->API != API_OPENGLES)
diff --git a/src/mesa/main/state.h b/src/mesa/main/state.h
index b719f39296..9d4591790a 100644
--- a/src/mesa/main/state.h
+++ b/src/mesa/main/state.h
@@ -39,7 +39,7 @@ _mesa_update_state_locked(struct gl_context *ctx);
 
 
 extern void
-_mesa_set_varying_vp_inputs(struct gl_context *ctx, GLbitfield64 varying_inputs);
+_mesa_set_varying_vp_inputs(struct gl_context *ctx, GLbitfield varying_inputs);
 
 
 extern void
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 9934724489..31f1c8339d 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -138,7 +138,7 @@ vertex_attrib_binding(struct gl_context *ctx,
    struct gl_array_attributes *array = &vao->VertexAttrib[attribIndex];
 
    if (array->BufferBindingIndex != bindingIndex) {
-      const GLbitfield64 array_bit = VERT_BIT(attribIndex);
+      const GLbitfield array_bit = VERT_BIT(attribIndex);
 
       if (_mesa_is_bufferobj(vao->BufferBinding[bindingIndex].BufferObj))
          vao->VertexAttribBufferMask |= array_bit;
diff --git a/src/mesa/program/program_parse.y b/src/mesa/program/program_parse.y
index 1bc5f51549..04ec18d840 100644
--- a/src/mesa/program/program_parse.y
+++ b/src/mesa/program/program_parse.y
@@ -2212,7 +2212,7 @@ set_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,
 int
 validate_inputs(struct YYLTYPE *locp, struct asm_parser_state *state)
 {
-   const GLbitfield64 inputs = state->prog->info.inputs_read | state->InputsBound;
+   const GLbitfield inputs = state->prog->info.inputs_read | state->InputsBound;
    GLbitfield ff_inputs = 0;
 
    /* Since Mesa internal attribute indices are different from
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index e3421fa9b5..024d4d6c80 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -299,7 +299,7 @@ recalculate_input_bindings(struct gl_context *ctx)
    const struct gl_array_attributes *array = ctx->Array.VAO->VertexAttrib;
    struct gl_vertex_array *vertexAttrib = ctx->Array.VAO->_VertexAttrib;
    const struct gl_vertex_array **inputs = &exec->array.inputs[0];
-   GLbitfield64 const_inputs = 0x0;
+   GLbitfield const_inputs = 0x0;
    GLuint i;
 
    switch (get_program_mode(ctx)) {
diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c
index df34f059b3..34cb4ff72e 100644
--- a/src/mesa/vbo/vbo_exec_draw.c
+++ b/src/mesa/vbo/vbo_exec_draw.c
@@ -177,7 +177,7 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
    struct gl_vertex_array *arrays = exec->vtx.arrays;
    const GLuint *map;
    GLuint attr;
-   GLbitfield64 varying_inputs = 0x0;
+   GLbitfield varying_inputs = 0x0;
    bool swap_pos = false;
 
    /* Install the default (ie Current) attributes first, then overlay
diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c
index 8a4b659955..2a20bb8f05 100644
--- a/src/mesa/vbo/vbo_save_draw.c
+++ b/src/mesa/vbo/vbo_save_draw.c
@@ -141,7 +141,7 @@ static void vbo_bind_vertex_list(struct gl_context *ctx,
    GLuint attr;
    GLubyte node_attrsz[VBO_ATTRIB_MAX];  /* copy of node->attrsz[] */
    GLenum node_attrtype[VBO_ATTRIB_MAX];  /* copy of node->attrtype[] */
-   GLbitfield64 varying_inputs = 0x0;
+   GLbitfield varying_inputs = 0x0;
 
    memcpy(node_attrsz, node->attrsz, sizeof(node->attrsz));
    memcpy(node_attrtype, node->attrtype, sizeof(node->attrtype));




More information about the mesa-commit mailing list