Match other code in project
This commit is contained in:
parent
9b02fd6dc0
commit
fa801ba472
5 changed files with 26 additions and 24 deletions
|
@ -31,7 +31,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
public readonly bool SupportsShaderStorageImageMultisample;
|
public readonly bool SupportsShaderStorageImageMultisample;
|
||||||
public readonly bool SupportsConditionalRendering;
|
public readonly bool SupportsConditionalRendering;
|
||||||
public readonly bool SupportsExtendedDynamicState;
|
public readonly bool SupportsExtendedDynamicState;
|
||||||
public readonly bool SupportsExtendedDynamicState2;
|
public readonly PhysicalDeviceExtendedDynamicState2FeaturesEXT SupportsExtendedDynamicState2;
|
||||||
public readonly bool SupportsMultiView;
|
public readonly bool SupportsMultiView;
|
||||||
public readonly bool SupportsNullDescriptors;
|
public readonly bool SupportsNullDescriptors;
|
||||||
public readonly bool SupportsPushDescriptors;
|
public readonly bool SupportsPushDescriptors;
|
||||||
|
@ -71,7 +71,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
bool supportsShaderStorageImageMultisample,
|
bool supportsShaderStorageImageMultisample,
|
||||||
bool supportsConditionalRendering,
|
bool supportsConditionalRendering,
|
||||||
bool supportsExtendedDynamicState,
|
bool supportsExtendedDynamicState,
|
||||||
bool supportsExtendedDynamicState2,
|
PhysicalDeviceExtendedDynamicState2FeaturesEXT supportsExtendedDynamicState2,
|
||||||
bool supportsMultiView,
|
bool supportsMultiView,
|
||||||
bool supportsNullDescriptors,
|
bool supportsNullDescriptors,
|
||||||
bool supportsPushDescriptors,
|
bool supportsPushDescriptors,
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
_supportExtDynamic = gd.Capabilities.SupportsExtendedDynamicState;
|
_supportExtDynamic = gd.Capabilities.SupportsExtendedDynamicState;
|
||||||
|
|
||||||
_supportExtDynamic2 = gd.Capabilities.SupportsExtendedDynamicState2;
|
_supportExtDynamic2 = gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2;
|
||||||
|
|
||||||
_newState.Initialize();
|
_newState.Initialize();
|
||||||
}
|
}
|
||||||
|
@ -970,7 +970,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
_newState.LogicOpEnable = logicOpEnable;
|
_newState.LogicOpEnable = logicOpEnable;
|
||||||
|
|
||||||
if (Gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
|
if (Gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2LogicOp)
|
||||||
{
|
{
|
||||||
DynamicState.SetLogicOp(logicOpEnable ? op.Convert() : default);
|
DynamicState.SetLogicOp(logicOpEnable ? op.Convert() : default);
|
||||||
}
|
}
|
||||||
|
@ -993,7 +993,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
public void SetPatchParameters(int vertices, ReadOnlySpan<float> defaultOuterLevel, ReadOnlySpan<float> defaultInnerLevel)
|
public void SetPatchParameters(int vertices, ReadOnlySpan<float> defaultOuterLevel, ReadOnlySpan<float> defaultInnerLevel)
|
||||||
{
|
{
|
||||||
if (Gd.ExtendedDynamicState2Features.ExtendedDynamicState2PatchControlPoints && _newState.HasTessellationControlShader)
|
if (Gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints && _newState.HasTessellationControlShader)
|
||||||
{
|
{
|
||||||
DynamicState.SetPatchControlPoints((uint)vertices);
|
DynamicState.SetPatchControlPoints((uint)vertices);
|
||||||
}
|
}
|
||||||
|
|
|
@ -405,7 +405,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
}
|
}
|
||||||
|
|
||||||
bool supportsExtDynamicState = gd.Capabilities.SupportsExtendedDynamicState;
|
bool supportsExtDynamicState = gd.Capabilities.SupportsExtendedDynamicState;
|
||||||
bool supportsExtDynamicState2 = gd.Capabilities.SupportsExtendedDynamicState2;
|
bool supportsExtDynamicState2 = gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2;
|
||||||
|
|
||||||
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions = &Internal.VertexAttributeDescriptions[0])
|
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions = &Internal.VertexAttributeDescriptions[0])
|
||||||
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions2 = &_vertexAttributeDescriptions2[0])
|
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions2 = &_vertexAttributeDescriptions2[0])
|
||||||
|
@ -429,7 +429,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
PipelineTessellationStateCreateInfo tessellationState;
|
PipelineTessellationStateCreateInfo tessellationState;
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2PatchControlPoints)
|
if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints)
|
||||||
{
|
{
|
||||||
tessellationState.SType = StructureType.PipelineTessellationStateCreateInfo;
|
tessellationState.SType = StructureType.PipelineTessellationStateCreateInfo;
|
||||||
tessellationState.PatchControlPoints = PatchControlPoints;
|
tessellationState.PatchControlPoints = PatchControlPoints;
|
||||||
|
@ -545,7 +545,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
LogicOpEnable = LogicOpEnable,
|
LogicOpEnable = LogicOpEnable,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
|
if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2LogicOp)
|
||||||
{
|
{
|
||||||
colorBlendState.LogicOp = LogicOp;
|
colorBlendState.LogicOp = LogicOp;
|
||||||
}
|
}
|
||||||
|
@ -609,11 +609,11 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
dynamicStates[currentIndex++] = DynamicState.RasterizerDiscardEnableExt;
|
dynamicStates[currentIndex++] = DynamicState.RasterizerDiscardEnableExt;
|
||||||
dynamicStates[currentIndex++] = DynamicState.PrimitiveRestartEnableExt;
|
dynamicStates[currentIndex++] = DynamicState.PrimitiveRestartEnableExt;
|
||||||
|
|
||||||
if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
|
if (gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2LogicOp)
|
||||||
{
|
{
|
||||||
dynamicStates[currentIndex++] = DynamicState.LogicOpExt;
|
dynamicStates[currentIndex++] = DynamicState.LogicOpExt;
|
||||||
}
|
}
|
||||||
if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2PatchControlPoints && HasTessellationControlShader)
|
if (gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints && HasTessellationControlShader)
|
||||||
{
|
{
|
||||||
dynamicStates[currentIndex++] = DynamicState.PatchControlPointsExt;
|
dynamicStates[currentIndex++] = DynamicState.PatchControlPointsExt;
|
||||||
}
|
}
|
||||||
|
@ -643,7 +643,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
RenderPass = renderPass,
|
RenderPass = renderPass,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2PatchControlPoints)
|
if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints)
|
||||||
{
|
{
|
||||||
pipelineCreateInfo.PTessellationState = &tessellationState;
|
pipelineCreateInfo.PTessellationState = &tessellationState;
|
||||||
}
|
}
|
||||||
|
|
|
@ -265,7 +265,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
return InvalidIndex;
|
return InvalidIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Device CreateDevice(Vk api, VulkanPhysicalDevice physicalDevice, uint queueFamilyIndex, uint queueCount, out PhysicalDeviceExtendedDynamicState2FeaturesEXT extendedDynamicState2Features)
|
internal static Device CreateDevice(Vk api, VulkanPhysicalDevice physicalDevice, uint queueFamilyIndex, uint queueCount)
|
||||||
{
|
{
|
||||||
if (queueCount > QueuesCount)
|
if (queueCount > QueuesCount)
|
||||||
{
|
{
|
||||||
|
@ -472,16 +472,12 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
supportedFeaturesExtExtendedDynamicState2.ExtendedDynamicState2,
|
supportedFeaturesExtExtendedDynamicState2.ExtendedDynamicState2,
|
||||||
ExtendedDynamicState2LogicOp =
|
ExtendedDynamicState2LogicOp =
|
||||||
supportedFeaturesExtExtendedDynamicState2.ExtendedDynamicState2LogicOp,
|
supportedFeaturesExtExtendedDynamicState2.ExtendedDynamicState2LogicOp,
|
||||||
ExtendedDynamicState2PatchControlPoints = supportedFeaturesExtExtendedDynamicState2
|
ExtendedDynamicState2PatchControlPoints = false,
|
||||||
.ExtendedDynamicState2PatchControlPoints,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pExtendedFeatures = &featuresExtendedDynamicState2;
|
pExtendedFeatures = &featuresExtendedDynamicState2;
|
||||||
}
|
}
|
||||||
|
|
||||||
extendedDynamicState2Features = supportedFeaturesExtExtendedDynamicState2;
|
|
||||||
|
|
||||||
|
|
||||||
var featuresVk11 = new PhysicalDeviceVulkan11Features
|
var featuresVk11 = new PhysicalDeviceVulkan11Features
|
||||||
{
|
{
|
||||||
SType = StructureType.PhysicalDeviceVulkan11Features,
|
SType = StructureType.PhysicalDeviceVulkan11Features,
|
||||||
|
|
|
@ -100,9 +100,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
public bool PreferThreading => true;
|
public bool PreferThreading => true;
|
||||||
|
|
||||||
public PhysicalDeviceExtendedDynamicState2FeaturesEXT ExtendedDynamicState2Features;
|
|
||||||
|
|
||||||
|
|
||||||
public event EventHandler<ScreenCaptureImageInfo> ScreenCaptured;
|
public event EventHandler<ScreenCaptureImageInfo> ScreenCaptured;
|
||||||
|
|
||||||
public VulkanRenderer(Vk api, Func<Instance, Vk, SurfaceKHR> surfaceFunc, Func<string[]> requiredExtensionsFunc, string preferredGpuId)
|
public VulkanRenderer(Vk api, Func<Instance, Vk, SurfaceKHR> surfaceFunc, Func<string[]> requiredExtensionsFunc, string preferredGpuId)
|
||||||
|
@ -232,6 +229,11 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
SType = StructureType.PhysicalDevicePrimitiveTopologyListRestartFeaturesExt,
|
SType = StructureType.PhysicalDevicePrimitiveTopologyListRestartFeaturesExt,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PhysicalDeviceExtendedDynamicState2FeaturesEXT featuresExtendedDynamicState2 = new()
|
||||||
|
{
|
||||||
|
SType = StructureType.PhysicalDeviceExtendedDynamicState2FeaturesExt,
|
||||||
|
};
|
||||||
|
|
||||||
PhysicalDeviceRobustness2FeaturesEXT featuresRobustness2 = new()
|
PhysicalDeviceRobustness2FeaturesEXT featuresRobustness2 = new()
|
||||||
{
|
{
|
||||||
SType = StructureType.PhysicalDeviceRobustness2FeaturesExt,
|
SType = StructureType.PhysicalDeviceRobustness2FeaturesExt,
|
||||||
|
@ -262,6 +264,12 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
features2.PNext = &featuresPrimitiveTopologyListRestart;
|
features2.PNext = &featuresPrimitiveTopologyListRestart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState2.ExtensionName))
|
||||||
|
{
|
||||||
|
featuresExtendedDynamicState2.PNext = features2.PNext;
|
||||||
|
features2.PNext = &featuresExtendedDynamicState2;
|
||||||
|
}
|
||||||
|
|
||||||
if (_physicalDevice.IsDeviceExtensionPresent("VK_EXT_robustness2"))
|
if (_physicalDevice.IsDeviceExtensionPresent("VK_EXT_robustness2"))
|
||||||
{
|
{
|
||||||
featuresRobustness2.PNext = features2.PNext;
|
featuresRobustness2.PNext = features2.PNext;
|
||||||
|
@ -395,7 +403,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
features2.Features.ShaderStorageImageMultisample,
|
features2.Features.ShaderStorageImageMultisample,
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtConditionalRendering.ExtensionName),
|
_physicalDevice.IsDeviceExtensionPresent(ExtConditionalRendering.ExtensionName),
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState.ExtensionName),
|
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState.ExtensionName),
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState2.ExtensionName),
|
featuresExtendedDynamicState2,
|
||||||
features2.Features.MultiViewport && !(IsMoltenVk && Vendor == Vendor.Amd), // Workaround for AMD on MoltenVK issue
|
features2.Features.MultiViewport && !(IsMoltenVk && Vendor == Vendor.Amd), // Workaround for AMD on MoltenVK issue
|
||||||
featuresRobustness2.NullDescriptor || IsMoltenVk,
|
featuresRobustness2.NullDescriptor || IsMoltenVk,
|
||||||
supportsPushDescriptors && !IsMoltenVk,
|
supportsPushDescriptors && !IsMoltenVk,
|
||||||
|
@ -460,9 +468,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
var queueFamilyIndex = VulkanInitialization.FindSuitableQueueFamily(Api, _physicalDevice, _surface, out uint maxQueueCount);
|
var queueFamilyIndex = VulkanInitialization.FindSuitableQueueFamily(Api, _physicalDevice, _surface, out uint maxQueueCount);
|
||||||
|
|
||||||
_device = VulkanInitialization.CreateDevice(Api, _physicalDevice, queueFamilyIndex, maxQueueCount, out PhysicalDeviceExtendedDynamicState2FeaturesEXT extendedDynamicState2Features);
|
_device = VulkanInitialization.CreateDevice(Api, _physicalDevice, queueFamilyIndex, maxQueueCount);
|
||||||
|
|
||||||
ExtendedDynamicState2Features = extendedDynamicState2Features;
|
|
||||||
|
|
||||||
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrSwapchain swapchainApi))
|
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrSwapchain swapchainApi))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue