Skip to content

virgl: fix sync issue regarding discard/unsync transfers

Chia-I Wu requested to merge olv/mesa:virgl-transfer-fix into master

GL_MAP_INVALIDATE_BUFFER_BIT cannot be treated as GL_MAP_INVALIDATE_RANGE_BIT naively. When we run into

ptr = glMapBufferRange(buf, 0, size,
        GL_WRITE_BIT|GL_MAP_INVALIDATE_BUFFER_BIT);
memcpy(ptr, data1, size);
glUnmapBuffer(buf);
ptr = glMapBufferRange(buf, size, size,
        GL_WRITE_BIT|GL_MAP_UNSYNCHRONIZED_BIT);
memcpy(ptr, data2, size);
glUnmapBuffer(buf);

we never want data1 to be copy_transfer'ed. Because that would mean that data2 might overwrite valid data.

CC @afrantzis @gurchetansingh

Edited by Chia-I Wu

Merge request reports