diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 40e53e0d594..99094d907ec 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2247,7 +2247,17 @@ radv_find_shader(struct radv_device *device, uint64_t pc) uint64_t start = radv_buffer_get_va(block->arena->bo) + block->offset; if (!block->freelist.prev && pc >= start && pc < start + block->size) { mtx_unlock(&device->shader_arena_mutex); - return (struct radv_shader *)block->freelist.next; + + struct radv_pipeline *pipeline = (struct radv_pipeline *)block->freelist.next; + for (uint32_t i = 0; i < MESA_VULKAN_SHADER_STAGES; i++) { + struct radv_shader *shader = pipeline->shaders[i]; + if (!shader) + continue; + + if (pc >= shader->va && + pc < shader->va + align(shader->code_size, RADV_SHADER_ALLOC_ALIGNMENT)) + return shader; + } } } }