mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
mesa: Set FLUSH_EXPLICIT_BIT flags when calling FlushMappedBufferRange.
As prescribed by ARB_map_buffer_range.
This commit is contained in:
parent
18a6f0f1a7
commit
6e09c1fd08
2 changed files with 22 additions and 9 deletions
|
|
@ -237,6 +237,9 @@ st_bufferobj_map_range(GLcontext *ctx, GLenum target,
|
|||
if (access & GL_MAP_READ_BIT)
|
||||
flags |= PIPE_BUFFER_USAGE_CPU_READ;
|
||||
|
||||
if (access & GL_MAP_FLUSH_EXPLICIT_BIT)
|
||||
flags |= PIPE_BUFFER_USAGE_FLUSH_EXPLICIT;
|
||||
|
||||
/* ... other flags ...
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -268,9 +268,14 @@ static void vbo_exec_vtx_unmap( struct vbo_exec_context *exec )
|
|||
void vbo_exec_vtx_map( struct vbo_exec_context *exec )
|
||||
{
|
||||
GLcontext *ctx = exec->ctx;
|
||||
GLenum target = GL_ARRAY_BUFFER_ARB;
|
||||
GLenum access = GL_READ_WRITE_ARB;
|
||||
GLenum usage = GL_STREAM_DRAW_ARB;
|
||||
const GLenum target = GL_ARRAY_BUFFER_ARB;
|
||||
const GLenum access = GL_READ_WRITE_ARB; /* for MapBuffer */
|
||||
const GLenum accessRange = GL_MAP_WRITE_BIT | /* for MapBufferRange */
|
||||
GL_MAP_INVALIDATE_RANGE_BIT |
|
||||
GL_MAP_UNSYNCHRONIZED_BIT |
|
||||
GL_MAP_FLUSH_EXPLICIT_BIT |
|
||||
MESA_MAP_NOWAIT_BIT;
|
||||
const GLenum usage = GL_STREAM_DRAW_ARB;
|
||||
|
||||
if (exec->vtx.bufferobj->Name == 0)
|
||||
return;
|
||||
|
|
@ -290,10 +295,7 @@ void vbo_exec_vtx_map( struct vbo_exec_context *exec )
|
|||
exec->vtx.buffer_used,
|
||||
(VBO_VERT_BUFFER_SIZE -
|
||||
exec->vtx.buffer_used),
|
||||
(GL_MAP_WRITE_BIT |
|
||||
GL_MAP_INVALIDATE_RANGE_BIT |
|
||||
GL_MAP_UNSYNCHRONIZED_BIT |
|
||||
MESA_MAP_NOWAIT_BIT),
|
||||
accessRange,
|
||||
exec->vtx.bufferobj);
|
||||
exec->vtx.buffer_ptr = exec->vtx.buffer_map;
|
||||
}
|
||||
|
|
@ -305,8 +307,16 @@ void vbo_exec_vtx_map( struct vbo_exec_context *exec )
|
|||
VBO_VERT_BUFFER_SIZE,
|
||||
NULL, usage, exec->vtx.bufferobj);
|
||||
|
||||
exec->vtx.buffer_map =
|
||||
(GLfloat *)ctx->Driver.MapBuffer(ctx, target, access, exec->vtx.bufferobj);
|
||||
|
||||
if (ctx->Driver.MapBufferRange)
|
||||
exec->vtx.buffer_map =
|
||||
(GLfloat *)ctx->Driver.MapBufferRange(ctx, target,
|
||||
0, VBO_VERT_BUFFER_SIZE,
|
||||
accessRange,
|
||||
exec->vtx.bufferobj);
|
||||
else
|
||||
exec->vtx.buffer_map =
|
||||
(GLfloat *)ctx->Driver.MapBuffer(ctx, target, access, exec->vtx.bufferobj);
|
||||
exec->vtx.buffer_ptr = exec->vtx.buffer_map;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue