diff options
| author | Caio Oliveira <caiooliveirafarias0@gmail.com> | 2025-11-07 14:01:28 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-11-07 14:01:28 +0100 |
| commit | 159482a7a99330d2b6d3b9a28a22316e0d8b6ca7 (patch) | |
| tree | bb180101f2667a91adc17a58450eee6259f74f26 /src/video_core/renderer_vulkan/vk_rasterizer.cpp | |
| parent | 0510f0bdbc3017d33b98ca0887a8383f2ec5daea (diff) | |
Revert "[vk] Clean up Extended Dynamic State code" (#2970)
* this PR need more work (as it break Eden on Windows+AMD)
Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
---
Revert "[vk] Add back VIDS but disable on EDS0 (#2957)"
This reverts commit 1c4dae066b3b98708d9ce6f78aeea6b8b16dd34f.
Revert "[vk] disable VK_EXT_vertex_input_dynamic_state again (#2954)"
This reverts commit 9406438d51a3d827c2d6b6bc77dc36734ec2f991.
Revert "[vk] Clean up Extended Dynamic State code (#2947)"
This reverts commit 612da00d1bf7415cc4c1c8ccfc6ce9216dcce7b4.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2970
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Co-committed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_rasterizer.cpp')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 3b103da526..6bad5eca0b 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -945,6 +945,7 @@ bool AccelerateDMA::BufferToImage(const Tegra::DMA::ImageCopy& copy_info, void RasterizerVulkan::UpdateDynamicStates() { auto& regs = maxwell3d->regs; + UpdateViewportsState(regs); UpdateScissorsState(regs); UpdateDepthBias(regs); @@ -952,7 +953,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 +976,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 +1010,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); + } } } |
