mesa: Factor out index function that will have multiple use.
authorMathias Fröhlich <mathias.froehlich@web.de>
Wed, 3 Apr 2019 10:33:37 +0000 (12:33 +0200)
committerMathias Fröhlich <mathias.froehlich@web.de>
Sat, 4 May 2019 05:39:18 +0000 (07:39 +0200)
For access to glArrayElement methods factor out a function to
get the table lookup index for normalized/integer/double access.
The function will be used in the next patch at least twice.

v2: Use vertex_format_to_index instead of NORM_IDX.

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
src/mesa/main/api_arrayelt.c

index 1c086bbcda41865fad6fca8657aa394edc795d32..0fe9311adaeb971ba5189332c5c2c309a0f82bd6 100644 (file)
@@ -90,6 +90,23 @@ TYPE_IDX(GLenum t)
 }
 
 
 }
 
 
+/*
+ * Convert normalized/integer/double to the range [0, 3].
+ */
+static inline int
+vertex_format_to_index(const struct gl_vertex_format *vformat)
+{
+   if (vformat->Doubles)
+      return 3;
+   else if (vformat->Integer)
+      return 2;
+   else if (vformat->Normalized)
+      return 1;
+   else
+      return 0;
+}
+
+
 bool
 _ae_is_state_dirty(struct gl_context *ctx)
 {
 bool
 _ae_is_state_dirty(struct gl_context *ctx)
 {
@@ -1610,7 +1627,6 @@ _ae_update_state(struct gl_context *ctx)
       if (vao->Enabled & VERT_BIT_GENERIC(i)) {
          struct gl_array_attributes *attribArray =
             &vao->VertexAttrib[VERT_ATTRIB_GENERIC(i)];
       if (vao->Enabled & VERT_BIT_GENERIC(i)) {
          struct gl_array_attributes *attribArray =
             &vao->VertexAttrib[VERT_ATTRIB_GENERIC(i)];
-         GLint intOrNorm;
          at->array = attribArray;
          at->binding = &vao->BufferBinding[attribArray->BufferBindingIndex];
          /* Note: we can't grab the _glapi_Dispatch->VertexAttrib1fvNV
          at->array = attribArray;
          at->binding = &vao->BufferBinding[attribArray->BufferBindingIndex];
          /* Note: we can't grab the _glapi_Dispatch->VertexAttrib1fvNV
@@ -1618,16 +1634,7 @@ _ae_update_state(struct gl_context *ctx)
           * change from one execution of _ae_ArrayElement() to
           * the next.  Doing so caused UT to break.
           */
           * change from one execution of _ae_ArrayElement() to
           * the next.  Doing so caused UT to break.
           */
-         if (at->array->Format.Doubles)
-            intOrNorm = 3;
-         else if (at->array->Format.Integer)
-            intOrNorm = 2;
-         else if (at->array->Format.Normalized)
-            intOrNorm = 1;
-         else
-            intOrNorm = 0;
-
-         at->func = AttribFuncsARB[intOrNorm]
+         at->func = AttribFuncsARB[vertex_format_to_index(&at->array->Format)]
             [at->array->Format.Size-1]
             [TYPE_IDX(at->array->Format.Type)];
 
             [at->array->Format.Size-1]
             [TYPE_IDX(at->array->Format.Type)];