Revert Silk.NET to main branch version.
Remove VK_EXT_extended_dynamic_state3 functionality until later PR
This commit is contained in:
parent
fb4ef3347a
commit
f43413f374
7 changed files with 46 additions and 386 deletions
|
@ -39,9 +39,9 @@
|
||||||
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
||||||
<PackageVersion Include="shaderc.net" Version="0.1.0" />
|
<PackageVersion Include="shaderc.net" Version="0.1.0" />
|
||||||
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
||||||
<PackageVersion Include="Silk.NET.Vulkan" Version="2.21.0" />
|
<PackageVersion Include="Silk.NET.Vulkan" Version="2.16.0" />
|
||||||
<PackageVersion Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.21.0" />
|
<PackageVersion Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.16.0" />
|
||||||
<PackageVersion Include="Silk.NET.Vulkan.Extensions.KHR" Version="2.21.0" />
|
<PackageVersion Include="Silk.NET.Vulkan.Extensions.KHR" Version="2.16.0" />
|
||||||
<PackageVersion Include="SixLabors.ImageSharp" Version="2.1.8" />
|
<PackageVersion Include="SixLabors.ImageSharp" Version="2.1.8" />
|
||||||
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0" />
|
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0" />
|
||||||
<PackageVersion Include="SPB" Version="0.0.4-build32" />
|
<PackageVersion Include="SPB" Version="0.0.4-build32" />
|
||||||
|
@ -49,4 +49,4 @@
|
||||||
<PackageVersion Include="System.Management" Version="8.0.0" />
|
<PackageVersion Include="System.Management" Version="8.0.0" />
|
||||||
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -32,7 +32,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
public readonly bool SupportsConditionalRendering;
|
public readonly bool SupportsConditionalRendering;
|
||||||
public readonly bool SupportsExtendedDynamicState;
|
public readonly bool SupportsExtendedDynamicState;
|
||||||
public readonly bool SupportsExtendedDynamicState2;
|
public readonly bool SupportsExtendedDynamicState2;
|
||||||
public readonly bool SupportsExtendedDynamicState3;
|
|
||||||
public readonly bool SupportsMultiView;
|
public readonly bool SupportsMultiView;
|
||||||
public readonly bool SupportsNullDescriptors;
|
public readonly bool SupportsNullDescriptors;
|
||||||
public readonly bool SupportsPushDescriptors;
|
public readonly bool SupportsPushDescriptors;
|
||||||
|
@ -73,7 +72,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
bool supportsConditionalRendering,
|
bool supportsConditionalRendering,
|
||||||
bool supportsExtendedDynamicState,
|
bool supportsExtendedDynamicState,
|
||||||
bool supportsExtendedDynamicState2,
|
bool supportsExtendedDynamicState2,
|
||||||
bool supportsExtendedDynamicState3,
|
|
||||||
bool supportsMultiView,
|
bool supportsMultiView,
|
||||||
bool supportsNullDescriptors,
|
bool supportsNullDescriptors,
|
||||||
bool supportsPushDescriptors,
|
bool supportsPushDescriptors,
|
||||||
|
@ -113,7 +111,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
SupportsConditionalRendering = supportsConditionalRendering;
|
SupportsConditionalRendering = supportsConditionalRendering;
|
||||||
SupportsExtendedDynamicState = supportsExtendedDynamicState;
|
SupportsExtendedDynamicState = supportsExtendedDynamicState;
|
||||||
SupportsExtendedDynamicState2 = supportsExtendedDynamicState2;
|
SupportsExtendedDynamicState2 = supportsExtendedDynamicState2;
|
||||||
SupportsExtendedDynamicState3 = supportsExtendedDynamicState3;
|
|
||||||
SupportsMultiView = supportsMultiView;
|
SupportsMultiView = supportsMultiView;
|
||||||
SupportsNullDescriptors = supportsNullDescriptors;
|
SupportsNullDescriptors = supportsNullDescriptors;
|
||||||
SupportsPushDescriptors = supportsPushDescriptors;
|
SupportsPushDescriptors = supportsPushDescriptors;
|
||||||
|
|
|
@ -129,7 +129,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
_supportExtDynamic2 = gd.Capabilities.SupportsExtendedDynamicState2;
|
_supportExtDynamic2 = gd.Capabilities.SupportsExtendedDynamicState2;
|
||||||
|
|
||||||
|
|
||||||
_newState.Initialize();
|
_newState.Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -697,7 +696,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
var oldStencilTestEnable = _supportExtDynamic ? DynamicState.StencilTestEnable : _newState.StencilTestEnable;
|
var oldStencilTestEnable = _supportExtDynamic ? DynamicState.StencilTestEnable : _newState.StencilTestEnable;
|
||||||
var oldDepthTestEnable = _supportExtDynamic ? DynamicState.DepthTestEnable : _newState.DepthTestEnable;
|
var oldDepthTestEnable = _supportExtDynamic ? DynamicState.DepthTestEnable : _newState.DepthTestEnable;
|
||||||
var oldDepthWriteEnable = _supportExtDynamic ? DynamicState.DepthWriteEnable : _newState.DepthWriteEnable;
|
var oldDepthWriteEnable = _supportExtDynamic ? DynamicState.DepthWriteEnable : _newState.DepthWriteEnable;
|
||||||
var oldTopology = Gd.SupportsUnrestrictedDynamicTopology ? DynamicState.Topology : _newState.Topology;
|
var oldTopology = _newState.Topology;
|
||||||
var oldViewports = DynamicState.Viewports;
|
var oldViewports = DynamicState.Viewports;
|
||||||
var oldViewportsCount = _supportExtDynamic ? DynamicState.ViewportsCount : _newState.ViewportsCount;
|
var oldViewportsCount = _supportExtDynamic ? DynamicState.ViewportsCount : _newState.ViewportsCount;
|
||||||
|
|
||||||
|
@ -740,14 +739,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_newState.ViewportsCount = oldViewportsCount;
|
_newState.ViewportsCount = oldViewportsCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Gd.SupportsUnrestrictedDynamicTopology)
|
_newState.Topology = oldTopology;
|
||||||
{
|
|
||||||
DynamicState.SetPrimitiveTopology(oldTopology);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_newState.Topology = oldTopology;
|
|
||||||
}
|
|
||||||
|
|
||||||
DynamicState.SetViewports(ref oldViewports, oldViewportsCount);
|
DynamicState.SetViewports(ref oldViewports, oldViewportsCount);
|
||||||
|
|
||||||
|
@ -891,14 +883,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
public void SetDepthClamp(bool clamp)
|
public void SetDepthClamp(bool clamp)
|
||||||
{
|
{
|
||||||
if (Gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClampEnable)
|
_newState.DepthClampEnable = clamp;
|
||||||
{
|
|
||||||
DynamicState.SetDepthClampEnable(clamp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_newState.DepthClampEnable = clamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
SignalStateChange();
|
SignalStateChange();
|
||||||
}
|
}
|
||||||
|
@ -906,19 +891,11 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
public void SetDepthMode(DepthMode mode)
|
public void SetDepthMode(DepthMode mode)
|
||||||
{
|
{
|
||||||
bool oldMode;
|
bool oldMode;
|
||||||
bool supportsDepthClipandDynamicState = Gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClipNegativeOneToOne;
|
|
||||||
if (supportsDepthClipandDynamicState)
|
|
||||||
{
|
|
||||||
oldMode = DynamicState.DepthMode;
|
|
||||||
DynamicState.SetDepthMode(mode == DepthMode.MinusOneToOne);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
oldMode = _newState.DepthMode;
|
|
||||||
_newState.DepthMode = mode == DepthMode.MinusOneToOne;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((supportsDepthClipandDynamicState ? DynamicState.DepthMode : _newState.DepthMode) != oldMode)
|
oldMode = _newState.DepthMode;
|
||||||
|
_newState.DepthMode = mode == DepthMode.MinusOneToOne;
|
||||||
|
|
||||||
|
if (_newState.DepthMode != oldMode)
|
||||||
{
|
{
|
||||||
SignalStateChange();
|
SignalStateChange();
|
||||||
}
|
}
|
||||||
|
@ -1028,38 +1005,16 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
// so we need to force disable them here.
|
// so we need to force disable them here.
|
||||||
bool logicOpEnable = enable && (Gd.Vendor == Vendor.Nvidia || _newState.Internal.LogicOpsAllowed);
|
bool logicOpEnable = enable && (Gd.Vendor == Vendor.Nvidia || _newState.Internal.LogicOpsAllowed);
|
||||||
|
|
||||||
if (Gd.ExtendedDynamicState3Features.ExtendedDynamicState3LogicOpEnable)
|
_newState.LogicOpEnable = logicOpEnable;
|
||||||
{
|
|
||||||
DynamicState.SetLogicOpEnable(logicOpEnable);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_newState.LogicOpEnable = logicOpEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
SignalStateChange();
|
SignalStateChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetMultisampleState(MultisampleDescriptor multisample)
|
public void SetMultisampleState(MultisampleDescriptor multisample)
|
||||||
{
|
{
|
||||||
if (Gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToCoverageEnable)
|
_newState.AlphaToCoverageEnable = multisample.AlphaToCoverageEnable;
|
||||||
{
|
|
||||||
DynamicState.SetAlphaToCoverEnable(multisample.AlphaToCoverageEnable);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_newState.AlphaToCoverageEnable = multisample.AlphaToCoverageEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToOneEnable)
|
_newState.AlphaToOneEnable = multisample.AlphaToOneEnable;
|
||||||
{
|
|
||||||
DynamicState.SetAlphaToOneEnable(multisample.AlphaToOneEnable);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_newState.AlphaToOneEnable = multisample.AlphaToOneEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
SignalStateChange();
|
SignalStateChange();
|
||||||
}
|
}
|
||||||
|
@ -1139,14 +1094,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
var vkTopology = Gd.TopologyRemap(topology).Convert();
|
var vkTopology = Gd.TopologyRemap(topology).Convert();
|
||||||
|
|
||||||
if (Gd.SupportsUnrestrictedDynamicTopology)
|
_newState.Topology = vkTopology;
|
||||||
{
|
|
||||||
DynamicState.SetPrimitiveTopology(vkTopology);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_newState.Topology = vkTopology;
|
|
||||||
}
|
|
||||||
|
|
||||||
SignalStateChange();
|
SignalStateChange();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,14 +23,14 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
private uint _frontReference;
|
private uint _frontReference;
|
||||||
|
|
||||||
private bool _opToo;
|
private bool _opToo;
|
||||||
private StencilOp _backfailop;
|
private StencilOp _backFailOp;
|
||||||
private StencilOp _backpassop;
|
private StencilOp _backPassOp;
|
||||||
private StencilOp _backdepthfailop;
|
private StencilOp _backDepthFailOp;
|
||||||
private CompareOp _backcompareop;
|
private CompareOp _backCompareOp;
|
||||||
private StencilOp _frontfailop;
|
private StencilOp _frontFailOp;
|
||||||
private StencilOp _frontpassop;
|
private StencilOp _frontPassOp;
|
||||||
private StencilOp _frontdepthfailop;
|
private StencilOp _frontDepthFailOp;
|
||||||
private CompareOp _frontcompareop;
|
private CompareOp _frontCompareOp;
|
||||||
|
|
||||||
private float _lineWidth;
|
private float _lineWidth;
|
||||||
|
|
||||||
|
@ -54,19 +54,8 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
private uint _patchControlPoints;
|
private uint _patchControlPoints;
|
||||||
|
|
||||||
private bool _logicOpEnable;
|
|
||||||
|
|
||||||
private bool _depthClampEnable;
|
|
||||||
|
|
||||||
private bool _alphaToCoverEnable;
|
|
||||||
private bool _alphaToOneEnable;
|
|
||||||
|
|
||||||
public bool DepthMode;
|
|
||||||
|
|
||||||
private bool _primitiveRestartEnable;
|
private bool _primitiveRestartEnable;
|
||||||
|
|
||||||
public PrimitiveTopology Topology;
|
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
private enum DirtyFlags
|
private enum DirtyFlags
|
||||||
{
|
{
|
||||||
|
@ -84,18 +73,11 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
LineWidth = 1 << 10,
|
LineWidth = 1 << 10,
|
||||||
RasterDiscard = 1 << 11,
|
RasterDiscard = 1 << 11,
|
||||||
LogicOp = 1 << 12,
|
LogicOp = 1 << 12,
|
||||||
DepthClampEnable = 1 << 13,
|
PatchControlPoints = 1 << 13,
|
||||||
LogicOpEnable = 1 << 14,
|
PrimitiveRestart = 1 << 14,
|
||||||
AlphaToCover = 1 << 15,
|
|
||||||
AlphaToOne = 1 << 16,
|
|
||||||
PatchControlPoints = 1 << 17,
|
|
||||||
DepthMode = 1 << 18,
|
|
||||||
PrimitiveRestart = 1 << 19,
|
|
||||||
PrimitiveTopology = 1 << 20,
|
|
||||||
Standard = Blend | DepthBias | Scissor | Stencil | Viewport | LineWidth,
|
Standard = Blend | DepthBias | Scissor | Stencil | Viewport | LineWidth,
|
||||||
Extended = CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnable,
|
Extended = CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnable,
|
||||||
Extended2 = RasterDiscard | LogicOp | PatchControlPoints | PrimitiveRestart,
|
Extended2 = RasterDiscard | LogicOp | PatchControlPoints | PrimitiveRestart,
|
||||||
Extended3 = DepthClampEnable | LogicOpEnable | AlphaToCover | AlphaToOne | DepthMode | PrimitiveTopology,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DirtyFlags _dirty;
|
private DirtyFlags _dirty;
|
||||||
|
@ -142,14 +124,14 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
CompareOp backCompareOp, StencilOp frontFailOp, StencilOp frontPassOp, StencilOp frontDepthFailOp,
|
CompareOp backCompareOp, StencilOp frontFailOp, StencilOp frontPassOp, StencilOp frontDepthFailOp,
|
||||||
CompareOp frontCompareOp)
|
CompareOp frontCompareOp)
|
||||||
{
|
{
|
||||||
_backfailop = backFailOp;
|
_backFailOp = backFailOp;
|
||||||
_backpassop = backPassOp;
|
_backPassOp = backPassOp;
|
||||||
_backdepthfailop = backDepthFailOp;
|
_backDepthFailOp = backDepthFailOp;
|
||||||
_backcompareop = backCompareOp;
|
_backCompareOp = backCompareOp;
|
||||||
_frontfailop = frontFailOp;
|
_frontFailOp = frontFailOp;
|
||||||
_frontpassop = frontPassOp;
|
_frontPassOp = frontPassOp;
|
||||||
_frontdepthfailop = frontDepthFailOp;
|
_frontDepthFailOp = frontDepthFailOp;
|
||||||
_frontcompareop = frontCompareOp;
|
_frontCompareOp = frontCompareOp;
|
||||||
_opToo = true;
|
_opToo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,12 +203,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_dirty |= DirtyFlags.PrimitiveRestart;
|
_dirty |= DirtyFlags.PrimitiveRestart;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetPrimitiveTopology(PrimitiveTopology topology)
|
|
||||||
{
|
|
||||||
Topology = topology;
|
|
||||||
_dirty |= DirtyFlags.PrimitiveTopology;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetLogicOp(LogicOp op)
|
public void SetLogicOp(LogicOp op)
|
||||||
{
|
{
|
||||||
_logicOp = op;
|
_logicOp = op;
|
||||||
|
@ -239,36 +215,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_dirty |= DirtyFlags.PatchControlPoints;
|
_dirty |= DirtyFlags.PatchControlPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetLogicOpEnable(bool logicOpEnable)
|
|
||||||
{
|
|
||||||
_logicOpEnable = logicOpEnable;
|
|
||||||
_dirty |= DirtyFlags.LogicOpEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetDepthClampEnable(bool depthClampEnable)
|
|
||||||
{
|
|
||||||
_depthClampEnable = depthClampEnable;
|
|
||||||
_dirty |= DirtyFlags.DepthClampEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetAlphaToCoverEnable(bool alphaToCoverEnable)
|
|
||||||
{
|
|
||||||
_alphaToCoverEnable = alphaToCoverEnable;
|
|
||||||
_dirty |= DirtyFlags.AlphaToCover;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetAlphaToOneEnable(bool alphaToOneEnable)
|
|
||||||
{
|
|
||||||
_alphaToOneEnable = alphaToOneEnable;
|
|
||||||
_dirty |= DirtyFlags.AlphaToOne;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetDepthMode(bool mode)
|
|
||||||
{
|
|
||||||
DepthMode = mode;
|
|
||||||
_dirty |= DirtyFlags.DepthMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ForceAllDirty(VulkanRenderer gd)
|
public void ForceAllDirty(VulkanRenderer gd)
|
||||||
{
|
{
|
||||||
_dirty = DirtyFlags.Standard;
|
_dirty = DirtyFlags.Standard;
|
||||||
|
@ -283,11 +229,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_dirty = DirtyFlags.Standard | DirtyFlags.Extended | DirtyFlags.Extended2;
|
_dirty = DirtyFlags.Standard | DirtyFlags.Extended | DirtyFlags.Extended2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gd.Capabilities.SupportsExtendedDynamicState3)
|
|
||||||
{
|
|
||||||
_dirty = DirtyFlags.Standard | DirtyFlags.Extended | DirtyFlags.Extended2 | DirtyFlags.Extended3;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gd.IsMoltenVk)
|
if (gd.IsMoltenVk)
|
||||||
{
|
{
|
||||||
_dirty &= ~DirtyFlags.LineWidth;
|
_dirty &= ~DirtyFlags.LineWidth;
|
||||||
|
@ -302,36 +243,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
{
|
{
|
||||||
_dirty &= ~DirtyFlags.PatchControlPoints;
|
_dirty &= ~DirtyFlags.PatchControlPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToCoverageEnable)
|
|
||||||
{
|
|
||||||
_dirty &= ~DirtyFlags.AlphaToCover;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToOneEnable)
|
|
||||||
{
|
|
||||||
_dirty &= ~DirtyFlags.AlphaToOne;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClampEnable)
|
|
||||||
{
|
|
||||||
_dirty &= ~DirtyFlags.DepthClampEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3LogicOpEnable)
|
|
||||||
{
|
|
||||||
_dirty &= ~DirtyFlags.LogicOpEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClipNegativeOneToOne)
|
|
||||||
{
|
|
||||||
_dirty &= ~DirtyFlags.DepthMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gd.SupportsUnrestrictedDynamicTopology)
|
|
||||||
{
|
|
||||||
_dirty &= ~DirtyFlags.PrimitiveTopology;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReplayIfDirty(VulkanRenderer gd, CommandBuffer commandBuffer)
|
public void ReplayIfDirty(VulkanRenderer gd, CommandBuffer commandBuffer)
|
||||||
|
@ -401,7 +312,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
RecordPrimitiveRestartEnable(gd, commandBuffer);
|
RecordPrimitiveRestartEnable(gd, commandBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.PrimitiveTopology))
|
if (_dirty.HasFlag(DirtyFlags.PrimitiveRestart))
|
||||||
{
|
{
|
||||||
RecordPrimitiveRestartEnable(gd, commandBuffer);
|
RecordPrimitiveRestartEnable(gd, commandBuffer);
|
||||||
}
|
}
|
||||||
|
@ -416,36 +327,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
RecordPatchControlPoints(gd, commandBuffer);
|
RecordPatchControlPoints(gd, commandBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.LogicOpEnable))
|
|
||||||
{
|
|
||||||
RecordLogicOpEnable(gd, commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.DepthClampEnable))
|
|
||||||
{
|
|
||||||
RecordDepthClampEnable(gd, commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.AlphaToCover))
|
|
||||||
{
|
|
||||||
RecordAlphaToCoverEnable(gd, commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.AlphaToOne))
|
|
||||||
{
|
|
||||||
RecordAlphaToOneEnable(gd, commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.DepthMode))
|
|
||||||
{
|
|
||||||
RecordDepthMode(gd, commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.PrimitiveTopology))
|
|
||||||
{
|
|
||||||
RecordPrimitiveTopology(gd, commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
_dirty = DirtyFlags.None;
|
_dirty = DirtyFlags.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,10 +372,10 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
{
|
{
|
||||||
if (_opToo)
|
if (_opToo)
|
||||||
{
|
{
|
||||||
gd.ExtendedDynamicStateApi.CmdSetStencilOp(commandBuffer, StencilFaceFlags.FaceBackBit, _backfailop, _backpassop,
|
gd.ExtendedDynamicStateApi.CmdSetStencilOp(commandBuffer, StencilFaceFlags.FaceBackBit, _backFailOp, _backPassOp,
|
||||||
_backdepthfailop, _backcompareop);
|
_backDepthFailOp, _backCompareOp);
|
||||||
gd.ExtendedDynamicStateApi.CmdSetStencilOp(commandBuffer, StencilFaceFlags.FaceFrontBit, _frontfailop, _frontpassop,
|
gd.ExtendedDynamicStateApi.CmdSetStencilOp(commandBuffer, StencilFaceFlags.FaceFrontBit, _frontFailOp, _frontPassOp,
|
||||||
_frontdepthfailop, _frontcompareop);
|
_frontDepthFailOp, _frontCompareOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
gd.Api.CmdSetStencilCompareMask(commandBuffer, StencilFaceFlags.FaceBackBit, _backCompareMask);
|
gd.Api.CmdSetStencilCompareMask(commandBuffer, StencilFaceFlags.FaceBackBit, _backCompareMask);
|
||||||
|
@ -562,46 +443,16 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
gd.ExtendedDynamicState2Api.CmdSetPrimitiveRestartEnable(commandBuffer, _primitiveRestartEnable);
|
gd.ExtendedDynamicState2Api.CmdSetPrimitiveRestartEnable(commandBuffer, _primitiveRestartEnable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly void RecordPrimitiveTopology(VulkanRenderer gd, CommandBuffer commandBuffer)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicStateApi.CmdSetPrimitiveTopology(commandBuffer, Topology);
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly void RecordLogicOp(VulkanRenderer gd, CommandBuffer commandBuffer)
|
private readonly void RecordLogicOp(VulkanRenderer gd, CommandBuffer commandBuffer)
|
||||||
{
|
{
|
||||||
gd.ExtendedDynamicState2Api.CmdSetLogicOp(commandBuffer, _logicOp);
|
gd.ExtendedDynamicState2Api.CmdSetLogicOp(commandBuffer, _logicOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly void RecordLogicOpEnable(VulkanRenderer gd, CommandBuffer commandBuffer)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicState3Api.CmdSetLogicOpEnable(commandBuffer, _logicOpEnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly void RecordDepthClampEnable(VulkanRenderer gd, CommandBuffer commandBuffer)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicState3Api.CmdSetDepthClampEnable(commandBuffer, _depthClampEnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly void RecordAlphaToCoverEnable(VulkanRenderer gd, CommandBuffer commandBuffer)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicState3Api.CmdSetAlphaToCoverageEnable(commandBuffer, _alphaToCoverEnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly void RecordAlphaToOneEnable(VulkanRenderer gd, CommandBuffer commandBuffer)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicState3Api.CmdSetAlphaToOneEnable(commandBuffer, _alphaToOneEnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly void RecordPatchControlPoints(VulkanRenderer gd, CommandBuffer commandBuffer)
|
private readonly void RecordPatchControlPoints(VulkanRenderer gd, CommandBuffer commandBuffer)
|
||||||
{
|
{
|
||||||
gd.ExtendedDynamicState2Api.CmdSetPatchControlPoints(commandBuffer, _patchControlPoints);
|
gd.ExtendedDynamicState2Api.CmdSetPatchControlPoints(commandBuffer, _patchControlPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly void RecordDepthMode(VulkanRenderer gd, CommandBuffer commandBuffer)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicState3Api.CmdSetDepthClipNegativeOneToOne(commandBuffer, DepthMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly void RecordLineWidth(Vk api, CommandBuffer commandBuffer)
|
private readonly void RecordLineWidth(Vk api, CommandBuffer commandBuffer)
|
||||||
{
|
{
|
||||||
if (!OperatingSystem.IsMacOS())
|
if (!OperatingSystem.IsMacOS())
|
||||||
|
|
|
@ -407,8 +407,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
bool supportsExtDynamicState = gd.Capabilities.SupportsExtendedDynamicState;
|
bool supportsExtDynamicState = gd.Capabilities.SupportsExtendedDynamicState;
|
||||||
bool supportsExtDynamicState2 = gd.Capabilities.SupportsExtendedDynamicState2;
|
bool supportsExtDynamicState2 = gd.Capabilities.SupportsExtendedDynamicState2;
|
||||||
bool supportsExtDynamicState3 = gd.Capabilities.SupportsExtendedDynamicState3;
|
|
||||||
|
|
||||||
|
|
||||||
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions = &Internal.VertexAttributeDescriptions[0])
|
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions = &Internal.VertexAttributeDescriptions[0])
|
||||||
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions2 = &_vertexAttributeDescriptions2[0])
|
fixed (VertexInputAttributeDescription* pVertexAttributeDescriptions2 = &_vertexAttributeDescriptions2[0])
|
||||||
|
@ -436,13 +434,9 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
var inputAssemblyState = new PipelineInputAssemblyStateCreateInfo
|
var inputAssemblyState = new PipelineInputAssemblyStateCreateInfo
|
||||||
{
|
{
|
||||||
SType = StructureType.PipelineInputAssemblyStateCreateInfo,
|
SType = StructureType.PipelineInputAssemblyStateCreateInfo,
|
||||||
|
Topology = Topology,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!gd.SupportsUnrestrictedDynamicTopology)
|
|
||||||
{
|
|
||||||
inputAssemblyState.Topology = Topology;
|
|
||||||
}
|
|
||||||
|
|
||||||
var tessellationState = new PipelineTessellationStateCreateInfo
|
var tessellationState = new PipelineTessellationStateCreateInfo
|
||||||
{
|
{
|
||||||
SType = StructureType.PipelineTessellationStateCreateInfo,
|
SType = StructureType.PipelineTessellationStateCreateInfo,
|
||||||
|
@ -457,13 +451,9 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
{
|
{
|
||||||
SType = StructureType.PipelineRasterizationStateCreateInfo,
|
SType = StructureType.PipelineRasterizationStateCreateInfo,
|
||||||
PolygonMode = PolygonMode,
|
PolygonMode = PolygonMode,
|
||||||
|
DepthClampEnable = DepthClampEnable,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClampEnable)
|
|
||||||
{
|
|
||||||
rasterizationState.DepthClampEnable = DepthClampEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isMoltenVk)
|
if (isMoltenVk)
|
||||||
{
|
{
|
||||||
//When widelines feature is not supported it must be 1.0f per spec.
|
//When widelines feature is not supported it must be 1.0f per spec.
|
||||||
|
@ -482,7 +472,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
SType = StructureType.PipelineViewportStateCreateInfo,
|
SType = StructureType.PipelineViewportStateCreateInfo,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (gd.Capabilities.SupportsDepthClipControl && !gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClipNegativeOneToOne)
|
if (gd.Capabilities.SupportsDepthClipControl)
|
||||||
{
|
{
|
||||||
var viewportDepthClipControlState = new PipelineViewportDepthClipControlCreateInfoEXT
|
var viewportDepthClipControlState = new PipelineViewportDepthClipControlCreateInfoEXT
|
||||||
{
|
{
|
||||||
|
@ -499,18 +489,10 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
SampleShadingEnable = false,
|
SampleShadingEnable = false,
|
||||||
RasterizationSamples = TextureStorage.ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, SamplesCount),
|
RasterizationSamples = TextureStorage.ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, SamplesCount),
|
||||||
MinSampleShading = 1,
|
MinSampleShading = 1,
|
||||||
|
AlphaToCoverageEnable = AlphaToCoverageEnable,
|
||||||
|
AlphaToOneEnable = AlphaToOneEnable,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToCoverageEnable)
|
|
||||||
{
|
|
||||||
multisampleState.AlphaToCoverageEnable = AlphaToCoverageEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToOneEnable)
|
|
||||||
{
|
|
||||||
multisampleState.AlphaToOneEnable = AlphaToOneEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
var depthStencilState = new PipelineDepthStencilStateCreateInfo
|
var depthStencilState = new PipelineDepthStencilStateCreateInfo
|
||||||
{
|
{
|
||||||
SType = StructureType.PipelineDepthStencilStateCreateInfo,
|
SType = StructureType.PipelineDepthStencilStateCreateInfo,
|
||||||
|
@ -579,6 +561,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
SType = StructureType.PipelineColorBlendStateCreateInfo,
|
SType = StructureType.PipelineColorBlendStateCreateInfo,
|
||||||
AttachmentCount = ColorBlendAttachmentStateCount,
|
AttachmentCount = ColorBlendAttachmentStateCount,
|
||||||
PAttachments = pColorBlendAttachmentState,
|
PAttachments = pColorBlendAttachmentState,
|
||||||
|
LogicOpEnable = LogicOpEnable,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
|
if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
|
||||||
|
@ -586,11 +569,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
colorBlendState.LogicOp = LogicOp;
|
colorBlendState.LogicOp = LogicOp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gd.ExtendedDynamicState3Features.ExtendedDynamicState3LogicOpEnable)
|
|
||||||
{
|
|
||||||
colorBlendState.LogicOpEnable = LogicOpEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
PipelineColorBlendAdvancedStateCreateInfoEXT colorBlendAdvancedState;
|
PipelineColorBlendAdvancedStateCreateInfoEXT colorBlendAdvancedState;
|
||||||
|
|
||||||
if (!AdvancedBlendSrcPreMultiplied ||
|
if (!AdvancedBlendSrcPreMultiplied ||
|
||||||
|
@ -634,35 +612,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (supportsExtDynamicState3)
|
|
||||||
{
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClampEnable)
|
|
||||||
{
|
|
||||||
additionalDynamicStatesCount++;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3LogicOpEnable)
|
|
||||||
{
|
|
||||||
additionalDynamicStatesCount++;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToCoverageEnable)
|
|
||||||
{
|
|
||||||
additionalDynamicStatesCount++;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToOneEnable)
|
|
||||||
{
|
|
||||||
additionalDynamicStatesCount++;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClipNegativeOneToOne)
|
|
||||||
{
|
|
||||||
additionalDynamicStatesCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gd.SupportsUnrestrictedDynamicTopology)
|
|
||||||
{
|
|
||||||
additionalDynamicStatesCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int dynamicStatesCount = baseDynamicStatesCount + additionalDynamicStatesCount;
|
int dynamicStatesCount = baseDynamicStatesCount + additionalDynamicStatesCount;
|
||||||
DynamicState* dynamicStates = stackalloc DynamicState[dynamicStatesCount];
|
DynamicState* dynamicStates = stackalloc DynamicState[dynamicStatesCount];
|
||||||
|
|
||||||
|
@ -716,35 +665,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (supportsExtDynamicState3)
|
|
||||||
{
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClampEnable)
|
|
||||||
{
|
|
||||||
dynamicStates[currentIndex++] = DynamicState.DepthClampEnableExt;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3LogicOpEnable)
|
|
||||||
{
|
|
||||||
dynamicStates[currentIndex++] = DynamicState.LogicOpEnableExt;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToCoverageEnable)
|
|
||||||
{
|
|
||||||
dynamicStates[currentIndex++] = DynamicState.AlphaToCoverageEnableExt;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3AlphaToOneEnable)
|
|
||||||
{
|
|
||||||
dynamicStates[currentIndex++] = DynamicState.AlphaToOneEnableExt;
|
|
||||||
}
|
|
||||||
if (gd.ExtendedDynamicState3Features.ExtendedDynamicState3DepthClipNegativeOneToOne)
|
|
||||||
{
|
|
||||||
dynamicStates[currentIndex++] = DynamicState.DepthClipNegativeOneToOneExt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gd.SupportsUnrestrictedDynamicTopology)
|
|
||||||
{
|
|
||||||
dynamicStates[currentIndex++] = DynamicState.PrimitiveTopology;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var pipelineDynamicStateCreateInfo = new PipelineDynamicStateCreateInfo
|
var pipelineDynamicStateCreateInfo = new PipelineDynamicStateCreateInfo
|
||||||
{
|
{
|
||||||
SType = StructureType.PipelineDynamicStateCreateInfo,
|
SType = StructureType.PipelineDynamicStateCreateInfo,
|
||||||
|
|
|
@ -24,7 +24,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
ExtConditionalRendering.ExtensionName,
|
ExtConditionalRendering.ExtensionName,
|
||||||
ExtExtendedDynamicState.ExtensionName,
|
ExtExtendedDynamicState.ExtensionName,
|
||||||
ExtExtendedDynamicState2.ExtensionName,
|
ExtExtendedDynamicState2.ExtensionName,
|
||||||
ExtExtendedDynamicState3.ExtensionName,
|
|
||||||
ExtTransformFeedback.ExtensionName,
|
ExtTransformFeedback.ExtensionName,
|
||||||
KhrDrawIndirectCount.ExtensionName,
|
KhrDrawIndirectCount.ExtensionName,
|
||||||
KhrPushDescriptor.ExtensionName,
|
KhrPushDescriptor.ExtensionName,
|
||||||
|
@ -264,7 +263,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
return InvalidIndex;
|
return InvalidIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Device CreateDevice(Vk api, VulkanPhysicalDevice physicalDevice, uint queueFamilyIndex, uint queueCount, out PhysicalDeviceExtendedDynamicState2FeaturesEXT extendedDynamicState2Features, out PhysicalDeviceExtendedDynamicState3FeaturesEXT extendedDynamicState3Features)
|
internal static Device CreateDevice(Vk api, VulkanPhysicalDevice physicalDevice, uint queueFamilyIndex, uint queueCount, out PhysicalDeviceExtendedDynamicState2FeaturesEXT extendedDynamicState2Features)
|
||||||
{
|
{
|
||||||
if (queueCount > QueuesCount)
|
if (queueCount > QueuesCount)
|
||||||
{
|
{
|
||||||
|
@ -323,17 +322,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
features2.PNext = &supportedFeaturesExtExtendedDynamicState2;
|
features2.PNext = &supportedFeaturesExtExtendedDynamicState2;
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicalDeviceExtendedDynamicState3FeaturesEXT supportedFeaturesExtExtendedDynamicState3 = new()
|
|
||||||
{
|
|
||||||
SType = StructureType.PhysicalDeviceExtendedDynamicState3FeaturesExt,
|
|
||||||
PNext = features2.PNext,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState3.ExtensionName))
|
|
||||||
{
|
|
||||||
features2.PNext = &supportedFeaturesExtExtendedDynamicState3;
|
|
||||||
}
|
|
||||||
|
|
||||||
PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT supportedFeaturesPrimitiveTopologyListRestart = new()
|
PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT supportedFeaturesPrimitiveTopologyListRestart = new()
|
||||||
{
|
{
|
||||||
SType = StructureType.PhysicalDevicePrimitiveTopologyListRestartFeaturesExt,
|
SType = StructureType.PhysicalDevicePrimitiveTopologyListRestartFeaturesExt,
|
||||||
|
@ -483,24 +471,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
extendedDynamicState2Features = supportedFeaturesExtExtendedDynamicState2;
|
extendedDynamicState2Features = supportedFeaturesExtExtendedDynamicState2;
|
||||||
|
|
||||||
|
|
||||||
if (physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState3.ExtensionName))
|
|
||||||
{
|
|
||||||
var featuresExtendedDynamicState3 = new PhysicalDeviceExtendedDynamicState3FeaturesEXT()
|
|
||||||
{
|
|
||||||
SType = StructureType.PhysicalDeviceExtendedDynamicState3FeaturesExt,
|
|
||||||
PNext = pExtendedFeatures,
|
|
||||||
ExtendedDynamicState3LogicOpEnable = supportedFeaturesExtExtendedDynamicState3.ExtendedDynamicState3LogicOpEnable,
|
|
||||||
ExtendedDynamicState3AlphaToCoverageEnable = supportedFeaturesExtExtendedDynamicState3.ExtendedDynamicState3AlphaToCoverageEnable,
|
|
||||||
ExtendedDynamicState3AlphaToOneEnable = supportedFeaturesExtExtendedDynamicState3.ExtendedDynamicState3AlphaToOneEnable,
|
|
||||||
ExtendedDynamicState3DepthClampEnable = supportedFeaturesExtExtendedDynamicState3.ExtendedDynamicState3DepthClampEnable,
|
|
||||||
ExtendedDynamicState3DepthClipNegativeOneToOne = supportedFeaturesExtExtendedDynamicState3.ExtendedDynamicState3DepthClipNegativeOneToOne,
|
|
||||||
};
|
|
||||||
|
|
||||||
pExtendedFeatures = &featuresExtendedDynamicState3;
|
|
||||||
}
|
|
||||||
|
|
||||||
extendedDynamicState3Features = supportedFeaturesExtExtendedDynamicState3;
|
|
||||||
|
|
||||||
var featuresVk11 = new PhysicalDeviceVulkan11Features
|
var featuresVk11 = new PhysicalDeviceVulkan11Features
|
||||||
{
|
{
|
||||||
SType = StructureType.PhysicalDeviceVulkan11Features,
|
SType = StructureType.PhysicalDeviceVulkan11Features,
|
||||||
|
|
|
@ -36,8 +36,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
internal ExtConditionalRendering ConditionalRenderingApi { get; private set; }
|
internal ExtConditionalRendering ConditionalRenderingApi { get; private set; }
|
||||||
internal ExtExtendedDynamicState ExtendedDynamicStateApi { get; private set; }
|
internal ExtExtendedDynamicState ExtendedDynamicStateApi { get; private set; }
|
||||||
internal ExtExtendedDynamicState2 ExtendedDynamicState2Api { get; private set; }
|
internal ExtExtendedDynamicState2 ExtendedDynamicState2Api { get; private set; }
|
||||||
internal ExtExtendedDynamicState3 ExtendedDynamicState3Api { get; private set; }
|
|
||||||
|
|
||||||
internal KhrPushDescriptor PushDescriptorApi { get; private set; }
|
internal KhrPushDescriptor PushDescriptorApi { get; private set; }
|
||||||
internal ExtTransformFeedback TransformFeedbackApi { get; private set; }
|
internal ExtTransformFeedback TransformFeedbackApi { get; private set; }
|
||||||
internal KhrDrawIndirectCount DrawIndirectCountApi { get; private set; }
|
internal KhrDrawIndirectCount DrawIndirectCountApi { get; private set; }
|
||||||
|
@ -102,10 +100,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
public PhysicalDeviceExtendedDynamicState2FeaturesEXT ExtendedDynamicState2Features;
|
public PhysicalDeviceExtendedDynamicState2FeaturesEXT ExtendedDynamicState2Features;
|
||||||
|
|
||||||
public PhysicalDeviceExtendedDynamicState3FeaturesEXT ExtendedDynamicState3Features;
|
|
||||||
|
|
||||||
public bool SupportsUnrestrictedDynamicTopology;
|
|
||||||
|
|
||||||
|
|
||||||
public event EventHandler<ScreenCaptureImageInfo> ScreenCaptured;
|
public event EventHandler<ScreenCaptureImageInfo> ScreenCaptured;
|
||||||
|
|
||||||
|
@ -147,11 +141,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
ExtendedDynamicState2Api = extendedDynamicState2Api;
|
ExtendedDynamicState2Api = extendedDynamicState2Api;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out ExtExtendedDynamicState3 extendedDynamicState3Api))
|
|
||||||
{
|
|
||||||
ExtendedDynamicState3Api = extendedDynamicState3Api;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrPushDescriptor pushDescriptorApi))
|
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrPushDescriptor pushDescriptorApi))
|
||||||
{
|
{
|
||||||
PushDescriptorApi = pushDescriptorApi;
|
PushDescriptorApi = pushDescriptorApi;
|
||||||
|
@ -213,17 +202,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
properties2.PNext = &propertiesTransformFeedback;
|
properties2.PNext = &propertiesTransformFeedback;
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicalDeviceExtendedDynamicState3PropertiesEXT propertiesExtendedDynamicState3 = new()
|
|
||||||
{
|
|
||||||
SType = StructureType.PhysicalDeviceExtendedDynamicState3PropertiesExt,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState3.ExtensionName))
|
|
||||||
{
|
|
||||||
propertiesExtendedDynamicState3.PNext = properties2.PNext;
|
|
||||||
properties2.PNext = &propertiesExtendedDynamicState3;
|
|
||||||
}
|
|
||||||
|
|
||||||
PhysicalDevicePortabilitySubsetPropertiesKHR propertiesPortabilitySubset = new()
|
PhysicalDevicePortabilitySubsetPropertiesKHR propertiesPortabilitySubset = new()
|
||||||
{
|
{
|
||||||
SType = StructureType.PhysicalDevicePortabilitySubsetPropertiesKhr,
|
SType = StructureType.PhysicalDevicePortabilitySubsetPropertiesKhr,
|
||||||
|
@ -414,7 +392,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtConditionalRendering.ExtensionName),
|
_physicalDevice.IsDeviceExtensionPresent(ExtConditionalRendering.ExtensionName),
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState.ExtensionName),
|
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState.ExtensionName),
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState2.ExtensionName),
|
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState2.ExtensionName),
|
||||||
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState3.ExtensionName),
|
|
||||||
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,
|
||||||
|
@ -438,8 +415,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
properties.Limits.SubTexelPrecisionBits,
|
properties.Limits.SubTexelPrecisionBits,
|
||||||
minResourceAlignment);
|
minResourceAlignment);
|
||||||
|
|
||||||
SupportsUnrestrictedDynamicTopology = propertiesExtendedDynamicState3.DynamicPrimitiveTopologyUnrestricted;
|
|
||||||
|
|
||||||
IsSharedMemory = MemoryAllocator.IsDeviceMemoryShared(_physicalDevice);
|
IsSharedMemory = MemoryAllocator.IsDeviceMemoryShared(_physicalDevice);
|
||||||
|
|
||||||
MemoryAllocator = new MemoryAllocator(Api, _physicalDevice, _device);
|
MemoryAllocator = new MemoryAllocator(Api, _physicalDevice, _device);
|
||||||
|
@ -481,10 +456,9 @@ 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, out PhysicalDeviceExtendedDynamicState3FeaturesEXT extendedDynamicState3Features);
|
_device = VulkanInitialization.CreateDevice(Api, _physicalDevice, queueFamilyIndex, maxQueueCount, out PhysicalDeviceExtendedDynamicState2FeaturesEXT extendedDynamicState2Features);
|
||||||
|
|
||||||
ExtendedDynamicState2Features = extendedDynamicState2Features;
|
ExtendedDynamicState2Features = extendedDynamicState2Features;
|
||||||
ExtendedDynamicState3Features = extendedDynamicState3Features;
|
|
||||||
|
|
||||||
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrSwapchain swapchainApi))
|
if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrSwapchain swapchainApi))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue