mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-01 19:50:25 +01:00
st: reduce unnecessary calls to pipe->set_vertex_buffers()
This commit is contained in:
parent
8627a14ec8
commit
eb20e2984e
1 changed files with 14 additions and 5 deletions
|
|
@ -409,6 +409,7 @@ setup_non_interleaved_attribs(GLcontext *ctx,
|
||||||
const struct st_vertex_program *vp,
|
const struct st_vertex_program *vp,
|
||||||
const struct gl_client_array **arrays,
|
const struct gl_client_array **arrays,
|
||||||
GLuint max_index,
|
GLuint max_index,
|
||||||
|
GLboolean *userSpace,
|
||||||
struct pipe_vertex_buffer vbuffer[],
|
struct pipe_vertex_buffer vbuffer[],
|
||||||
struct pipe_vertex_element velements[])
|
struct pipe_vertex_element velements[])
|
||||||
{
|
{
|
||||||
|
|
@ -420,6 +421,8 @@ setup_non_interleaved_attribs(GLcontext *ctx,
|
||||||
struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
|
struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
|
||||||
GLsizei stride = arrays[mesaAttr]->StrideB;
|
GLsizei stride = arrays[mesaAttr]->StrideB;
|
||||||
|
|
||||||
|
*userSpace = GL_FALSE;
|
||||||
|
|
||||||
if (bufobj && bufobj->Name) {
|
if (bufobj && bufobj->Name) {
|
||||||
/* Attribute data is in a VBO.
|
/* Attribute data is in a VBO.
|
||||||
* Recall that for VBOs, the gl_client_array->Ptr field is
|
* Recall that for VBOs, the gl_client_array->Ptr field is
|
||||||
|
|
@ -439,6 +442,8 @@ setup_non_interleaved_attribs(GLcontext *ctx,
|
||||||
uint bytes;
|
uint bytes;
|
||||||
/*printf("user-space array %d stride %d\n", attr, stride);*/
|
/*printf("user-space array %d stride %d\n", attr, stride);*/
|
||||||
|
|
||||||
|
*userSpace = GL_TRUE;
|
||||||
|
|
||||||
/* wrap user data */
|
/* wrap user data */
|
||||||
if (arrays[mesaAttr]->Ptr) {
|
if (arrays[mesaAttr]->Ptr) {
|
||||||
/* user's vertex array */
|
/* user's vertex array */
|
||||||
|
|
@ -555,7 +560,7 @@ st_draw_vbo(GLcontext *ctx,
|
||||||
else {
|
else {
|
||||||
/*printf("Draw non-interleaved\n");*/
|
/*printf("Draw non-interleaved\n");*/
|
||||||
setup_non_interleaved_attribs(ctx, vp, arrays, max_index,
|
setup_non_interleaved_attribs(ctx, vp, arrays, max_index,
|
||||||
vbuffer, velements);
|
&userSpace, vbuffer, velements);
|
||||||
num_vbuffers = vp->num_inputs;
|
num_vbuffers = vp->num_inputs;
|
||||||
num_velements = vp->num_inputs;
|
num_velements = vp->num_inputs;
|
||||||
}
|
}
|
||||||
|
|
@ -665,13 +670,17 @@ st_draw_vbo(GLcontext *ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unreference buffers (frees wrapped user-space buffer objects) */
|
/* unreference buffers (frees wrapped user-space buffer objects) */
|
||||||
for (attr = 0; attr < num_vbuffers; attr++) {
|
if (userSpace)
|
||||||
pipe_buffer_reference(pipe->screen, &vbuffer[attr].buffer, NULL);
|
{
|
||||||
assert(!vbuffer[attr].buffer);
|
for (attr = 0; attr < num_vbuffers; attr++) {
|
||||||
|
pipe_buffer_reference(pipe->screen, &vbuffer[attr].buffer, NULL);
|
||||||
|
assert(!vbuffer[attr].buffer);
|
||||||
|
}
|
||||||
|
pipe->set_vertex_buffers(pipe, 0, NULL);
|
||||||
}
|
}
|
||||||
pipe->set_vertex_buffers(pipe, num_vbuffers, vbuffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void st_init_draw( struct st_context *st )
|
void st_init_draw( struct st_context *st )
|
||||||
{
|
{
|
||||||
GLcontext *ctx = st->ctx;
|
GLcontext *ctx = st->ctx;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue