|
|
|
@ -788,6 +788,19 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline( |
|
|
|
} |
|
|
|
|
|
|
|
auto program{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)}; |
|
|
|
const VkDriverIdKHR driver_id = device.GetDriverID(); |
|
|
|
const bool needs_shared_mem_clamp = |
|
|
|
driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY || |
|
|
|
driver_id == VK_DRIVER_ID_ARM_PROPRIETARY; |
|
|
|
const u32 max_shared_memory = device.GetMaxComputeSharedMemorySize(); |
|
|
|
if (needs_shared_mem_clamp && program.shared_memory_size > max_shared_memory) { |
|
|
|
LOG_WARNING(Render_Vulkan, |
|
|
|
"Compute shader 0x{:016x} requests {}KB shared memory but device max is {}KB - clamping", |
|
|
|
key.unique_hash, |
|
|
|
program.shared_memory_size / 1024, |
|
|
|
max_shared_memory / 1024); |
|
|
|
program.shared_memory_size = max_shared_memory; |
|
|
|
} |
|
|
|
const std::vector<u32> code{EmitSPIRV(profile, program, this->optimize_spirv_output)}; |
|
|
|
device.SaveShader(code); |
|
|
|
vk::ShaderModule spv_module{BuildShader(device, code)}; |
|
|
|
|