#ifndef VBO_SAVE_H
#define VBO_SAVE_H
-#include "main/mtypes.h"
#include "vbo.h"
#include "vbo_attrib.h"
* compiled using the fallback opcode mechanism provided by dlist.c.
*/
struct vbo_save_vertex_list {
- GLbitfield64 enabled; /**< mask of enabled vbo arrays. */
- GLubyte attrsz[VBO_ATTRIB_MAX];
- GLenum16 attrtype[VBO_ATTRIB_MAX];
- GLuint vertex_size; /**< size in GLfloats */
struct gl_vertex_array_object *VAO[VP_MODE_MAX];
/* Copy of the final vertex from node->vertex_store->bufferobj.
* map/unmap of the VBO when updating GL current data.
*/
fi_type *current_data;
- GLuint current_size;
- GLuint buffer_offset; /**< in bytes */
- GLuint start_vertex; /**< first vertex used by any primitive */
GLuint vertex_count; /**< number of vertices in this list */
GLuint wrap_count; /* number of copied vertices at start */
struct _mesa_prim *prims;
GLuint prim_count;
- struct vbo_save_vertex_store *vertex_store;
struct vbo_save_primitive_store *prim_store;
};
-/**
- * Is the vertex list's buffer offset an exact multiple of the
- * vertex size (in bytes)? This is used to check for a vertex array /
- * drawing optimization.
- */
-static inline bool
-aligned_vertex_buffer_offset(const struct vbo_save_vertex_list *node)
-{
- unsigned vertex_size = node->vertex_size * sizeof(GLfloat); /* in bytes */
- return vertex_size != 0 && node->buffer_offset % vertex_size == 0;
-}
-
-
/**
* Return the stride in bytes of the display list node.
*/
#define VBO_SAVE_BUFFER_SIZE (256*1024) /* dwords */
#define VBO_SAVE_PRIM_SIZE 128
#define VBO_SAVE_PRIM_MODE_MASK 0x3f
-#define VBO_SAVE_PRIM_WEAK 0x40
-#define VBO_SAVE_PRIM_NO_CURRENT_UPDATE 0x80
-
-#define VBO_SAVE_FALLBACK 0x10000000
-/* Storage to be shared among several vertex_lists.
- */
struct vbo_save_vertex_store {
struct gl_buffer_object *bufferobj;
fi_type *buffer_map;
GLuint used; /**< Number of 4-byte words used in buffer */
- GLuint refcount;
};
+/* Storage to be shared among several vertex_lists.
+ */
struct vbo_save_primitive_store {
struct _mesa_prim prims[VBO_SAVE_PRIM_SIZE];
GLuint used;
struct _mesa_prim *prims;
GLuint prim_count, prim_max;
+ bool no_current_update;
+
struct vbo_save_vertex_store *vertex_store;
struct vbo_save_primitive_store *prim_store;
void vbo_save_init(struct gl_context *ctx);
void vbo_save_destroy(struct gl_context *ctx);
-void vbo_save_fallback(struct gl_context *ctx, GLboolean fallback);
/* save_loopback.c:
*/