Fix some validation errors related to texel block view usage flag and invalid image barrier base level

This commit is contained in:
gdk 2022-04-09 12:03:59 -03:00 committed by riperiperi
parent 03955d6b04
commit 3767cf4ce5
2 changed files with 7 additions and 9 deletions

View file

@ -69,10 +69,13 @@ namespace Ryujinx.Graphics.Vulkan
layers, layers,
levels); levels);
uint copySrcLevel = (uint)srcLevel;
uint copyDstLevel = (uint)dstLevel;
for (int level = 0; level < levels; level++) for (int level = 0; level < levels; level++)
{ {
var srcSl = new ImageSubresourceLayers(srcAspectFlags, (uint)srcLevel, (uint)srcLayer, (uint)layers); var srcSl = new ImageSubresourceLayers(srcAspectFlags, copySrcLevel, (uint)srcLayer, (uint)layers);
var dstSl = new ImageSubresourceLayers(dstAspectFlags, (uint)dstLevel, (uint)dstLayer, (uint)layers); var dstSl = new ImageSubresourceLayers(dstAspectFlags, copyDstLevel, (uint)dstLayer, (uint)layers);
(srcOffsets.Element0, srcOffsets.Element1) = ExtentsToOffset3D(srcRegion, srcInfo.Width, srcInfo.Height, level); (srcOffsets.Element0, srcOffsets.Element1) = ExtentsToOffset3D(srcRegion, srcInfo.Width, srcInfo.Height, level);
(dstOffsets.Element0, dstOffsets.Element1) = ExtentsToOffset3D(dstRegion, dstInfo.Width, dstInfo.Height, level); (dstOffsets.Element0, dstOffsets.Element1) = ExtentsToOffset3D(dstRegion, dstInfo.Width, dstInfo.Height, level);
@ -87,8 +90,8 @@ namespace Ryujinx.Graphics.Vulkan
api.CmdBlitImage(commandBuffer, srcImage, ImageLayout.General, dstImage, ImageLayout.General, 1, region, filter); api.CmdBlitImage(commandBuffer, srcImage, ImageLayout.General, dstImage, ImageLayout.General, 1, region, filter);
srcLevel++; copySrcLevel++;
dstLevel++; copyDstLevel++;
if (srcInfo.Target == Target.Texture3D || dstInfo.Target == Target.Texture3D) if (srcInfo.Target == Target.Texture3D || dstInfo.Target == Target.Texture3D)
{ {

View file

@ -90,11 +90,6 @@ namespace Ryujinx.Graphics.Vulkan
var flags = ImageCreateFlags.ImageCreateMutableFormatBit; var flags = ImageCreateFlags.ImageCreateMutableFormatBit;
if (info.BlockWidth != 1 || info.BlockHeight != 1)
{
flags |= ImageCreateFlags.ImageCreateBlockTexelViewCompatibleBit;
}
bool cubeCompatible = info.Width == info.Height && layers >= 6; bool cubeCompatible = info.Width == info.Height && layers >= 6;
if (type == ImageType.ImageType2D && cubeCompatible) if (type == ImageType.ImageType2D && cubeCompatible)