gallium/radeon: relax requirements on VRAM placements on APUs

This makes Tonga with vramlimit=128 2x faster in Heaven.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
This commit is contained in:
Marek Olšák 2016-04-11 19:56:07 +02:00
parent a57309f807
commit 5a4b74d1ba
4 changed files with 37 additions and 0 deletions

View file

@ -163,6 +163,14 @@ bool r600_init_resource(struct r600_common_screen *rscreen,
flags |= RADEON_FLAG_NO_CPU_ACCESS;
}
/* If VRAM is just stolen system memory, allow both VRAM and GTT,
* whichever has free space. If a buffer is evicted from VRAM to GTT,
* it will stay there.
*/
if (!rscreen->info.has_dedicated_vram &&
res->domains == RADEON_DOMAIN_VRAM)
res->domains = RADEON_DOMAIN_VRAM_GTT;
if (rscreen->debug_flags & DBG_NO_WC)
flags &= ~RADEON_FLAG_GTT_WC;

View file

@ -245,6 +245,7 @@ struct radeon_info {
enum chip_class chip_class;
uint64_t gart_size;
uint64_t vram_size;
bool has_dedicated_vram;
boolean has_virtual_memory;
bool gfx_ib_pad_with_type2;
boolean has_sdma;

View file

@ -256,6 +256,10 @@ static boolean do_winsys_init(struct amdgpu_winsys *ws, int fd)
goto fail;
}
/* Set which chips have dedicated VRAM. */
ws->info.has_dedicated_vram =
!(ws->amdinfo.ids_flags & AMDGPU_IDS_FLAGS_FUSION);
/* Set hardware information. */
ws->info.gart_size = gtt.heap_size;
ws->info.vram_size = vram.heap_size;

View file

@ -297,6 +297,30 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
break;
}
/* Set which chips don't have dedicated VRAM. */
switch (ws->info.family) {
case CHIP_RS400:
case CHIP_RC410:
case CHIP_RS480:
case CHIP_RS600:
case CHIP_RS690:
case CHIP_RS740:
case CHIP_RS780:
case CHIP_RS880:
case CHIP_PALM:
case CHIP_SUMO:
case CHIP_SUMO2:
case CHIP_ARUBA:
case CHIP_KAVERI:
case CHIP_KABINI:
case CHIP_MULLINS:
ws->info.has_dedicated_vram = false;
break;
default:
ws->info.has_dedicated_vram = true;
}
/* Check for dma */
ws->info.has_sdma = FALSE;
/* DMA is disabled on R700. There is IB corruption and hangs. */