summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar FernandoS272021-11-25 11:42:20 +0100
committerGravatar Liam2022-12-13 21:39:18 -0500
commit0104e28fe4215468b8c444500e24b62d1ec0cc56 (patch)
tree382ce9bb47ed5d70feee2482dc0796f31ce3c0c6 /src/video_core/renderer_vulkan
parentMerge pull request #9425 from german77/german_unlimited (diff)
downloadyuzu-0104e28fe4215468b8c444500e24b62d1ec0cc56.tar.gz
yuzu-0104e28fe4215468b8c444500e24b62d1ec0cc56.tar.xz
yuzu-0104e28fe4215468b8c444500e24b62d1ec0cc56.zip
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 006128638..00d7dbeea 100644
--- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
@@ -634,23 +634,33 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
634 }; 634 };
635 std::array<VkViewportSwizzleNV, Maxwell::NumViewports> swizzles; 635 std::array<VkViewportSwizzleNV, Maxwell::NumViewports> swizzles;
636 std::ranges::transform(key.state.viewport_swizzles, swizzles.begin(), UnpackViewportSwizzle); 636 std::ranges::transform(key.state.viewport_swizzles, swizzles.begin(), UnpackViewportSwizzle);
637 const VkPipelineViewportSwizzleStateCreateInfoNV swizzle_ci{ 637 VkPipelineViewportSwizzleStateCreateInfoNV swizzle_ci{
638 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV, 638 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV,
639 .pNext = nullptr, 639 .pNext = nullptr,
640 .flags = 0, 640 .flags = 0,
641 .viewportCount = Maxwell::NumViewports, 641 .viewportCount = Maxwell::NumViewports,
642 .pViewportSwizzles = swizzles.data(), 642 .pViewportSwizzles = swizzles.data(),
643 }; 643 };
644 const VkPipelineViewportStateCreateInfo viewport_ci{ 644 VkPipelineViewportDepthClipControlCreateInfoEXT ndc_info{
645 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT,
646 .pNext = nullptr,
647 .negativeOneToOne = key.state.ndc_minus_one_to_one.Value() != 0 ? VK_TRUE : VK_FALSE,
648 };
649 VkPipelineViewportStateCreateInfo viewport_ci{
645 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, 650 .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
646 .pNext = device.IsNvViewportSwizzleSupported() ? &swizzle_ci : nullptr, 651 .pNext = nullptr,
647 .flags = 0, 652 .flags = 0,
648 .viewportCount = Maxwell::NumViewports, 653 .viewportCount = Maxwell::NumViewports,
649 .pViewports = nullptr, 654 .pViewports = nullptr,
650 .scissorCount = Maxwell::NumViewports, 655 .scissorCount = Maxwell::NumViewports,
651 .pScissors = nullptr, 656 .pScissors = nullptr,
652 }; 657 };
653 658 if (device.IsNvViewportSwizzleSupported()) {
659 swizzle_ci.pNext = std::exchange(viewport_ci.pNext, &swizzle_ci);
660 }
661 if (device.IsExtDepthClipControlSupported()) {
662 ndc_info.pNext = std::exchange(viewport_ci.pNext, &ndc_info);
663 }
654 VkPipelineRasterizationStateCreateInfo rasterization_ci{ 664 VkPipelineRasterizationStateCreateInfo rasterization_ci{
655 .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, 665 .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
656 .pNext = nullptr, 666 .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 81f5f3e11..66c9f959a 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