libdrm-radeon: be verbose on bo failure and cleanup cs a bit

main
Jerome Glisse 2008-11-10 22:18:22 +01:00
parent 7abb8416a7
commit 72997fb372
2 changed files with 44 additions and 42 deletions

View File

@ -99,11 +99,15 @@ static struct radeon_bo *bo_open(struct radeon_bo_manager *bom,
&args, sizeof(args));
bo->base.handle = args.handle;
if (r) {
fprintf(stderr, "Failed to allocate :\n");
fprintf(stderr, " size : %d bytes\n", size);
fprintf(stderr, " alignment : %d bytes\n", alignment);
fprintf(stderr, " domains : %d\n", bo->base.domains);
free(bo);
return NULL;
}
}
radeon_bo_ref(bo);
radeon_bo_ref((struct radeon_bo*)bo);
return (struct radeon_bo*)bo;
}
@ -137,7 +141,6 @@ static int bo_map(struct radeon_bo *bo, int write)
struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
struct drm_radeon_gem_mmap args;
int r;
uint8_t *tt;
if (bo_gem->map_count++ != 0) {
return 0;
@ -152,8 +155,10 @@ static int bo_map(struct radeon_bo *bo, int write)
sizeof(args));
if (!r) {
bo->ptr = (void *)(unsigned long)args.addr_ptr;
} else {
fprintf(stderr, "error mapping %p 0x%08X (error = %d)\n",
bo, bo->handle, r);
}
tt = bo->ptr;
return r;
}

View File

@ -58,8 +58,8 @@ struct cs_gem {
struct radeon_bo **relocs_bo;
};
static struct radeon_cs *cs_create(struct radeon_cs_manager *csm,
uint32_t ndw)
static struct radeon_cs *cs_gem_create(struct radeon_cs_manager *csm,
uint32_t ndw)
{
struct cs_gem *csg;
@ -104,7 +104,7 @@ static struct radeon_cs *cs_create(struct radeon_cs_manager *csm,
return (struct radeon_cs*)csg;
}
static int cs_write_dword(struct radeon_cs *cs, uint32_t dword)
static int cs_gem_write_dword(struct radeon_cs *cs, uint32_t dword)
{
struct cs_gem *csg = (struct cs_gem*)cs;
if (cs->cdw >= cs->ndw) {
@ -123,11 +123,11 @@ static int cs_write_dword(struct radeon_cs *cs, uint32_t dword)
return 0;
}
static int cs_write_reloc(struct radeon_cs *cs,
struct radeon_bo *bo,
uint32_t soffset,
uint32_t eoffset,
uint32_t domains)
static int cs_gem_write_reloc(struct radeon_cs *cs,
struct radeon_bo *bo,
uint32_t soffset,
uint32_t eoffset,
uint32_t domains)
{
struct cs_gem *csg = (struct cs_gem*)cs;
struct cs_reloc_gem *reloc;
@ -162,8 +162,8 @@ static int cs_write_reloc(struct radeon_cs *cs,
break;
}
reloc->cnt++;
cs_write_dword(cs, 0xc0001000);
cs_write_dword(cs, idx);
cs_gem_write_dword(cs, 0xc0001000);
cs_gem_write_dword(cs, idx);
return 0;
}
}
@ -208,31 +208,31 @@ static int cs_write_reloc(struct radeon_cs *cs,
csg->chunks[1].length_dw += 4;
radeon_bo_ref(bo);
cs->relocs_total_size += bo->size;
cs_write_dword(cs, 0xc0001000);
cs_write_dword(cs, idx);
cs_gem_write_dword(cs, 0xc0001000);
cs_gem_write_dword(cs, idx);
return 0;
}
static int cs_begin(struct radeon_cs *cs,
uint32_t ndw,
const char *file,
const char *func,
int line)
static int cs_gem_begin(struct radeon_cs *cs,
uint32_t ndw,
const char *file,
const char *func,
int line)
{
return 0;
}
static int cs_end(struct radeon_cs *cs,
const char *file,
const char *func,
int line)
static int cs_gem_end(struct radeon_cs *cs,
const char *file,
const char *func,
int line)
{
cs->section = 0;
return 0;
}
static int cs_emit(struct radeon_cs *cs)
static int cs_gem_emit(struct radeon_cs *cs)
{
struct cs_gem *csg = (struct cs_gem*)cs;
uint64_t chunk_array[2];
@ -249,13 +249,10 @@ static int cs_emit(struct radeon_cs *cs)
if (r) {
return r;
}
for(i = 0; i < cs->crelocs; i++) {
radeon_bo_unref(csg->relocs_bo[i]);
}
return 0;
}
static int cs_destroy(struct radeon_cs *cs)
static int cs_gem_destroy(struct radeon_cs *cs)
{
struct cs_gem *csg = (struct cs_gem*)cs;
@ -266,7 +263,7 @@ static int cs_destroy(struct radeon_cs *cs)
return 0;
}
static int cs_erase(struct radeon_cs *cs)
static int cs_gem_erase(struct radeon_cs *cs)
{
struct cs_gem *csg = (struct cs_gem*)cs;
@ -279,21 +276,21 @@ static int cs_erase(struct radeon_cs *cs)
return 0;
}
static int cs_need_flush(struct radeon_cs *cs)
static int cs_gem_need_flush(struct radeon_cs *cs)
{
return (cs->relocs_total_size > (16*1024*1024));
}
struct radeon_cs_funcs radeon_cs_funcs = {
cs_create,
cs_write_dword,
cs_write_reloc,
cs_begin,
cs_end,
cs_emit,
cs_destroy,
cs_erase,
cs_need_flush
static struct radeon_cs_funcs radeon_cs_gem_funcs = {
cs_gem_create,
cs_gem_write_dword,
cs_gem_write_reloc,
cs_gem_begin,
cs_gem_end,
cs_gem_emit,
cs_gem_destroy,
cs_gem_erase,
cs_gem_need_flush
};
struct radeon_cs_manager *radeon_cs_manager_gem(int fd)
@ -305,7 +302,7 @@ struct radeon_cs_manager *radeon_cs_manager_gem(int fd)
if (csm == NULL) {
return NULL;
}
csm->funcs = &radeon_cs_funcs;
csm->funcs = &radeon_cs_gem_funcs;
csm->fd = fd;
return csm;
}