summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar liamwhite2022-12-17 16:08:10 -0500
committerGravatar GitHub2022-12-17 16:08:10 -0500
commit5da72a891fb4c4ddddbeefc0b235079fa3830743 (patch)
treecd4006e1a4e50c298ebb3004341191203ac11c56 /src/video_core/renderer_vulkan
parentMerge pull request #9461 from liamwhite/wanative (diff)
parentVulkan: Add support for VK_EXT_depth_clip_control. (diff)
downloadyuzu-5da72a891fb4c4ddddbeefc0b235079fa3830743.tar.gz
yuzu-5da72a891fb4c4ddddbeefc0b235079fa3830743.tar.xz
yuzu-5da72a891fb4c4ddddbeefc0b235079fa3830743.zip
Merge pull request #7450 from FernandoS27/ndc-vulkan
Vulkan: Add support for VK_EXT_depth_clip_control.
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp18
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp1
2 files changed, 15 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
index 4b10fe7bc..515d8d869 100644
--- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
@@ -640,23 +640,33 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
640 }; 640 };
641 std::array<VkViewportSwizzleNV, Maxwell::NumViewports> swizzles; 641 std::array<VkViewportSwizzleNV, Maxwell::NumViewports> swizzles;
642 std::ranges::transform(key.state.viewport_swizzles, swizzles.begin(), UnpackViewportSwizzle); 642 std::ranges::transform(key.state.viewport_swizzles, swizzles.begin(), UnpackViewportSwizzle);
643 const VkPipelineViewportSwizzleStateCreateInfoNV swizzle_ci{ 643 VkPipelineViewportSwizzleStateCreateInfoNV swizzle_ci{
644 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV, 644 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV,
645 .pNext = nullptr, 645 .pNext = nullptr,
646 .flags = 0, 646 .flags = 0,
647 .viewportCount = Maxwell::NumViewports, 647 .viewportCount = Maxwell::NumViewports,
648 .pViewportSwizzles = swizzles.data(), 648 .pViewportSwizzles = swizzles.data(),
649 }; 649 };
650 const VkPipelineViewportStateCreateInfo viewport_ci{ 650 VkPipelineViewportDepthClipControlCreateInfoEXT ndc_info{
651 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT,
652 .pNext = nullptr,
653 .negativeOneToOne = key.state.ndc_minus_one_to_one.Value() != 0 ? VK_TRUE : VK_FALSE,
654 };
655 VkPipelineViewportStateCreateInfo viewport_ci{
651 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, 656 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
652 .pNext = device.IsNvViewportSwizzleSupported() ? &swizzle_ci : nullptr, 657 .pNext = nullptr,
653 .flags = 0, 658 .flags = 0,
654 .viewportCount = Maxwell::NumViewports, 659 .viewportCount = Maxwell::NumViewports,
655 .pViewports = nullptr, 660 .pViewports = nullptr,
656 .scissorCount = Maxwell::NumViewports, 661 .scissorCount = Maxwell::NumViewports,
657 .pScissors = nullptr, 662 .pScissors = nullptr,
658 }; 663 };
659 664 if (device.IsNvViewportSwizzleSupported()) {
665 swizzle_ci.pNext = std::exchange(viewport_ci.pNext, &swizzle_ci);
666 }
667 if (device.IsExtDepthClipControlSupported()) {
668 ndc_info.pNext = std::exchange(viewport_ci.pNext, &ndc_info);
669 }
660 VkPipelineRasterizationStateCreateInfo rasterization_ci{ 670 VkPipelineRasterizationStateCreateInfo rasterization_ci{
661 .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, 671 .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
662 .pNext = nullptr, 672 .pNext = nullptr,
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index 86fdde014..e7262420c 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -321,6 +321,7 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, const Device& device
321 .support_int64_atomics = device.IsExtShaderAtomicInt64Supported(), 321 .support_int64_atomics = device.IsExtShaderAtomicInt64Supported(),
322 .support_derivative_control = true, 322 .support_derivative_control = true,
323 .support_geometry_shader_passthrough = device.IsNvGeometryShaderPassthroughSupported(), 323 .support_geometry_shader_passthrough = device.IsNvGeometryShaderPassthroughSupported(),
324 .support_native_ndc = device.IsExtDepthClipControlSupported(),
324 325
325 .warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyBiggerThanGuest(), 326 .warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyBiggerThanGuest(),
326 327