From adf35e80d3b3d37b97f0608a5a2f221dbd8c0d64 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 21 Oct 2010 19:03:38 -0600 Subject: gallium: new CAP, state for primitive restart --- src/gallium/docs/source/context.rst | 9 +++++++++ src/gallium/include/pipe/p_defines.h | 1 + src/gallium/include/pipe/p_state.h | 6 ++++++ 3 files changed, 16 insertions(+) (limited to 'src') diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst index 5342fc25dc1..e09a1304c4d 100644 --- a/src/gallium/docs/source/context.rst +++ b/src/gallium/docs/source/context.rst @@ -156,6 +156,15 @@ If there is an index buffer bound, and ``indexed`` field is true, all vertex indices will be looked up in the index buffer. ``min_index``, ``max_index``, and ``index_bias`` apply after index lookup. +When drawing indexed primitives, the primitive restart index can be +used to draw disjoint primitive strips. For example, several separate +line strips can be drawn by designating a special index value as the +restart index. The ``primitive_restart`` flag enables/disables this +feature. The ``restart_index`` field specifies the restart index value. + +When primitive restart is in use, array indexes are compared to the +restart index before adding the index_bias offset. + If a given vertex element has ``instance_divisor`` set to 0, it is said it contains per-vertex data and effective vertex attribute address needs to be recalculated for every index. diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index b6894c09e82..53f7b601ad5 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -452,6 +452,7 @@ enum pipe_cap { PIPE_CAP_BLEND_EQUATION_SEPARATE, PIPE_CAP_SM3, /*< Shader Model, supported */ PIPE_CAP_STREAM_OUTPUT, + PIPE_CAP_PRIMITIVE_RESTART, /** Maximum texture image units accessible from vertex and fragment shaders * combined */ PIPE_CAP_MAX_COMBINED_SAMPLERS, diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index 9a2b31da50d..fc6dba346da 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -457,6 +457,12 @@ struct pipe_draw_info int index_bias; /**< a bias to be added to each index */ unsigned min_index; /**< the min index */ unsigned max_index; /**< the max index */ + + /** + * Primitive restart enable/index (only applies to indexed drawing) + */ + boolean primitive_restart; + unsigned restart_index; }; -- cgit v1.2.3