diff options
author | Nicolai Hähnle <[email protected]> | 2017-02-19 10:42:57 +0100 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2017-02-21 10:43:38 +0100 |
commit | 550125e1e73e2441989da11495057a20dd9dad44 (patch) | |
tree | 41c92b0eb90e0e496b90a1d78487cf86a5d49837 /src/gallium | |
parent | 8cff852ae2481245a81854073e366892eb199963 (diff) |
winsys/amdgpu: reduce max_alloc_size based on GTT limits
Allocating huge buffers in VRAM is not a problem, but when those buffers
start being migrated, the kernel runs into errors because it cannot split
those buffer up for moving through GTT.
This should fix intermittent failures of
GL45-CTS.texture_buffer.texture_buffer_max_size
Cc: [email protected]
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index 6511c4855d8..da9371deea0 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -331,8 +331,10 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd) ws->info.gart_size = gtt.heap_size; ws->info.vram_size = vram.heap_size; ws->info.vram_vis_size = vram_vis.heap_size; - /* The kernel can split large buffers, so we can do large allocations. */ - ws->info.max_alloc_size = MAX2(ws->info.vram_size, ws->info.gart_size) * 0.9; + /* The kernel can split large buffers in VRAM but not in GTT, so large + * allocations can fail or cause buffer movement failures in the kernel. + */ + ws->info.max_alloc_size = MIN2(ws->info.vram_size * 0.9, ws->info.gart_size * 0.7); /* convert the shader clock from KHz to MHz */ ws->info.max_shader_clock = ws->amdinfo.max_engine_clk / 1000; ws->info.max_se = ws->amdinfo.num_shader_engines; |