From 0cda02e91eb9ffe6238f91d428054afd76e5f6a9 Mon Sep 17 00:00:00 2001 From: wildcard Date: Tue, 23 Jun 2026 05:31:28 +0200 Subject: [PATCH] potential fix for totk and smo for amd --- src/video_core/renderer_vulkan/fixed_pipeline_state.cpp | 3 +++ src/video_core/renderer_vulkan/fixed_pipeline_state.h | 3 +++ src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp b/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp index c6aa28fa23..26bf4cdeb7 100644 --- a/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp +++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp @@ -62,6 +62,9 @@ void FixedPipelineState::Refresh(Tegra::Engines::Maxwell3D& maxwell3d, DynamicFe extended_dynamic_state_2_logic_op.Assign(features.has_extended_dynamic_state_2_logic_op ? 1 : 0); extended_dynamic_state_3_blend.Assign(features.has_extended_dynamic_state_3_blend ? 1 : 0); extended_dynamic_state_3_enables.Assign(features.has_extended_dynamic_state_3_enables ? 1 : 0); + dynamic_state3_depth_clamp_enable.Assign(features.has_dynamic_state3_depth_clamp_enable ? 1 : 0); + dynamic_state3_logic_op_enable.Assign(features.has_dynamic_state3_logic_op_enable ? 1 : 0); + dynamic_state3_line_stipple_enable.Assign(features.has_dynamic_state3_line_stipple_enable ? 1 : 0); dynamic_vertex_input.Assign(features.has_dynamic_vertex_input ? 1 : 0); xfb_enabled.Assign(regs.transform_feedback_enabled != 0); ndc_minus_one_to_one.Assign(regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1 : 0); diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.h b/src/video_core/renderer_vulkan/fixed_pipeline_state.h index 44157d686d..292e39a551 100644 --- a/src/video_core/renderer_vulkan/fixed_pipeline_state.h +++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.h @@ -208,6 +208,9 @@ struct FixedPipelineState { BitField<12, 2, u32> tessellation_spacing; BitField<14, 1, u32> tessellation_clockwise; BitField<15, 5, u32> patch_control_points_minus_one; + BitField<20, 1, u32> dynamic_state3_depth_clamp_enable; + BitField<21, 1, u32> dynamic_state3_logic_op_enable; + BitField<22, 1, u32> dynamic_state3_line_stipple_enable; BitField<24, 4, Maxwell::PrimitiveTopology> topology; BitField<28, 4, Tegra::Texture::MsaaMode> msaa_mode; diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 728554d6e6..1bdb28639b 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -907,10 +907,10 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { // EDS3 - Enables (composite: per-feature) if (key.state.extended_dynamic_state_3_enables) { - if (device.SupportsDynamicState3DepthClampEnable()) { + if (key.state.dynamic_state3_depth_clamp_enable) { dynamic_states.push_back(VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT); } - if (device.SupportsDynamicState3LogicOpEnable()) { + if (key.state.dynamic_state3_logic_op_enable) { dynamic_states.push_back(VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT); } if (device.SupportsDynamicState3LineRasterizationMode()) { @@ -919,7 +919,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { if (device.SupportsDynamicState3ConservativeRasterizationMode()) { dynamic_states.push_back(VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT); } - if (device.SupportsDynamicState3LineStippleEnable()) { + if (key.state.dynamic_state3_line_stipple_enable) { dynamic_states.push_back(VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT); } if (device.SupportsDynamicState3AlphaToCoverageEnable()) {