diff options
Diffstat (limited to 'src/mesa/tnl/tnl.h')
-rw-r--r-- | src/mesa/tnl/tnl.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/mesa/tnl/tnl.h b/src/mesa/tnl/tnl.h index e79c4f62048..45052a3a89c 100644 --- a/src/mesa/tnl/tnl.h +++ b/src/mesa/tnl/tnl.h @@ -108,4 +108,84 @@ _tnl_RasterPos(struct gl_context *ctx, const GLfloat vObj[4]); extern void _tnl_validate_shine_tables( struct gl_context *ctx ); + + +/** + * For indirect array drawing: + * + * typedef struct { + * GLuint count; + * GLuint primCount; + * GLuint first; + * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise + * } DrawArraysIndirectCommand; + * + * For indirect indexed drawing: + * + * typedef struct { + * GLuint count; + * GLuint primCount; + * GLuint firstIndex; + * GLint baseVertex; + * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise + * } DrawElementsIndirectCommand; + */ + + +/** + * Draw a number of primitives. + * \param prims array [nr_prims] describing what to draw (prim type, + * vertex count, first index, instance count, etc). + * \param arrays array of vertex arrays for draw + * \param ib index buffer for indexed drawing, NULL for array drawing + * \param index_bounds_valid are min_index and max_index valid? + * \param min_index lowest vertex index used + * \param max_index highest vertex index used + * \param tfb_vertcount if non-null, indicates which transform feedback + * object has the vertex count. + * \param tfb_stream If called via DrawTransformFeedbackStream, specifies the + * vertex stream buffer from which to get the vertex count. + * \param indirect If any prims are indirect, this specifies the buffer + * to find the "DrawArrays/ElementsIndirectCommand" data. + * This may be deprecated in the future + */ +typedef void (*tnl_draw_func)(struct gl_context *ctx, + const struct gl_vertex_array* arrays, + const struct _mesa_prim *prims, + GLuint nr_prims, + const struct _mesa_index_buffer *ib, + GLboolean index_bounds_valid, + GLuint min_index, + GLuint max_index, + struct gl_transform_feedback_object *tfb_vertcount, + unsigned tfb_stream, + struct gl_buffer_object *indirect); + + +/* Utility function to cope with various constraints on tnl modules or + * hardware. This can be used to split an incoming set of arrays and + * primitives against the following constraints: + * - Maximum number of indices in index buffer. + * - Maximum number of vertices referenced by index buffer. + * - Maximum hardware vertex buffer size. + */ +struct split_limits +{ + GLuint max_verts; + GLuint max_indices; + GLuint max_vb_size; /* bytes */ +}; + +void +_tnl_split_prims(struct gl_context *ctx, + const struct gl_vertex_array *arrays, + const struct _mesa_prim *prim, + GLuint nr_prims, + const struct _mesa_index_buffer *ib, + GLuint min_index, + GLuint max_index, + tnl_draw_func draw, + const struct split_limits *limits); + + #endif |