mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[d3d9] Allow multisampled depth stencil resolves in StretchRect
Fixes a crash in some Source 2 titles
This commit is contained in:
parent
19842532c2
commit
a9040c5cce
@ -943,24 +943,36 @@ namespace dxvk {
|
|||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fastPath) {
|
auto EmitResolveCS = [&](const Rc<DxvkImage>& resolveDst) {
|
||||||
if (needsResolve) {
|
VkImageResolve region;
|
||||||
VkImageResolve region;
|
region.srcSubresource = blitInfo.srcSubresource;
|
||||||
region.srcSubresource = blitInfo.srcSubresource;
|
region.srcOffset = blitInfo.srcOffsets[0];
|
||||||
region.srcOffset = blitInfo.srcOffsets[0];
|
region.dstSubresource = blitInfo.dstSubresource;
|
||||||
region.dstSubresource = blitInfo.dstSubresource;
|
region.dstOffset = blitInfo.dstOffsets[0];
|
||||||
region.dstOffset = blitInfo.dstOffsets[0];
|
region.extent = srcCopyExtent;
|
||||||
region.extent = srcCopyExtent;
|
|
||||||
|
EmitCs([
|
||||||
EmitCs([
|
cDstImage = resolveDst,
|
||||||
cDstImage = dstImage,
|
cSrcImage = srcImage,
|
||||||
cSrcImage = srcImage,
|
cRegion = region
|
||||||
cRegion = region
|
] (DxvkContext* ctx) {
|
||||||
] (DxvkContext* ctx) {
|
if (cRegion.srcSubresource.aspectMask != (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
|
||||||
ctx->resolveImage(
|
ctx->resolveImage(
|
||||||
cDstImage, cSrcImage, cRegion,
|
cDstImage, cSrcImage, cRegion,
|
||||||
VK_FORMAT_UNDEFINED);
|
VK_FORMAT_UNDEFINED);
|
||||||
});
|
}
|
||||||
|
else {
|
||||||
|
ctx->resolveDepthStencilImage(
|
||||||
|
cDstImage, cSrcImage, cRegion,
|
||||||
|
VK_RESOLVE_MODE_AVERAGE_BIT_KHR,
|
||||||
|
VK_RESOLVE_MODE_AVERAGE_BIT_KHR);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
if (fastPath) {
|
||||||
|
if (needsResolve) {
|
||||||
|
EmitResolveCS(dstImage);
|
||||||
} else {
|
} else {
|
||||||
EmitCs([
|
EmitCs([
|
||||||
cDstImage = dstImage,
|
cDstImage = dstImage,
|
||||||
@ -982,23 +994,7 @@ namespace dxvk {
|
|||||||
if (needsResolve) {
|
if (needsResolve) {
|
||||||
auto resolveSrc = srcTextureInfo->GetResolveImage();
|
auto resolveSrc = srcTextureInfo->GetResolveImage();
|
||||||
|
|
||||||
VkImageResolve region;
|
EmitResolveCS(resolveSrc);
|
||||||
region.srcSubresource = blitInfo.srcSubresource;
|
|
||||||
region.srcOffset = blitInfo.srcOffsets[0];
|
|
||||||
region.dstSubresource = blitInfo.srcSubresource;
|
|
||||||
region.dstOffset = blitInfo.srcOffsets[0];
|
|
||||||
region.extent = srcCopyExtent;
|
|
||||||
|
|
||||||
EmitCs([
|
|
||||||
cDstImage = resolveSrc,
|
|
||||||
cSrcImage = srcImage,
|
|
||||||
cRegion = region
|
|
||||||
] (DxvkContext* ctx) {
|
|
||||||
ctx->resolveImage(
|
|
||||||
cDstImage, cSrcImage, cRegion,
|
|
||||||
VK_FORMAT_UNDEFINED);
|
|
||||||
});
|
|
||||||
|
|
||||||
srcImage = resolveSrc;
|
srcImage = resolveSrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user