|
|
|
@ -952,7 +952,19 @@ void RasterizerVulkan::UpdateDynamicStates() { |
|
|
|
UpdateDepthBounds(regs); |
|
|
|
UpdateStencilFaces(regs); |
|
|
|
UpdateLineWidth(regs); |
|
|
|
if (device.IsExtExtendedDynamicStateSupported()) { |
|
|
|
|
|
|
|
const u8 dynamic_state = Settings::values.dyna_state.GetValue(); |
|
|
|
|
|
|
|
auto features = DynamicFeatures{ |
|
|
|
.has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0, |
|
|
|
.has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1, |
|
|
|
.has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1, |
|
|
|
.has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2, |
|
|
|
.has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2, |
|
|
|
.has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported(), |
|
|
|
}; |
|
|
|
|
|
|
|
if (features.has_extended_dynamic_state) { |
|
|
|
UpdateCullMode(regs); |
|
|
|
UpdateDepthCompareOp(regs); |
|
|
|
UpdateFrontFace(regs); |
|
|
|
@ -963,13 +975,14 @@ void RasterizerVulkan::UpdateDynamicStates() { |
|
|
|
UpdateDepthTestEnable(regs); |
|
|
|
UpdateDepthWriteEnable(regs); |
|
|
|
UpdateStencilTestEnable(regs); |
|
|
|
if (device.IsExtExtendedDynamicState2Supported()) { |
|
|
|
|
|
|
|
if (features.has_extended_dynamic_state_2) { |
|
|
|
UpdatePrimitiveRestartEnable(regs); |
|
|
|
UpdateRasterizerDiscardEnable(regs); |
|
|
|
UpdateDepthBiasEnable(regs); |
|
|
|
} |
|
|
|
|
|
|
|
if (device.IsExtExtendedDynamicState3Supported()) { |
|
|
|
if (features.has_extended_dynamic_state_3_enables) { |
|
|
|
using namespace Tegra::Engines; |
|
|
|
|
|
|
|
if (device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_OPEN_SOURCE || |
|
|
|
@ -996,15 +1009,20 @@ void RasterizerVulkan::UpdateDynamicStates() { |
|
|
|
UpdateDepthClampEnable(regs); |
|
|
|
} |
|
|
|
} |
|
|
|
if (device.IsExtExtendedDynamicState2ExtrasSupported()) { |
|
|
|
if (features.has_extended_dynamic_state_2_extra) { |
|
|
|
UpdateLogicOp(regs); |
|
|
|
} |
|
|
|
if (device.IsExtExtendedDynamicState3Supported()) { |
|
|
|
if (features.has_extended_dynamic_state_3_enables) { |
|
|
|
UpdateBlending(regs); |
|
|
|
UpdateLineStippleEnable(regs); |
|
|
|
UpdateConservativeRasterizationMode(regs); |
|
|
|
} |
|
|
|
} |
|
|
|
if (device.IsExtVertexInputDynamicStateSupported()) { |
|
|
|
UpdateVertexInput(regs); |
|
|
|
if (features.has_dynamic_vertex_input) { |
|
|
|
if (auto* gp = pipeline_cache.CurrentGraphicsPipeline(); |
|
|
|
gp && gp->HasDynamicVertexInput()) { |
|
|
|
UpdateVertexInput(regs); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|