aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/vk_rasterizer.cpp
diff options
context:
space:
mode:
authorCaio Oliveira <caiooliveirafarias0@gmail.com>2025-11-07 14:01:28 +0100
committercrueter <crueter@eden-emu.dev>2025-11-07 14:01:28 +0100
commit159482a7a99330d2b6d3b9a28a22316e0d8b6ca7 (patch)
treebb180101f2667a91adc17a58450eee6259f74f26 /src/video_core/renderer_vulkan/vk_rasterizer.cpp
parent0510f0bdbc3017d33b98ca0887a8383f2ec5daea (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.cpp33
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);
+ }
}
}