Refactor descriptor count validation

This change retains the same functionality, but in a more performat way. I measured ticks for both the above for loop and the new one, and opted for moving this one down as well since it was slightly slower.
This commit is contained in:
gr3ger 2024-11-16 23:26:06 +01:00
parent 2c43ca4f28
commit 15b4d4c5e3

View file

@ -170,12 +170,6 @@ namespace Ryujinx.Graphics.Vulkan
bool hasBinding3 = uniformUsage.Any(x => x.Binding == 3);
int[] reserved = isCompute ? Array.Empty<int>() : gd.GetPushDescriptorReservedBindings(hasBinding3);
//Prevent the sum of descriptors from exceeding MaxPushDescriptors
if (layout.Sets.First().Descriptors.Where(descriptor => !reserved.Contains(descriptor.Binding)).Sum(descriptor => descriptor.Count) > gd.Capabilities.MaxPushDescriptors)
{
return false;
}
// Can't use any of the reserved usages.
for (int i = 0; i < uniformUsage.Count; i++)
{
@ -188,6 +182,16 @@ namespace Ryujinx.Graphics.Vulkan
return false;
}
}
//Prevent the sum of descriptors from exceeding MaxPushDescriptors
int totalDescriptors = 0;
foreach (ResourceDescriptor desc in layout.Sets.First().Descriptors)
{
if (!reserved.Contains(desc.Binding))
totalDescriptors += desc.Count;
}
if (totalDescriptors > gd.Capabilities.MaxPushDescriptors)
return false;
return true;
}