Bring back old changes and enable Metal Argument Buffers

This commit is contained in:
stossy11 2024-11-23 22:20:59 +11:00
parent 05d1730c17
commit b9163f9fde
8 changed files with 85 additions and 34 deletions

View file

@ -48,32 +48,58 @@ namespace Ryujinx.Graphics.Vulkan
}
public unsafe void UpdateBuffers(int setIndex, int baseBinding, ReadOnlySpan<DescriptorBufferInfo> bufferInfo, DescriptorType type)
{
// DEBUG: Validate inputs
if (bufferInfo.Length == 0)
{
Console.WriteLine("bufferInfo is empty.");
return;
}
// DEBUG: Check if _descriptorSets and _holder.Device are properly initialized
if (_descriptorSets == null || _descriptorSets.Length <= setIndex)
{
throw new Exception("Descriptor set at the specified index is null or out of range.");
}
if (_holder?.Device == null)
{
throw new Exception("_holder.Device is null or uninitialized.");
}
// DEBUG: Check each DescriptorBufferInfo in the span
foreach (var info in bufferInfo)
{
if (info.Buffer.Handle == 0)
{
if (bufferInfo.Length == 0)
{
return;
}
fixed (DescriptorBufferInfo* pBufferInfo = bufferInfo)
{
var writeDescriptorSet = new WriteDescriptorSet
{
SType = StructureType.WriteDescriptorSet,
DstSet = _descriptorSets[setIndex],
DstBinding = (uint)baseBinding,
DescriptorType = type,
DescriptorCount = (uint)bufferInfo.Length,
PBufferInfo = pBufferInfo,
};
_holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
}
throw new Exception("One of the buffers in bufferInfo is null or uninitialized.");
}
}
// Proceed if all checks pass
fixed (DescriptorBufferInfo* pBufferInfo = bufferInfo)
{
var writeDescriptorSet = new WriteDescriptorSet
{
SType = StructureType.WriteDescriptorSet,
DstSet = _descriptorSets[setIndex],
DstBinding = (uint)baseBinding,
DescriptorType = type,
DescriptorCount = (uint)bufferInfo.Length,
PBufferInfo = pBufferInfo
};
// Update descriptor sets
_holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
}
}
public unsafe void UpdateImage(int setIndex, int bindingIndex, DescriptorImageInfo imageInfo, DescriptorType type)
{
if (imageInfo.ImageView.Handle != 0UL)
{
var writeDescriptorSet = new WriteDescriptorSet
{
SType = StructureType.WriteDescriptorSet,
@ -90,11 +116,22 @@ namespace Ryujinx.Graphics.Vulkan
public unsafe void UpdateImages(int setIndex, int baseBinding, ReadOnlySpan<DescriptorImageInfo> imageInfo, DescriptorType type)
{
// DEBUG: Check if imageInfo is Empty
if (imageInfo.Length == 0)
{
Console.WriteLine("Error: imageInfo is empty.");
return;
}
// DEBUG: Check the values inside imageInfo
foreach (var info in imageInfo)
{
Console.WriteLine($"Buffer Handle: {info.ImageView.Handle}");
}
fixed (DescriptorImageInfo* pImageInfo = imageInfo)
{
var writeDescriptorSet = new WriteDescriptorSet
@ -103,10 +140,12 @@ namespace Ryujinx.Graphics.Vulkan
DstSet = _descriptorSets[setIndex],
DstBinding = (uint)baseBinding,
DescriptorType = type,
DescriptorCount = (uint)imageInfo.Length,
DescriptorCount = (uint)1,
PImageInfo = pImageInfo,
};
_holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
}
}