vbo: also map the immediate mode buffer for read
authorMarek Olšák <marek.olsak@amd.com>
Sat, 1 Feb 2020 01:50:42 +0000 (20:50 -0500)
committerMarge Bot <eric+marge@anholt.net>
Tue, 11 Feb 2020 00:34:57 +0000 (00:34 +0000)
because we read from it sometimes and we want cached reads.

We can only do it with the persistent mapping, because the non-persistent
mapping uses incompatible flags.

Reviewed-by: Mathias Fröhlich <mathias.froehlich@web.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3766>

src/mesa/vbo/vbo_exec_draw.c

index a46a2b035682e8274be9f3c4604e7b956e7e5260..7c3b7ef4330e766787867ada197cfe311c45c351 100644 (file)
@@ -286,8 +286,13 @@ vbo_exec_vtx_map(struct vbo_exec_context *exec)
                         GL_MAP_UNSYNCHRONIZED_BIT;
 
    if (ctx->Extensions.ARB_buffer_storage) {
+      /* We sometimes read from the buffer, so map it for read too.
+       * Only the persistent mapping can do that, because the non-persistent
+       * mapping uses flags that are incompatible with GL_MAP_READ_BIT.
+       */
       accessRange |= GL_MAP_PERSISTENT_BIT |
-                     GL_MAP_COHERENT_BIT;
+                     GL_MAP_COHERENT_BIT |
+                     GL_MAP_READ_BIT;
    } else {
       accessRange |= GL_MAP_INVALIDATE_RANGE_BIT |
                      GL_MAP_FLUSH_EXPLICIT_BIT |
@@ -328,7 +333,8 @@ vbo_exec_vtx_map(struct vbo_exec_context *exec)
                                  GL_MAP_WRITE_BIT |
                                  (ctx->Extensions.ARB_buffer_storage ?
                                     GL_MAP_PERSISTENT_BIT |
-                                    GL_MAP_COHERENT_BIT : 0) |
+                                    GL_MAP_COHERENT_BIT |
+                                    GL_MAP_READ_BIT : 0) |
                                  GL_DYNAMIC_STORAGE_BIT |
                                  GL_CLIENT_STORAGE_BIT,
                                  exec->vtx.bufferobj)) {