Module: Mesa
Branch: main
Commit: adfab9794eaa58e42f43d939554844b049bd3673
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=adfab9794eaa58e42f43d939554844b049bd3673

Author: Marek Olšák <[email protected]>
Date:   Thu Nov 30 22:17:24 2023 -0500

mesa: deduplicate glVertexPointer and glNormalPointer vs DSA error checking

Regular and direct state access functions did the same thing. The new
functions will be used later.

Reviewed-by: Timothy Arceri <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26548>

---

 src/mesa/main/varray.c | 117 +++++++++++++++++++++++--------------------------
 1 file changed, 56 insertions(+), 61 deletions(-)

diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index bfd4e8fccf4..f428e2a7e94 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -1165,6 +1165,25 @@ _lookup_vao_and_vbo_dsa(struct gl_context *ctx,
    return true;
 }
 
+static bool
+error_check_vertex_pointer(struct gl_context *ctx, const char *caller,
+                           struct gl_vertex_array_object *vao,
+                           struct gl_buffer_object *vbo, GLint size,
+                           GLenum type, GLsizei stride, const GLvoid *ptr)
+{
+   GLenum format = GL_RGBA;
+   GLbitfield legalTypes = _mesa_is_gles1(ctx)
+      ? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
+      : (SHORT_BIT | INT_BIT | FLOAT_BIT |
+         DOUBLE_BIT | HALF_BIT |
+         UNSIGNED_INT_2_10_10_10_REV_BIT |
+         INT_2_10_10_10_REV_BIT);
+
+   return validate_array_and_format(ctx, caller, vao, vbo,
+                                    VERT_ATTRIB_POS, legalTypes, 2, 4, size,
+                                    type, stride, GL_FALSE, GL_FALSE, GL_FALSE,
+                                    format, ptr);
+}
 
 void GLAPIENTRY
 _mesa_VertexPointer_no_error(GLint size, GLenum type, GLsizei stride,
@@ -1183,23 +1202,13 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei 
stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
 
-   GLenum format = GL_RGBA;
-   GLbitfield legalTypes = _mesa_is_gles1(ctx)
-      ? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
-      : (SHORT_BIT | INT_BIT | FLOAT_BIT |
-         DOUBLE_BIT | HALF_BIT |
-         UNSIGNED_INT_2_10_10_10_REV_BIT |
-         INT_2_10_10_10_REV_BIT);
-
-   if (!validate_array_and_format(ctx, "glVertexPointer",
-                                  ctx->Array.VAO, ctx->Array.ArrayBufferObj,
-                                  VERT_ATTRIB_POS, legalTypes, 2, 4, size,
-                                  type, stride, GL_FALSE, GL_FALSE, GL_FALSE,
-                                  format, ptr))
+   if (!error_check_vertex_pointer(ctx, "glVertexPointer", ctx->Array.VAO,
+                                   ctx->Array.ArrayBufferObj, size, type,
+                                   stride, ptr))
       return;
 
    update_array(ctx, ctx->Array.VAO, ctx->Array.ArrayBufferObj,
-                VERT_ATTRIB_POS, format, 4, size, type, stride,
+                VERT_ATTRIB_POS, GL_RGBA, 4, size, type, stride,
                 GL_FALSE, GL_FALSE, GL_FALSE, ptr);
 }
 
@@ -1209,15 +1218,6 @@ _mesa_VertexArrayVertexOffsetEXT(GLuint vaobj, GLuint 
buffer, GLint size,
                                  GLenum type, GLsizei stride, GLintptr offset)
 {
    GET_CURRENT_CONTEXT(ctx);
-
-   GLenum format = GL_RGBA;
-   GLbitfield legalTypes = _mesa_is_gles1(ctx)
-      ? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
-      : (SHORT_BIT | INT_BIT | FLOAT_BIT |
-         DOUBLE_BIT | HALF_BIT |
-         UNSIGNED_INT_2_10_10_10_REV_BIT |
-         INT_2_10_10_10_REV_BIT);
-
    struct gl_vertex_array_object* vao;
    struct gl_buffer_object* vbo;
 
@@ -1226,19 +1226,36 @@ _mesa_VertexArrayVertexOffsetEXT(GLuint vaobj, GLuint 
buffer, GLint size,
                                 "glVertexArrayVertexOffsetEXT"))
       return;
 
-   if (!validate_array_and_format(ctx, "glVertexArrayVertexOffsetEXT",
-                                  vao, vbo,
-                                  VERT_ATTRIB_POS, legalTypes, 2, 4, size,
-                                  type, stride, GL_FALSE, GL_FALSE, GL_FALSE,
-                                  format, (void*) offset))
+   if (!error_check_vertex_pointer(ctx, "glVertexArrayVertexOffsetEXT", vao,
+                                   vbo, size, type, stride, (void*)offset))
       return;
 
    update_array(ctx, vao, vbo,
-                VERT_ATTRIB_POS, format, 4, size, type, stride,
+                VERT_ATTRIB_POS, GL_RGBA, 4, size, type, stride,
                 GL_FALSE, GL_FALSE, GL_FALSE, (void*) offset);
 }
 
 
+static bool
+error_check_normal_pointer(struct gl_context *ctx, const char *caller,
+                           struct gl_vertex_array_object *vao,
+                           struct gl_buffer_object *vbo, GLenum type,
+                           GLsizei stride, const GLvoid *ptr)
+{
+   GLenum format = GL_RGBA;
+   const GLbitfield legalTypes = _mesa_is_gles1(ctx)
+      ? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
+      : (BYTE_BIT | SHORT_BIT | INT_BIT |
+         HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
+         UNSIGNED_INT_2_10_10_10_REV_BIT |
+         INT_2_10_10_10_REV_BIT);
+
+   return validate_array_and_format(ctx, caller, vao, vbo,
+                                    VERT_ATTRIB_NORMAL, legalTypes, 3, 3, 3,
+                                    type, stride, GL_TRUE, GL_FALSE,
+                                    GL_FALSE, format, ptr);
+}
+
 void GLAPIENTRY
 _mesa_NormalPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr )
 {
@@ -1255,23 +1272,13 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const 
GLvoid *ptr )
 {
    GET_CURRENT_CONTEXT(ctx);
 
-   GLenum format = GL_RGBA;
-   const GLbitfield legalTypes = _mesa_is_gles1(ctx)
-      ? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
-      : (BYTE_BIT | SHORT_BIT | INT_BIT |
-         HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
-         UNSIGNED_INT_2_10_10_10_REV_BIT |
-         INT_2_10_10_10_REV_BIT);
-
-   if (!validate_array_and_format(ctx, "glNormalPointer",
-                                  ctx->Array.VAO, ctx->Array.ArrayBufferObj,
-                                  VERT_ATTRIB_NORMAL, legalTypes, 3, 3, 3,
-                                  type, stride, GL_TRUE, GL_FALSE,
-                                  GL_FALSE, format, ptr))
-      return;
+   if (!error_check_normal_pointer(ctx, "glNormalPointer", ctx->Array.VAO,
+                                   ctx->Array.ArrayBufferObj, type, stride,
+                                   ptr))
+       return;
 
    update_array(ctx, ctx->Array.VAO, ctx->Array.ArrayBufferObj,
-                VERT_ATTRIB_NORMAL, format, 3, 3, type, stride, GL_TRUE,
+                VERT_ATTRIB_NORMAL, GL_RGBA, 3, 3, type, stride, GL_TRUE,
                 GL_FALSE, GL_FALSE, ptr);
 }
 
@@ -1281,32 +1288,20 @@ _mesa_VertexArrayNormalOffsetEXT(GLuint vaobj, GLuint 
buffer, GLenum type,
                                  GLsizei stride, GLintptr offset)
 {
    GET_CURRENT_CONTEXT(ctx);
-
-   GLenum format = GL_RGBA;
-   const GLbitfield legalTypes = _mesa_is_gles1(ctx)
-      ? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
-      : (BYTE_BIT | SHORT_BIT | INT_BIT |
-         HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
-         UNSIGNED_INT_2_10_10_10_REV_BIT |
-         INT_2_10_10_10_REV_BIT);
-
    struct gl_vertex_array_object* vao;
    struct gl_buffer_object* vbo;
 
    if (!_lookup_vao_and_vbo_dsa(ctx, vaobj, buffer, offset,
                                 &vao, &vbo,
-                                "glNormalPointer"))
+                                "glVertexArrayNormalOffsetEXT"))
       return;
 
-   if (!validate_array_and_format(ctx, "glNormalPointer",
-                                  vao, vbo,
-                                  VERT_ATTRIB_NORMAL, legalTypes, 3, 3, 3,
-                                  type, stride, GL_TRUE, GL_FALSE,
-                                  GL_FALSE, format, (void*) offset))
-      return;
+   if (!error_check_normal_pointer(ctx, "glVertexArrayNormalOffsetEXT",
+                                   vao, vbo, type, stride, (void*)offset))
+       return;
 
    update_array(ctx, vao, vbo,
-                VERT_ATTRIB_NORMAL, format, 3, 3, type, stride, GL_TRUE,
+                VERT_ATTRIB_NORMAL, GL_RGBA, 3, 3, type, stride, GL_TRUE,
                 GL_FALSE, GL_FALSE, (void*) offset);
 }
 

Reply via email to