radeon/winsys: increase the IB size for VM
Luckily, there is a kernel query, so use the size from that. It currently returns 256KB. It can be increased in the kernel. Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
parent
d587742650
commit
567394112d
|
@ -85,17 +85,22 @@ static boolean radeon_init_cs_context(struct radeon_cs_context *csc,
|
|||
{
|
||||
int i;
|
||||
|
||||
csc->buf = MALLOC(ws->ib_max_size);
|
||||
if (!csc->buf)
|
||||
return FALSE;
|
||||
csc->fd = ws->fd;
|
||||
csc->nrelocs = 512;
|
||||
csc->relocs_bo = (struct radeon_bo**)
|
||||
CALLOC(1, csc->nrelocs * sizeof(struct radeon_bo*));
|
||||
if (!csc->relocs_bo) {
|
||||
FREE(csc->buf);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
csc->relocs = (struct drm_radeon_cs_reloc*)
|
||||
CALLOC(1, csc->nrelocs * sizeof(struct drm_radeon_cs_reloc));
|
||||
if (!csc->relocs) {
|
||||
FREE(csc->buf);
|
||||
FREE(csc->relocs_bo);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -148,6 +153,7 @@ static void radeon_destroy_cs_context(struct radeon_cs_context *csc)
|
|||
radeon_cs_context_cleanup(csc);
|
||||
FREE(csc->relocs_bo);
|
||||
FREE(csc->relocs);
|
||||
FREE(csc->buf);
|
||||
}
|
||||
|
||||
|
||||
|
@ -188,7 +194,7 @@ radeon_drm_cs_create(struct radeon_winsys *rws,
|
|||
cs->cst = &cs->csc2;
|
||||
cs->base.buf = cs->csc->buf;
|
||||
cs->base.ring_type = ring_type;
|
||||
cs->base.max_dw = ARRAY_SIZE(cs->csc->buf);
|
||||
cs->base.max_dw = ws->ib_max_size / 4;
|
||||
|
||||
p_atomic_inc(&ws->num_cs);
|
||||
return &cs->base;
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "radeon_drm_bo.h"
|
||||
|
||||
struct radeon_cs_context {
|
||||
uint32_t buf[16 * 1024];
|
||||
uint32_t *buf;
|
||||
|
||||
int fd;
|
||||
struct drm_radeon_cs cs;
|
||||
|
|
|
@ -395,16 +395,20 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
|
|||
}
|
||||
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
if (ws->info.drm_minor >= 13) {
|
||||
uint32_t ib_vm_max_size;
|
||||
ws->ib_max_size = 64 * 1024;
|
||||
|
||||
if (ws->info.drm_minor >= 13) {
|
||||
ws->info.r600_virtual_address = TRUE;
|
||||
if (!radeon_get_drm_value(ws->fd, RADEON_INFO_VA_START, NULL,
|
||||
&ws->va_start))
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
if (!radeon_get_drm_value(ws->fd, RADEON_INFO_IB_VM_MAX_SIZE, NULL,
|
||||
&ib_vm_max_size))
|
||||
|
||||
if (radeon_get_drm_value(ws->fd, RADEON_INFO_IB_VM_MAX_SIZE, NULL,
|
||||
&ws->ib_max_size))
|
||||
ws->ib_max_size *= 4; /* the kernel returns the size in dwords */
|
||||
else
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
|
||||
radeon_get_drm_value(ws->fd, RADEON_INFO_VA_UNMAP_WORKING, NULL,
|
||||
&ws->va_unmap_working);
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ struct radeon_drm_winsys {
|
|||
|
||||
enum radeon_generation gen;
|
||||
struct radeon_info info;
|
||||
uint32_t ib_max_size;
|
||||
uint32_t va_start;
|
||||
uint32_t va_unmap_working;
|
||||
uint32_t accel_working2;
|
||||
|
|
Loading…
Reference in New Issue