PDA

View Full Version : Updating GL_ELEMENT_ARRAY_BUFFER causes performance feedback warnings on Intel MESA



saski
09-17-2014, 12:32 PM
Hello,

updating the GL_ELEMENT_ARRAY_BUFFER always causes the performance feedback of the Intel Mesa driver to complain like:
Using a blit copy to avoid stalling on glBufferSubData(0, 216) (0kb) to a busy (0-264) buffer object.

I create the index buffer like this:


glExt_glGenBuffers(1, &id);
glExt_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, id);
glExt_glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)(indices * size),
(GLvoid*)NULL, GL_DYNAMIC_DRAW);


and fill the buffer every frame to render the visible geometry:


glExt_glBufferSubData(GL_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)size,
(GLvoid*)data);


Thet's where performance feedback starts to complain with "Using a blit copy to avoid stalling on glBufferSubData".

Alternatively I've tried to map the buffer with


...
glExt_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->iboid);
idxbuf = glExt_glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
...


where performance feedback also complains with "Stalling on the GPU for mapping a busy buffer object".


Is there anything I may have to do to update GL_ELEMENT_ARRAY_BUFFER without a performance impact?

Regards
Saski

saski
09-18-2014, 12:12 AM
Never mind,


...
glExt_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->iboid);
idxbuf = glExt_glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, offset, locksize,
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
...


silenced the performance feedback messages.