opengl32: Copy to the wow64 buffer even for write maps.

GL_MAP_WRITE_BIT does not mean that the buffer will be filled, unless an
INVALIDATE bit is explicitly set. The application is free to partially update
the buffer, even if it does not read from it.

Thanks to Aida Jonikienė for doing most of the debugging here.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55045
This commit is contained in:
Zebediah Figura 2023-07-13 18:01:28 -05:00 committed by Alexandre Julliard
parent 1fca47b724
commit 77981d4548

View file

@ -1827,7 +1827,7 @@ static NTSTATUS wow64_map_buffer( TEB *teb, GLint buffer, GLenum target, void *p
{
if (*ret) /* wow64 pointer provided, map buffer to it */
{
if (access & GL_MAP_READ_BIT)
if (!(access & (GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT)))
{
TRACE( "Copying %#zx from buffer at %p to wow64 buffer %p\n", size, ptr, UlongToPtr(*ret) );
memcpy( UlongToPtr(*ret), ptr, size );