radv: allocate larger shader memory slabs if needed
authorRhys Perry <pendingchaos02@gmail.com>
Tue, 14 Apr 2020 19:15:46 +0000 (20:15 +0100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 24 Apr 2020 18:52:54 +0000 (18:52 +0000)
Fixes dEQP-VK.ssbo.phys.layout.random.16bit.scalar.13 hang with ACO
(features needed for the test are implemented in a later commit)

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4639>

src/amd/vulkan/radv_shader.c

index 7ed697057b4ecc16ac940ea76759c917ec1c0072..42a664f7f369f9c4ba659878acd0480be7c95215 100644 (file)
@@ -641,7 +641,7 @@ radv_alloc_shader_memory(struct radv_device *device,
                        }
                        offset = align_u64(s->bo_offset + s->code_size, 256);
                }
-               if (slab->size - offset >= shader->code_size) {
+               if (offset <= slab->size && slab->size - offset >= shader->code_size) {
                        shader->bo = slab->bo;
                        shader->bo_offset = offset;
                        list_addtail(&shader->slab_list, &slab->shaders);
@@ -653,7 +653,7 @@ radv_alloc_shader_memory(struct radv_device *device,
        mtx_unlock(&device->shader_slab_mutex);
        struct radv_shader_slab *slab = calloc(1, sizeof(struct radv_shader_slab));
 
-       slab->size = 256 * 1024;
+       slab->size = MAX2(256 * 1024, shader->code_size);
        slab->bo = device->ws->buffer_create(device->ws, slab->size, 256,
                                             RADEON_DOMAIN_VRAM,
                                             RADEON_FLAG_NO_INTERPROCESS_SHARING |