From 76bb5fc18b5e07ebe1f83cb6bb487c943c4b7914 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Fri, 13 Mar 2026 01:17:57 -0400 Subject: [PATCH] [vulkan] Small patch for tesselation vs an already handling with topology patch list. --- src/video_core/renderer_vulkan/vk_graphics_pipeline.h | 3 +++ src/video_core/renderer_vulkan/vk_rasterizer.cpp | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h index 418a4cfd26..31fb538dce 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h @@ -98,6 +98,9 @@ public: bool UsesExtendedDynamicState2LogicOp() const noexcept { return key.state.extended_dynamic_state_2_logic_op != 0; } + bool HasTessellationStages() const noexcept { + return static_cast(spv_modules[1]) || static_cast(spv_modules[2]); + } GraphicsPipeline& operator=(GraphicsPipeline&&) noexcept = delete; GraphicsPipeline(GraphicsPipeline&&) noexcept = delete; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index fb942dd577..71d68c227b 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1991,11 +1991,14 @@ void RasterizerVulkan::UpdateDepthCompareOp(Tegra::Engines::Maxwell3D::Regs& reg } void RasterizerVulkan::UpdatePrimitiveTopology([[maybe_unused]] Tegra::Engines::Maxwell3D::Regs& regs) { + GraphicsPipeline* pipeline = pipeline_cache.CurrentGraphicsPipeline(); const auto topology = maxwell3d->draw_manager->GetDrawState().topology; if (!state_tracker.ChangePrimitiveTopology(topology)) { return; } - const auto vk_topology = MaxwellToVK::PrimitiveTopology(device, topology); + const auto vk_topology = pipeline && pipeline->HasTessellationStages() + ? VK_PRIMITIVE_TOPOLOGY_PATCH_LIST + : MaxwellToVK::PrimitiveTopology(device, topology); scheduler.Record([vk_topology](vk::CommandBuffer cmdbuf) { cmdbuf.SetPrimitiveTopologyEXT(vk_topology); });