diff options
-rw-r--r-- | src/gallium/drivers/panfrost/ci/expected-failures.txt | 1 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 24 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_drm.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_job.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.c | 39 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_screen.c | 8 |
7 files changed, 44 insertions, 37 deletions
diff --git a/src/gallium/drivers/panfrost/ci/expected-failures.txt b/src/gallium/drivers/panfrost/ci/expected-failures.txt index cd86b1c6638..350d4b529ff 100644 --- a/src/gallium/drivers/panfrost/ci/expected-failures.txt +++ b/src/gallium/drivers/panfrost/ci/expected-failures.txt @@ -281,7 +281,6 @@ dEQP-GLES2.functional.fragment_ops.random.97 dEQP-GLES2.functional.fragment_ops.random.98 dEQP-GLES2.functional.fragment_ops.random.99 dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer -dEQP-GLES2.functional.lifetime.attach.deleted_output.texture_framebuffer dEQP-GLES2.functional.negative_api.shader.uniform_matrixfv_invalid_transpose dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 3b2b6304596..e4a04dd821f 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -2020,7 +2020,7 @@ panfrost_set_constant_buffer( pbuf->size = sz; if (pbuf->buffer) { - free(pbuf->buffer); + ralloc_free(pbuf->buffer); pbuf->buffer = NULL; } @@ -2047,7 +2047,7 @@ panfrost_set_constant_buffer( /* Copy the constant buffer into the driver context for later upload */ - pbuf->buffer = malloc(sz); + pbuf->buffer = rzalloc_size(ctx, sz); memcpy(pbuf->buffer, cpu + buf->buffer_offset, sz); } @@ -2095,7 +2095,7 @@ panfrost_create_sampler_view( struct pipe_resource *texture, const struct pipe_sampler_view *template) { - struct panfrost_sampler_view *so = CALLOC_STRUCT(panfrost_sampler_view); + struct panfrost_sampler_view *so = rzalloc(pctx, struct panfrost_sampler_view); int bytes_per_pixel = util_format_get_blocksize(texture->format); pipe_reference(NULL, &texture->reference); @@ -2233,7 +2233,7 @@ panfrost_sampler_view_destroy( struct pipe_sampler_view *view) { pipe_resource_reference(&view->texture, NULL); - free(view); + ralloc_free(view); } static void @@ -2326,7 +2326,7 @@ panfrost_create_blend_state(struct pipe_context *pipe, const struct pipe_blend_state *blend) { struct panfrost_context *ctx = pan_context(pipe); - struct panfrost_blend_state *so = CALLOC_STRUCT(panfrost_blend_state); + struct panfrost_blend_state *so = rzalloc(ctx, struct panfrost_blend_state); so->base = *blend; /* TODO: The following features are not yet implemented */ @@ -2376,7 +2376,7 @@ panfrost_delete_blend_state(struct pipe_context *pipe, DBG("Deleting blend state leak blend shaders bytecode\n"); } - free(blend); + ralloc_free(blend); } static void @@ -2522,6 +2522,8 @@ panfrost_destroy(struct pipe_context *pipe) screen->driver->free_slab(screen, &panfrost->shaders); screen->driver->free_slab(screen, &panfrost->tiler_heap); screen->driver->free_slab(screen, &panfrost->tiler_polygon_list); + + ralloc_free(pipe); } static struct pipe_query * @@ -2529,7 +2531,7 @@ panfrost_create_query(struct pipe_context *pipe, unsigned type, unsigned index) { - struct panfrost_query *q = CALLOC_STRUCT(panfrost_query); + struct panfrost_query *q = rzalloc(pipe, struct panfrost_query); q->type = type; q->index = index; @@ -2540,7 +2542,7 @@ panfrost_create_query(struct pipe_context *pipe, static void panfrost_destroy_query(struct pipe_context *pipe, struct pipe_query *q) { - FREE(q); + ralloc_free(q); } static boolean @@ -2624,7 +2626,7 @@ panfrost_create_stream_output_target(struct pipe_context *pctx, { struct pipe_stream_output_target *target; - target = CALLOC_STRUCT(pipe_stream_output_target); + target = rzalloc(pctx, struct pipe_stream_output_target); if (!target) return NULL; @@ -2644,7 +2646,7 @@ panfrost_stream_output_target_destroy(struct pipe_context *pctx, struct pipe_stream_output_target *target) { pipe_resource_reference(&target->buffer, NULL); - free(target); + ralloc_free(target); } static void @@ -2687,7 +2689,7 @@ panfrost_setup_hardware(struct panfrost_context *ctx) struct pipe_context * panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags) { - struct panfrost_context *ctx = CALLOC_STRUCT(panfrost_context); + struct panfrost_context *ctx = rzalloc(screen, struct panfrost_context); struct panfrost_screen *pscreen = pan_screen(screen); memset(ctx, 0, sizeof(*ctx)); struct pipe_context *gallium = (struct pipe_context *) ctx; diff --git a/src/gallium/drivers/panfrost/pan_drm.c b/src/gallium/drivers/panfrost/pan_drm.c index cacc6a7f715..aed50477ff7 100644 --- a/src/gallium/drivers/panfrost/pan_drm.c +++ b/src/gallium/drivers/panfrost/pan_drm.c @@ -124,7 +124,7 @@ panfrost_drm_free_slab(struct panfrost_screen *screen, struct panfrost_memory *m static struct panfrost_bo * panfrost_drm_import_bo(struct panfrost_screen *screen, struct winsys_handle *whandle) { - struct panfrost_bo *bo = CALLOC_STRUCT(panfrost_bo); + struct panfrost_bo *bo = rzalloc(screen, struct panfrost_bo); struct panfrost_drm *drm = (struct panfrost_drm *)screen->driver; struct drm_panfrost_get_bo_offset get_bo_offset = {0,}; struct drm_panfrost_mmap_bo mmap_bo = {0,}; diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index 1882cc4faf3..96f05c66354 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -269,13 +269,11 @@ panfrost_job_hash(const void *key) void panfrost_job_init(struct panfrost_context *ctx) { - /* TODO: Don't leak */ - ctx->jobs = _mesa_hash_table_create(NULL, + ctx->jobs = _mesa_hash_table_create(ctx, panfrost_job_hash, panfrost_job_compare); - ctx->write_jobs = _mesa_hash_table_create(NULL, + ctx->write_jobs = _mesa_hash_table_create(ctx, _mesa_hash_pointer, _mesa_key_pointer_equal); - } diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index ac83f38b327..332208d4e2f 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -58,7 +58,7 @@ panfrost_resource_from_handle(struct pipe_screen *pscreen, assert(whandle->type == WINSYS_HANDLE_TYPE_FD); - rsc = CALLOC_STRUCT(panfrost_resource); + rsc = rzalloc(pscreen, struct panfrost_resource); if (!rsc) return NULL; @@ -138,7 +138,7 @@ panfrost_create_surface(struct pipe_context *pipe, { struct pipe_surface *ps = NULL; - ps = CALLOC_STRUCT(pipe_surface); + ps = rzalloc(pipe, struct pipe_surface); if (ps) { pipe_reference_init(&ps->reference, 1); @@ -173,7 +173,7 @@ panfrost_surface_destroy(struct pipe_context *pipe, { assert(surf->texture); pipe_resource_reference(&surf->texture, NULL); - free(surf); + ralloc_free(surf); } static void @@ -265,7 +265,7 @@ panfrost_setup_slices(const struct pipe_resource *tmpl, struct panfrost_bo *bo) static struct panfrost_bo * panfrost_create_bo(struct panfrost_screen *screen, const struct pipe_resource *template) { - struct panfrost_bo *bo = CALLOC_STRUCT(panfrost_bo); + struct panfrost_bo *bo = rzalloc(screen, struct panfrost_bo); pipe_reference_init(&bo->reference, 1); /* Based on the usage, figure out what storing will be used. There are @@ -313,7 +313,7 @@ static struct pipe_resource * panfrost_resource_create(struct pipe_screen *screen, const struct pipe_resource *template) { - struct panfrost_resource *so = CALLOC_STRUCT(panfrost_resource); + struct panfrost_resource *so = rzalloc(screen, struct panfrost_resource); struct panfrost_screen *pscreen = (struct panfrost_screen *) screen; so->base = *template; @@ -369,10 +369,8 @@ panfrost_resource_create(struct pipe_screen *screen, } static void -panfrost_destroy_bo(struct panfrost_screen *screen, struct panfrost_bo *pbo) +panfrost_destroy_bo(struct panfrost_screen *screen, struct panfrost_bo *bo) { - struct panfrost_bo *bo = (struct panfrost_bo *)pbo; - if ((bo->layout == PAN_LINEAR || bo->layout == PAN_TILED) && !bo->imported) { struct panfrost_memory mem = { @@ -404,6 +402,8 @@ panfrost_destroy_bo(struct panfrost_screen *screen, struct panfrost_bo *pbo) if (bo->imported) { screen->driver->free_imported_bo(screen, bo); } + + ralloc_free(bo); } void @@ -436,7 +436,7 @@ panfrost_resource_destroy(struct pipe_screen *screen, panfrost_bo_unreference(screen, rsrc->bo); util_range_destroy(&rsrc->valid_buffer_range); - FREE(rsrc); + ralloc_free(rsrc); } static void * @@ -451,7 +451,7 @@ panfrost_transfer_map(struct pipe_context *pctx, struct panfrost_resource *rsrc = pan_resource(resource); struct panfrost_bo *bo = rsrc->bo; - struct panfrost_gtransfer *transfer = CALLOC_STRUCT(panfrost_gtransfer); + struct panfrost_gtransfer *transfer = rzalloc(pctx, struct panfrost_gtransfer); transfer->base.level = level; transfer->base.usage = usage; transfer->base.box = *box; @@ -508,7 +508,7 @@ panfrost_transfer_map(struct pipe_context *pctx, transfer->base.layer_stride = transfer->base.stride * box->height; /* TODO: Reads */ - transfer->map = malloc(transfer->base.layer_stride * box->depth); + transfer->map = rzalloc_size(transfer, transfer->base.layer_stride * box->depth); return transfer->map; } else { @@ -569,8 +569,6 @@ panfrost_transfer_unmap(struct pipe_context *pctx, panfrost_tile_texture(screen, prsrc, trans); } } - - free(trans->map); } @@ -581,8 +579,8 @@ panfrost_transfer_unmap(struct pipe_context *pctx, /* Derefence the resource */ pipe_resource_reference(&transfer->resource, NULL); - /* Transfer itself is CALLOCed at the moment */ - free(transfer); + /* Transfer itself is RALLOCed at the moment */ + ralloc_free(transfer); } static void @@ -603,7 +601,7 @@ static struct pb_slab * panfrost_slab_alloc(void *priv, unsigned heap, unsigned entry_size, unsigned group_index) { struct panfrost_screen *screen = (struct panfrost_screen *) priv; - struct panfrost_memory *mem = CALLOC_STRUCT(panfrost_memory); + struct panfrost_memory *mem = rzalloc(screen, struct panfrost_memory); size_t slab_size = (1 << (MAX_SLAB_ENTRY_SIZE + 1)); @@ -613,7 +611,7 @@ panfrost_slab_alloc(void *priv, unsigned heap, unsigned entry_size, unsigned gro LIST_INITHEAD(&mem->slab.free); for (unsigned i = 0; i < mem->slab.num_entries; ++i) { /* Create a slab entry */ - struct panfrost_memory_entry *entry = CALLOC_STRUCT(panfrost_memory_entry); + struct panfrost_memory_entry *entry = rzalloc(mem, struct panfrost_memory_entry); entry->offset = entry_size * i; entry->base.slab = &mem->slab; @@ -644,6 +642,7 @@ panfrost_slab_free(void *priv, struct pb_slab *slab) struct panfrost_screen *screen = (struct panfrost_screen *) priv; screen->driver->free_slab(screen, mem); + ralloc_free(mem); } static void @@ -709,6 +708,12 @@ panfrost_resource_screen_init(struct panfrost_screen *pscreen) } void +panfrost_resource_screen_deinit(struct panfrost_screen *pscreen) +{ + pb_slabs_deinit(&pscreen->slabs); +} + +void panfrost_resource_context_init(struct pipe_context *pctx) { pctx->transfer_map = u_transfer_helper_transfer_map; diff --git a/src/gallium/drivers/panfrost/pan_resource.h b/src/gallium/drivers/panfrost/pan_resource.h index d75b68c2ebc..114e283889b 100644 --- a/src/gallium/drivers/panfrost/pan_resource.h +++ b/src/gallium/drivers/panfrost/pan_resource.h @@ -122,6 +122,7 @@ pan_transfer(struct pipe_transfer *p) } void panfrost_resource_screen_init(struct panfrost_screen *screen); +void panfrost_resource_screen_deinit(struct panfrost_screen *screen); void panfrost_resource_context_init(struct pipe_context *pctx); diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c index 70bff565930..5d3acc0a0dd 100644 --- a/src/gallium/drivers/panfrost/pan_screen.c +++ b/src/gallium/drivers/panfrost/pan_screen.c @@ -514,9 +514,11 @@ panfrost_is_format_supported( struct pipe_screen *screen, static void -panfrost_destroy_screen( struct pipe_screen *screen ) +panfrost_destroy_screen(struct pipe_screen *pscreen) { - FREE(screen); + struct panfrost_screen *screen = pan_screen(pscreen); + panfrost_resource_screen_deinit(screen); + ralloc_free(screen); } static void @@ -565,7 +567,7 @@ panfrost_screen_get_compiler_options(struct pipe_screen *pscreen, struct pipe_screen * panfrost_create_screen(int fd, struct renderonly *ro) { - struct panfrost_screen *screen = CALLOC_STRUCT(panfrost_screen); + struct panfrost_screen *screen = rzalloc(NULL, struct panfrost_screen); pan_debug = debug_get_option_pan_debug(); |