Access to graphics memory mappings on upcoming WOW64 implementation
Zebediah Figura
zfigura at codeweavers.com
Mon Apr 25 13:21:17 CDT 2022
On 4/25/22 03:48, Georg Lehmann wrote:
>
>
> 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.
Right, I should clarify, the problem isn't supporting coherent memory,
but rather device-visible coherent memory.
Unfortunately, it seems that Vulkan requires this as well. From the
Vulkan 1.0.211 specification § 12.6, regarding
vkGetBufferMemoryRequirements():
If buffer is a VkBuffer not created with the
VK_BUFFER_CREATE_SPARSE_BINDING_BIT bit set, or if image is linear
image, then the memoryTypeBits member always contains at least one bit
set corresponding to a VkMemoryType with a propertyFlags that has both
the VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit and the
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit set. In other words, mappable
coherent memory can always be attached to these objects.
Obviously tracking things manually will hurt performance in some
applications, but I mention it since we may (or may not!) need a
fallback, in order to guarantee we have *some* way of correctly
emulating WoW64 maps. Personally I think it's better not to require
WoW64 emulation in such cases.
>
>
>> 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.
Interesting. What extensions do these correspond to?
More information about the wine-devel
mailing list