diff options
Diffstat (limited to 'src/gallium/drivers/crocus/crocus_context.c')
-rw-r--r-- | src/gallium/drivers/crocus/crocus_context.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/gallium/drivers/crocus/crocus_context.c b/src/gallium/drivers/crocus/crocus_context.c index 44d947de84a..e8d52b6e3ab 100644 --- a/src/gallium/drivers/crocus/crocus_context.c +++ b/src/gallium/drivers/crocus/crocus_context.c @@ -32,7 +32,7 @@ #include "crocus_context.h" #include "crocus_resource.h" #include "crocus_screen.h" -#include "common/intel_defines.h" +#include "common/i915/intel_defines.h" #include "common/intel_sample_positions.h" /** @@ -40,7 +40,7 @@ */ static void crocus_set_debug_callback(struct pipe_context *ctx, - const struct pipe_debug_callback *cb) + const struct util_debug_callback *cb) { struct crocus_context *ice = (struct crocus_context *)ctx; @@ -61,7 +61,7 @@ crocus_init_identifier_bo(struct crocus_context *ice) ice->workaround_bo->kflags |= EXEC_OBJECT_CAPTURE; ice->workaround_offset = ALIGN( - intel_debug_write_identifiers(bo_map, 4096, "Crocus") + 8, 8); + intel_debug_write_identifiers(bo_map, 4096, "Crocus"), 32); crocus_bo_unmap(ice->workaround_bo); @@ -188,12 +188,21 @@ crocus_destroy_context(struct pipe_context *ctx) { struct crocus_context *ice = (struct crocus_context *)ctx; struct crocus_screen *screen = (struct crocus_screen *)ctx->screen; + + blorp_finish(&ice->blorp); + if (ctx->stream_uploader) u_upload_destroy(ctx->stream_uploader); if (ice->blitter) util_blitter_destroy(ice->blitter); screen->vtbl.destroy_state(ice); + + for (unsigned i = 0; i < ARRAY_SIZE(ice->shaders.scratch_bos); i++) { + for (unsigned j = 0; j < ARRAY_SIZE(ice->shaders.scratch_bos[i]); j++) + crocus_bo_unreference(ice->shaders.scratch_bos[i][j]); + } + crocus_destroy_program_cache(ice); u_upload_destroy(ice->query_buffer_uploader); @@ -258,7 +267,7 @@ crocus_create_context(struct pipe_screen *pscreen, void *priv, unsigned flags) ctx->stream_uploader = u_upload_create_default(ctx); if (!ctx->stream_uploader) { - free(ctx); + ralloc_free(ice); return NULL; } ctx->const_uploader = ctx->stream_uploader; @@ -277,6 +286,7 @@ crocus_create_context(struct pipe_screen *pscreen, void *priv, unsigned flags) crocus_init_program_functions(ctx); crocus_init_resource_functions(ctx); crocus_init_flush_functions(ctx); + crocus_init_perfquery_functions(ctx); crocus_init_program_cache(ice); @@ -325,8 +335,6 @@ crocus_create_context(struct pipe_screen *pscreen, void *priv, unsigned flags) return threaded_context_create(ctx, &screen->transfer_pool, crocus_replace_buffer_storage, NULL, /* TODO: asynchronous flushes? */ - NULL, - false, &ice->thrctx); } |