mesa: rename _mesa_free_errors_data
[mesa.git] / src / mesa / main / arrayobj.h
index ee87b4b6ba5b3b21157b6ddd266045008112aeca..9da996014def94193ff665035f4f1a6b7f8c800a 100644 (file)
@@ -50,11 +50,16 @@ extern struct gl_vertex_array_object *
 _mesa_lookup_vao(struct gl_context *ctx, GLuint id);
 
 extern struct gl_vertex_array_object *
-_mesa_lookup_vao_err(struct gl_context *ctx, GLuint id, const char *caller);
+_mesa_lookup_vao_err(struct gl_context *ctx, GLuint id,
+                     bool is_ext_dsa, const char *caller);
 
 extern struct gl_vertex_array_object *
 _mesa_new_vao(struct gl_context *ctx, GLuint name);
 
+extern void
+_mesa_unbind_array_object_vbos(struct gl_context *ctx,
+                               struct gl_vertex_array_object *obj);
+
 extern void
 _mesa_delete_vao(struct gl_context *ctx, struct gl_vertex_array_object *obj);
 
@@ -100,6 +105,24 @@ extern bool
 _mesa_all_buffers_are_unmapped(const struct gl_vertex_array_object *vao);
 
 
+extern void
+_mesa_vao_map_arrays(struct gl_context *ctx, struct gl_vertex_array_object *vao,
+                     GLbitfield access);
+
+extern void
+_mesa_vao_map(struct gl_context *ctx, struct gl_vertex_array_object *vao,
+              GLbitfield access);
+
+
+extern void
+_mesa_vao_unmap_arrays(struct gl_context *ctx,
+                       struct gl_vertex_array_object *vao);
+
+extern void
+_mesa_vao_unmap(struct gl_context *ctx,
+                struct gl_vertex_array_object *vao);
+
+
 /**
  * Array to apply the position/generic0 aliasing map to
  * an attribute value used in vertex processing inputs to an attribute
@@ -192,6 +215,20 @@ _mesa_draw_user_array_bits(const struct gl_context *ctx)
 }
 
 
+/**
+ * Return which enabled vertex attributes have a non-zero instance divisor.
+ *
+ * Needs the a fully updated VAO ready for draw.
+ */
+static inline GLbitfield
+_mesa_draw_nonzero_divisor_bits(const struct gl_context *ctx)
+{
+   const struct gl_vertex_array_object *const vao = ctx->Array._DrawVAO;
+   assert(vao->NewArrays == 0);
+   return vao->_EffEnabledNonZeroDivisor & ctx->Array._DrawVAOEnabledAttribs;
+}
+
+
 /**
  * Return enabled current values attribute bits for draw.
  */
@@ -229,6 +266,17 @@ _mesa_draw_array_attrib(const struct gl_vertex_array_object *vao,
 }
 
 
+/**
+ * Return a vertex array vertex format provided the attribute number.
+ */
+static inline const struct gl_vertex_format *
+_mesa_draw_array_format(const struct gl_vertex_array_object *vao,
+                        gl_vert_attrib attr)
+{
+   return &_mesa_draw_array_attrib(vao, attr)->Format;
+}
+
+
 /**
  * Return vertex buffer binding provided an attribute number.
  */
@@ -289,46 +337,22 @@ _mesa_draw_current_attrib(const struct gl_context *ctx, gl_vert_attrib attr)
 
 
 /**
- * Return true if we have the VERT_ATTRIB_EDGEFLAG array enabled.
- */
-static inline bool
-_mesa_draw_edge_flag_array_enabled(const struct gl_context *ctx)
-{
-   return ctx->Array._DrawVAOEnabledAttribs & VERT_BIT_EDGEFLAG;
-}
-
-
-/**
- * Return the attrib for the given attribute.
+ * Return a current value vertex format provided the attribute number.
  */
-static inline const struct gl_array_attributes*
-_mesa_draw_attrib(const struct gl_context *ctx, gl_vert_attrib attr)
+static inline const struct gl_vertex_format *
+_mesa_draw_current_format(const struct gl_context *ctx, gl_vert_attrib attr)
 {
-   if (ctx->Array._DrawVAOEnabledAttribs & VERT_BIT(attr)) {
-      const struct gl_vertex_array_object *vao = ctx->Array._DrawVAO;
-      return _mesa_draw_array_attrib(vao, attr);
-   } else {
-      return _vbo_current_attrib(ctx, attr);
-   }
+   return &_vbo_current_attrib(ctx, attr)->Format;
 }
 
 
 /**
- * Return the attrib, binding pair for the given attribute.
+ * Return true if we have the VERT_ATTRIB_EDGEFLAG array enabled.
  */
-static inline void
-_mesa_draw_attrib_and_binding(const struct gl_context *ctx, gl_vert_attrib attr,
-                              const struct gl_array_attributes **attrib,
-                              const struct gl_vertex_buffer_binding **binding)
+static inline bool
+_mesa_draw_edge_flag_array_enabled(const struct gl_context *ctx)
 {
-   if (ctx->Array._DrawVAOEnabledAttribs & VERT_BIT(attr)) {
-      const struct gl_vertex_array_object *vao = ctx->Array._DrawVAO;
-      *attrib = _mesa_draw_array_attrib(vao, attr);
-      *binding = _mesa_draw_buffer_binding_from_attrib(vao, *attrib);
-   } else {
-      *attrib = _vbo_current_attrib(ctx, attr);
-      *binding = _vbo_current_binding(ctx);
-   }
+   return ctx->Array._DrawVAOEnabledAttribs & VERT_BIT_EDGEFLAG;
 }