mesa: allow buffers to be mapped multiple times
authorMarek Olšák <marek.olsak@amd.com>
Thu, 6 Feb 2014 18:24:23 +0000 (19:24 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 25 Feb 2014 15:07:33 +0000 (16:07 +0100)
commitdca350201e00c7cf1cfb009158f4abf27fbc96d2
tree8e331dfaa4ab2b623ee559f14fb1f678be6ba5df
parent86e68b0f1f7f5ff58b38653978acaa736ae3d01c
mesa: allow buffers to be mapped multiple times

OpenGL allows a buffer to be mapped only once, but we also map buffers
internally, e.g. in the software primitive restart fallback, for PBOs,
vbo_get_minmax_index, etc. This has always been a problem, but it will
be a bigger problem with persistent buffer mappings, which will prevent
all Mesa functions from mapping buffers for internal purposes.

This adds a driver interface to core Mesa which supports multiple buffer
mappings and allows 2 mappings: one for the GL user and one for Mesa.

Note that Gallium supports an unlimited number of buffer and texture
mappings, so it's not really an issue for Gallium.

v2: fix unmapping in xm_dd.c, remove the GL errors there
v3: fix the intel driver (by Fredrik)

Reviewed-by: Fredrik Höglund <fredrik@kde.org>
31 files changed:
src/mesa/drivers/dri/i915/intel_buffer_objects.c
src/mesa/drivers/dri/i915/intel_buffer_objects.h
src/mesa/drivers/dri/i915/intel_pixel_bitmap.c
src/mesa/drivers/dri/i965/brw_draw_upload.c
src/mesa/drivers/dri/i965/intel_buffer_objects.c
src/mesa/drivers/dri/i965/intel_buffer_objects.h
src/mesa/drivers/dri/i965/intel_pixel_bitmap.c
src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c
src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/main/api_arrayelt.c
src/mesa/main/api_validate.c
src/mesa/main/bufferobj.c
src/mesa/main/bufferobj.h
src/mesa/main/dd.h
src/mesa/main/dlist.c
src/mesa/main/mtypes.h
src/mesa/main/pbo.c
src/mesa/main/shared.c
src/mesa/main/texgetimage.c
src/mesa/state_tracker/st_cb_bufferobjects.c
src/mesa/state_tracker/st_cb_bufferobjects.h
src/mesa/tnl/t_draw.c
src/mesa/vbo/vbo_exec_api.c
src/mesa/vbo/vbo_exec_array.c
src/mesa/vbo/vbo_exec_draw.c
src/mesa/vbo/vbo_primitive_restart.c
src/mesa/vbo/vbo_rebase.c
src/mesa/vbo/vbo_save_api.c
src/mesa/vbo/vbo_save_draw.c
src/mesa/vbo/vbo_split_copy.c