Access to graphics memory mappings on upcoming WOW64 implementation

Georg Lehmann dadschoorse at gmail.com
Mon Apr 25 03:48:59 CDT 2022



On 25.04.22 07:31, Zebediah Figura wrote:
> - We can emulate mappings for everything except coherent memory by 
> manually implementing mapping functions with a separate sysmem location. 
> We can implement persistent mappings this way, too, by copying on a 
> flush, but unfortunately we can't expose GL_ARB_buffer_storage without 
> coherent mappings.
> 
>    [Fortunately d3d doesn't require coherent memory or 
> ARB_buffer_storage, and the Vulkan backend doesn't require coherent 
> memory for map acceleration. The GL backend currently does, but could be 
> made not to. We'd have to add a private extension to use 
> ARB_buffer_storage while not actually marking any maps as coherent. Of 
> course, d3d isn't the only user of GL or Vulkan, and unfortunately 
> ARB_buffer_storage is core in 4.3, so I'm sure there are GL applications 
> out there that rely on it...]
> 

Obvious performance issues of this solution aside, many Vulkan 
applications require coherent memory. There is also this requirement in 
the vk spec:

 > There *must* be at least one memory type with both the 
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and 
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bits set in its propertyFlags.


>    I think we can actually emulate coherent memory as well, by tracking 
> resource bindings and manually flushing on draws. That's a little 
> painful, though.
> 

This is not possible in Vulkan, especially with newer features like 
buffer device address or update after bind.

> - Crazy idea: On Linux, parse /proc/self/maps to allow remapping 
> non-anonymous pages. Combined with mremap(2) or manual emulation, this 
> allows mapping everything except for shared anonymous pages [and I can't 
> imagine that a GPU driver would use those, especially given that the 
> only way to make use of the SHARED flag is fork(2)].
> 
> ἔρρωσθε,
> Zeb
> 



More information about the wine-devel mailing list