diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 634bbb450..1334882b5 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | |||
| @@ -127,6 +127,7 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, Tegra::Engines::Maxw | |||
| 127 | base_profile = Shader::Profile{ | 127 | base_profile = Shader::Profile{ |
| 128 | .supported_spirv = device.IsKhrSpirv1_4Supported() ? 0x00010400U : 0x00010000U, | 128 | .supported_spirv = device.IsKhrSpirv1_4Supported() ? 0x00010400U : 0x00010000U, |
| 129 | .unified_descriptor_binding = true, | 129 | .unified_descriptor_binding = true, |
| 130 | .support_descriptor_aliasing = true, | ||
| 130 | .support_vertex_instance_id = false, | 131 | .support_vertex_instance_id = false, |
| 131 | .support_float_controls = true, | 132 | .support_float_controls = true, |
| 132 | .support_separate_denorm_behavior = float_control.denormBehaviorIndependence == | 133 | .support_separate_denorm_behavior = float_control.denormBehaviorIndependence == |
| @@ -149,9 +150,11 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, Tegra::Engines::Maxw | |||
| 149 | device.IsExtShaderViewportIndexLayerSupported(), | 150 | device.IsExtShaderViewportIndexLayerSupported(), |
| 150 | .support_viewport_mask = device.IsNvViewportArray2Supported(), | 151 | .support_viewport_mask = device.IsNvViewportArray2Supported(), |
| 151 | .support_typeless_image_loads = device.IsFormatlessImageLoadSupported(), | 152 | .support_typeless_image_loads = device.IsFormatlessImageLoadSupported(), |
| 153 | .support_demote_to_helper_invocation = true, | ||
| 152 | .warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyBiggerThanGuest(), | 154 | .warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyBiggerThanGuest(), |
| 153 | .support_int64_atomics = device.IsExtShaderAtomicInt64Supported(), | 155 | .support_int64_atomics = device.IsExtShaderAtomicInt64Supported(), |
| 154 | .has_broken_spirv_clamp = driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR, | 156 | .has_broken_spirv_clamp = driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR, |
| 157 | .has_broken_unsigned_image_offsets = false, | ||
| 155 | .generic_input_types{}, | 158 | .generic_input_types{}, |
| 156 | .fixed_state_point_size{}, | 159 | .fixed_state_point_size{}, |
| 157 | .alpha_test_func{}, | 160 | .alpha_test_func{}, |
| @@ -312,7 +315,7 @@ std::unique_ptr<GraphicsPipeline> PipelineCache::CreateGraphicsPipeline( | |||
| 312 | std::array<const Shader::Info*, Maxwell::MaxShaderStage> infos{}; | 315 | std::array<const Shader::Info*, Maxwell::MaxShaderStage> infos{}; |
| 313 | std::array<vk::ShaderModule, Maxwell::MaxShaderStage> modules; | 316 | std::array<vk::ShaderModule, Maxwell::MaxShaderStage> modules; |
| 314 | 317 | ||
| 315 | u32 binding{0}; | 318 | Shader::Backend::SPIRV::Bindings binding; |
| 316 | for (size_t index = uses_vertex_a && uses_vertex_b ? 1 : 0; index < Maxwell::MaxShaderProgram; ++index) { | 319 | for (size_t index = uses_vertex_a && uses_vertex_b ? 1 : 0; index < Maxwell::MaxShaderProgram; ++index) { |
| 317 | if (key.unique_hashes[index] == 0) { | 320 | if (key.unique_hashes[index] == 0) { |
| 318 | continue; | 321 | continue; |
| @@ -398,7 +401,7 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline( | |||
| 398 | 401 | ||
| 399 | Shader::Maxwell::Flow::CFG cfg{env, pools.flow_block, env.StartAddress()}; | 402 | Shader::Maxwell::Flow::CFG cfg{env, pools.flow_block, env.StartAddress()}; |
| 400 | Shader::IR::Program program{TranslateProgram(pools.inst, pools.block, env, cfg)}; | 403 | Shader::IR::Program program{TranslateProgram(pools.inst, pools.block, env, cfg)}; |
| 401 | u32 binding{0}; | 404 | Shader::Backend::SPIRV::Bindings binding; |
| 402 | const std::vector<u32> code{EmitSPIRV(base_profile, program, binding)}; | 405 | const std::vector<u32> code{EmitSPIRV(base_profile, program, binding)}; |
| 403 | device.SaveShader(code); | 406 | device.SaveShader(code); |
| 404 | vk::ShaderModule spv_module{BuildShader(device, code)}; | 407 | vk::ShaderModule spv_module{BuildShader(device, code)}; |