diff options
author | bunnei <bunneidev@gmail.com> | 2020-04-23 04:09:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-23 04:09:38 +0200 |
commit | bf2ddb8fd5feaeaf2806fe102de8e3089f893137 (patch) | |
tree | b97d388da23608c00808b6662e3c0564fc4f6d59 /src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | |
parent | Merge pull request #3767 from ReinUsesLisp/point-size-pipeline (diff) | |
parent | GL_Fence_Manager: use GL_TIMEOUT_IGNORED instead of a loop, (diff) | |
download | yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.gz yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.bz2 yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.lz yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.xz yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.zst yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_pipeline_cache.cpp')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index a792130fd..91b1b16a5 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -207,7 +207,7 @@ std::array<Shader, Maxwell::MaxShaderProgram> VKPipelineCache::GetShaders() { const GPUVAddr program_addr{GetShaderAddress(system, program)}; const std::optional cpu_addr = memory_manager.GpuToCpuAddress(program_addr); ASSERT(cpu_addr); - auto shader = cpu_addr ? TryGet(*cpu_addr) : nullptr; + auto shader = cpu_addr ? TryGet(*cpu_addr) : null_shader; if (!shader) { const auto host_ptr{memory_manager.GetPointer(program_addr)}; @@ -218,7 +218,11 @@ std::array<Shader, Maxwell::MaxShaderProgram> VKPipelineCache::GetShaders() { shader = std::make_shared<CachedShader>(system, stage, program_addr, *cpu_addr, std::move(code), stage_offset); - Register(shader); + if (cpu_addr) { + Register(shader); + } else { + null_shader = shader; + } } shaders[index] = std::move(shader); } @@ -261,7 +265,7 @@ VKComputePipeline& VKPipelineCache::GetComputePipeline(const ComputePipelineCach const auto cpu_addr = memory_manager.GpuToCpuAddress(program_addr); ASSERT(cpu_addr); - auto shader = cpu_addr ? TryGet(*cpu_addr) : nullptr; + auto shader = cpu_addr ? TryGet(*cpu_addr) : null_kernel; if (!shader) { // No shader found - create a new one const auto host_ptr = memory_manager.GetPointer(program_addr); @@ -271,7 +275,11 @@ VKComputePipeline& VKPipelineCache::GetComputePipeline(const ComputePipelineCach shader = std::make_shared<CachedShader>(system, Tegra::Engines::ShaderType::Compute, program_addr, *cpu_addr, std::move(code), kernel_main_offset); - Register(shader); + if (cpu_addr) { + Register(shader); + } else { + null_kernel = shader; + } } Specialization specialization; |