diff options
| author | MaranBr <maranbr@outlook.com> | 2025-11-21 02:00:24 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-11-21 02:00:24 +0100 |
| commit | f7f6a4cde4d4355cb11bf43ed29787949e08e624 (patch) | |
| tree | f509009534b4c05b6dc2f321c009092075dd7e4f /src/video_core/renderer_vulkan/vk_rasterizer.cpp | |
| parent | 65fa1a37e27579db54b14904a732dab785eebf99 (diff) | |
[video_core] Improve EDS logic and fix a lot of inconsistencies (#3042)
Improves EDS logic and fix some inconsistencies.
Removes a lot of unneeded code.
Adds an option to control the `Vertex Input Dynamic State` extension.
Fixes issues in Pokémon Legends: Z-A on any EDS level.
Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3042
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.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, 15 insertions, 18 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 59af3f33b6..c1a105ef36 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -945,7 +945,6 @@ bool AccelerateDMA::BufferToImage(const Tegra::DMA::ImageCopy& copy_info, void RasterizerVulkan::UpdateDynamicStates() { auto& regs = maxwell3d->regs; - UpdateViewportsState(regs); UpdateScissorsState(regs); UpdateDepthBias(regs); @@ -953,10 +952,7 @@ void RasterizerVulkan::UpdateDynamicStates() { UpdateDepthBounds(regs); UpdateStencilFaces(regs); UpdateLineWidth(regs); - - const u8 dynamic_state = Settings::values.dyna_state.GetValue(); - - if (device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0) { + if (device.IsExtExtendedDynamicStateSupported()) { UpdateCullMode(regs); UpdateDepthCompareOp(regs); UpdateFrontFace(regs); @@ -966,22 +962,21 @@ void RasterizerVulkan::UpdateDynamicStates() { UpdateDepthTestEnable(regs); UpdateDepthWriteEnable(regs); UpdateStencilTestEnable(regs); - if (device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1) { + if (device.IsExtExtendedDynamicState2Supported()) { UpdatePrimitiveRestartEnable(regs); UpdateRasterizerDiscardEnable(regs); UpdateDepthBiasEnable(regs); } - if (device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2) { + if (device.IsExtExtendedDynamicState3EnablesSupported()) { using namespace Tegra::Engines; if (device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_OPEN_SOURCE || device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_PROPRIETARY) { - struct In { - const Maxwell3D::Regs::VertexAttribute::Type d; - In(Maxwell3D::Regs::VertexAttribute::Type n) : d(n) {} - bool operator()(Maxwell3D::Regs::VertexAttribute n) const { - return n.type == d; + const auto has_float = std::any_of( + regs.vertex_attrib_format.begin(), + regs.vertex_attrib_format.end(), + [](const auto& attrib) { + return attrib.type == Maxwell3D::Regs::VertexAttribute::Type::Float; } - }; - auto has_float = std::any_of(regs.vertex_attrib_format.begin(), regs.vertex_attrib_format.end(), In(Maxwell3D::Regs::VertexAttribute::Type::Float)); + ); if (regs.logic_op.enable) { regs.logic_op.enable = static_cast<u32>(!has_float); } @@ -992,16 +987,18 @@ void RasterizerVulkan::UpdateDynamicStates() { UpdateConservativeRasterizationMode(regs); } } - if (device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1) { + if (device.IsExtExtendedDynamicState2ExtrasSupported()) { UpdateLogicOp(regs); } - if (device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2) { + if (device.IsExtExtendedDynamicState3BlendingSupported()) { UpdateBlending(regs); } } - if (device.IsExtVertexInputDynamicStateSupported() && dynamic_state > 0) - if (auto* gp = pipeline_cache.CurrentGraphicsPipeline(); gp && gp->HasDynamicVertexInput()) + if (device.IsExtVertexInputDynamicStateSupported()) { + if (auto* gp = pipeline_cache.CurrentGraphicsPipeline(); gp && gp->HasDynamicVertexInput()) { UpdateVertexInput(regs); + } + } } void RasterizerVulkan::HandleTransformFeedback() { |
