diff options
Diffstat (limited to 'meta-uhmi/meta-rvgpu/recipes-graphics/mesa-virtio/files/0001-glBufferData-Update-resource-backing-memory.patch')
-rw-r--r-- | meta-uhmi/meta-rvgpu/recipes-graphics/mesa-virtio/files/0001-glBufferData-Update-resource-backing-memory.patch | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/meta-uhmi/meta-rvgpu/recipes-graphics/mesa-virtio/files/0001-glBufferData-Update-resource-backing-memory.patch b/meta-uhmi/meta-rvgpu/recipes-graphics/mesa-virtio/files/0001-glBufferData-Update-resource-backing-memory.patch deleted file mode 100644 index f146c54f..00000000 --- a/meta-uhmi/meta-rvgpu/recipes-graphics/mesa-virtio/files/0001-glBufferData-Update-resource-backing-memory.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 6e23c8970762309d3f2b88f252333b2492aacd28 Mon Sep 17 00:00:00 2001 -From: Andrii Pauk <Andrii.Pauk@opensynergy.com> -Date: Sat, 27 Feb 2021 17:42:00 +0200 -Subject: [PATCH] glBufferData: Update resource backing memory. - -Update buffer backing memory on buffer initialization with data. -This is workaround for UHMI project, where -VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D command is not implemented. - -The problem is in the following use-case: -1) glBufferData --- reserves guest memory "backing" for resource, -but doesn't fill it with data. Instead, data is serialized into -virgl internal command and sent using VIRTIO_GPU_CMD_SUBMIT_3D -comand. This command is opaque for rproxy/rvdds and serialized cmd buffer -is just forwarded to virglrenderer, where it is deserialized and -used for initialization of internal "gpu" memory with this data. -2) glMapBuffer --- this calls TRANSFER_FROM_HOST_3D, which asks host/rproxy--> -rvdds/virglrenderer to update backing memory (on source) with buffer data. -And further this backing memory is mapped to guest application. -In case of UHMI, TRANSFER_FROM_HOST_3D is not implemented, thus the memory is -not "initialized". -3) Modify buffer memory, but not whole memory, just some chunks. -4) glUnmapBuffer --- this will trigger VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D -command, which will send to target whole buffer memory and will overwrite -previous memory. It's ok for modified in step 3 memory, but other is -just garbage (I always saw zero filled memory). - -The above scenario produces artifacts on buffer-scene of glmark, in case of -"update-method=map", which forces glmark to use 1-4 flow. - -As a workaround, fill buffer backing memory with data on step 1. - -Issue: EXDCLXXII-420 - -Upstream-Status: Pending ---- - src/gallium/auxiliary/util/u_inlines.h | 21 +++++++++++++++++++++ - src/mesa/state_tracker/st_cb_bufferobjects.c | 4 +++- - 2 files changed, 24 insertions(+), 1 deletion(-) - -diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h -index dee6f8f..4745f7b 100644 ---- a/src/gallium/auxiliary/util/u_inlines.h -+++ b/src/gallium/auxiliary/util/u_inlines.h -@@ -462,6 +462,27 @@ pipe_buffer_read(struct pipe_context *pipe, - pipe_buffer_unmap(pipe, src_transfer); - } - -+static inline void -+pipe_buffer_update_backing(struct pipe_context *pipe, -+ struct pipe_resource *buf, -+ unsigned offset, -+ unsigned size, -+ void *data) -+{ -+ struct pipe_transfer *src_transfer; -+ ubyte *map; -+ -+ map = (ubyte *) pipe_buffer_map_range(pipe, -+ buf, -+ offset, size, -+ PIPE_TRANSFER_WRITE, -+ &src_transfer); -+ if (!map) -+ return; -+ -+ memcpy(map, data, size); -+ pipe_buffer_unmap(pipe, src_transfer); -+} - - /** - * Map a resource for reading/writing. -diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c -index 5ebe94f..cb33c8c 100644 ---- a/src/mesa/state_tracker/st_cb_bufferobjects.c -+++ b/src/mesa/state_tracker/st_cb_bufferobjects.c -@@ -343,8 +343,10 @@ bufferobj_data(struct gl_context *ctx, - else { - st_obj->buffer = screen->resource_create(screen, &buffer); - -- if (st_obj->buffer && data) -+ if (st_obj->buffer && data) { - pipe_buffer_write(pipe, st_obj->buffer, 0, size, data); -+ pipe_buffer_update_backing(pipe, st_obj->buffer, 0, size, data); -+ } - } - - if (!st_obj->buffer) { --- -2.7.4 - |