wined3d: Use the access flags used to create the bo for persistent maps in wined3d_bo_gl_map().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
cbd324124c
commit
194b47b4fd
|
@ -2711,15 +2711,25 @@ map:
|
||||||
gl_info = context_gl->gl_info;
|
gl_info = context_gl->gl_info;
|
||||||
wined3d_context_gl_bind_bo(context_gl, bo->binding, bo->id);
|
wined3d_context_gl_bind_bo(context_gl, bo->binding, bo->id);
|
||||||
|
|
||||||
if (gl_info->supported[ARB_BUFFER_STORAGE])
|
if (gl_info->supported[ARB_BUFFER_STORAGE] && wined3d_map_persistent())
|
||||||
{
|
{
|
||||||
if ((map_ptr = GL_EXTCALL(glMapBufferRange(bo->binding, 0, bo->size,
|
GLbitfield gl_flags;
|
||||||
GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT | wined3d_resource_gl_map_flags(bo, flags)))))
|
|
||||||
{
|
/* When mapping the bo persistently, we need to use the access flags
|
||||||
if (wined3d_map_persistent())
|
* used to create the bo, instead of the access flags passed to the
|
||||||
|
* map call. Otherwise, if for example the initial map call that
|
||||||
|
* caused the bo to be persistently mapped was a read-only map,
|
||||||
|
* subsequent write access to the bo would be undefined. */
|
||||||
|
gl_flags = bo->flags & ~GL_CLIENT_STORAGE_BIT;
|
||||||
|
gl_flags |= GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT;
|
||||||
|
if (!(gl_flags & GL_MAP_READ_BIT))
|
||||||
|
gl_flags |= GL_MAP_UNSYNCHRONIZED_BIT;
|
||||||
|
if (gl_flags & GL_MAP_WRITE_BIT)
|
||||||
|
gl_flags |= GL_MAP_FLUSH_EXPLICIT_BIT;
|
||||||
|
|
||||||
|
if ((map_ptr = GL_EXTCALL(glMapBufferRange(bo->binding, 0, bo->size, gl_flags))))
|
||||||
bo->b.map_ptr = map_ptr;
|
bo->b.map_ptr = map_ptr;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
|
else if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
|
||||||
{
|
{
|
||||||
map_ptr = GL_EXTCALL(glMapBufferRange(bo->binding, 0, bo->size, wined3d_resource_gl_map_flags(bo, flags)));
|
map_ptr = GL_EXTCALL(glMapBufferRange(bo->binding, 0, bo->size, wined3d_resource_gl_map_flags(bo, flags)));
|
||||||
|
|
Loading…
Reference in New Issue