- When a D3D11 texture was created with a mip level count of zero,
DXVK would compute the correct number of mip levels, but not write
them back to the description field.
- Framebuffers would always use the size of the top level, not the
mip levels that were actually attached to the framebuffer.
- Several image copy operations did not handle mip levels other
than the top mip level correctly.
Image mapping now returns the map pointer of a separate
buffer, rather than the the image itself. This fixes
issues with applications that ignore the RowPitch
and/or DepthPitch fields of the MappedSubresource struct.
Unlike VK_KHR_maintenance1, not all D3D11 applications rely on
features provided by this extension. Keeping this optional helps
with RenderDoc, which does not expose the extension.
Four-byte alignment is required in order to avoid illegal
vkCmdCopyBufferToImage calls. We align staging buffer slices to
a full cache line in order to improve performance.
This fixes an issue where the wrong resource would be used for a
descriptor set update if multiple resources have been bound to a
single resource slot.
While these are not being used as of yet, these classes can be
used to implement command stream multithreading in the future.
They are also useful to implement command lists for deferred
contexts, which are a core feature of D3D11.
Fixes a few bottlenecks that were encountered in the Cascading Shadow
Maps demo from the Microsoft SDK. Performance is now slightly better
than wined3d with CSMT, MESA_NO_ERROR and mesa_glthread enabled.
When invalidating a constant buffer, the descriptor was not
updated, which usually led to the wrong resource being used
and could also cause crashes.
This fix also includes resource tracking for shader resources
on the graphics pipeline. The code needs to be made compatible
with the compute pipeline as well.
Command submission now does not synchronize with the device every single
time. Instead, the command list and the fence that was created for it are
added to a queue. A separate thread will then wait for the execution to
complete and return the command list to the device.