Currently, we set up both vertex elements and buffers at the same time, and thus can trivially specify constant frequency where stride is 0.
This allows drivers to improve performance by taking advantage of the hint in the vertex elements CSO. --- src/mesa/state_tracker/st_draw.c | 6 ++++-- src/mesa/state_tracker/st_draw_feedback.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 2fe242b..1c69e79 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -388,7 +388,8 @@ setup_interleaved_attribs(GLcontext *ctx, velements[attr].src_offset = (unsigned) (arrays[mesaAttr]->Ptr - offset0); - velements[attr].frequency = PIPE_ELEMENT_FREQUENCY_PER_VERTEX; + velements[attr].frequency = stride ? PIPE_ELEMENT_FREQUENCY_PER_VERTEX + : PIPE_ELEMENT_FREQUENCY_CONSTANT; velements[attr].instance_divisor = 0; velements[attr].vertex_buffer_index = 0; velements[attr].src_format = @@ -484,7 +485,8 @@ setup_non_interleaved_attribs(GLcontext *ctx, /* common-case setup */ vbuffer[attr].stride = stride; /* in bytes */ vbuffer[attr].max_index = max_index; - velements[attr].frequency = PIPE_ELEMENT_FREQUENCY_PER_VERTEX; + velements[attr].frequency = stride ? PIPE_ELEMENT_FREQUENCY_PER_VERTEX + : PIPE_ELEMENT_FREQUENCY_CONSTANT; velements[attr].instance_divisor = 0; velements[attr].vertex_buffer_index = attr; velements[attr].src_format diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c index 564732e..17a71cd 100644 --- a/src/mesa/state_tracker/st_draw_feedback.c +++ b/src/mesa/state_tracker/st_draw_feedback.c @@ -180,7 +180,8 @@ st_feedback_draw_vbo(GLcontext *ctx, /* common-case setup */ vbuffers[attr].stride = arrays[mesaAttr]->StrideB; /* in bytes */ vbuffers[attr].max_index = max_index; - velements[attr].frequency = PIPE_ELEMENT_FREQUENCY_PER_VERTEX; + velements[attr].frequency = vbuffers[attr].stride ? PIPE_ELEMENT_FREQUENCY_PER_VERTEX + : PIPE_ELEMENT_FREQUENCY_CONSTANT; velements[attr].instance_divisor = 0; velements[attr].vertex_buffer_index = attr; velements[attr].src_format = -- 1.7.0.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev