diff options
| author | 2022-12-17 16:08:10 -0500 | |
|---|---|---|
| committer | 2022-12-17 16:08:10 -0500 | |
| commit | 5da72a891fb4c4ddddbeefc0b235079fa3830743 (patch) | |
| tree | cd4006e1a4e50c298ebb3004341191203ac11c56 /src/video_core/renderer_vulkan | |
| parent | Merge pull request #9461 from liamwhite/wanative (diff) | |
| parent | Vulkan: Add support for VK_EXT_depth_clip_control. (diff) | |
| download | yuzu-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.cpp | 18 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 1 |
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 | ||