X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ffreedreno%2Fa6xx%2Ffd6_context.c;h=f2e8e4eaf3d4ead3c4962ac806c917bcbbee42ae;hb=882d53d8e36592a39cde947e890969a81b2b1226;hp=ab10ccb113b8901936d36046aab86d4be5b37fa2;hpb=1b9d69410ce0708f526f5e846e369b781897d10f;p=mesa.git diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_context.c b/src/gallium/drivers/freedreno/a6xx/fd6_context.c index ab10ccb113b..f2e8e4eaf3d 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_context.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_context.c @@ -28,11 +28,13 @@ #include "freedreno_query_acc.h" #include "fd6_context.h" +#include "fd6_compute.h" #include "fd6_blend.h" #include "fd6_blitter.h" #include "fd6_draw.h" #include "fd6_emit.h" #include "fd6_gmem.h" +#include "fd6_image.h" #include "fd6_program.h" #include "fd6_query.h" #include "fd6_rasterizer.h" @@ -48,14 +50,16 @@ fd6_context_destroy(struct pipe_context *pctx) fd_context_destroy(pctx); - fd_bo_del(fd6_ctx->vs_pvt_mem); - fd_bo_del(fd6_ctx->fs_pvt_mem); - fd_bo_del(fd6_ctx->vsc_data); - fd_bo_del(fd6_ctx->vsc_data2); - fd_bo_del(fd6_ctx->blit_mem); + if (fd6_ctx->vsc_data) + fd_bo_del(fd6_ctx->vsc_data); + if (fd6_ctx->vsc_data2) + fd_bo_del(fd6_ctx->vsc_data2); + fd_bo_del(fd6_ctx->control_mem); fd_context_cleanup_common_vbos(&fd6_ctx->base); + ir3_cache_destroy(fd6_ctx->shader_cache); + fd6_texture_fini(pctx); free(fd6_ctx); @@ -83,6 +87,7 @@ fd6_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) return NULL; pctx = &fd6_ctx->base.base; + pctx->screen = pscreen; fd6_ctx->base.dev = fd_device_ref(screen->dev); fd6_ctx->base.screen = fd_screen(pscreen); @@ -93,6 +98,7 @@ fd6_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) pctx->create_depth_stencil_alpha_state = fd6_zsa_state_create; fd6_draw_init(pctx); + fd6_compute_init(pctx); fd6_gmem_init(pctx); fd6_texture_init(pctx); fd6_prog_init(pctx); @@ -102,22 +108,24 @@ fd6_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) if (!pctx) return NULL; - fd6_ctx->vs_pvt_mem = fd_bo_new(screen->dev, 0x2000, - DRM_FREEDRENO_GEM_TYPE_KMEM); + /* after fd_context_init() to override set_shader_images() */ + fd6_image_init(pctx); - fd6_ctx->fs_pvt_mem = fd_bo_new(screen->dev, 0x2000, - DRM_FREEDRENO_GEM_TYPE_KMEM); + util_blitter_set_texture_multisample(fd6_ctx->base.blitter, true); - fd6_ctx->vsc_data = fd_bo_new(screen->dev, - (A6XX_VSC_DATA_PITCH * 32) + 0x100, - DRM_FREEDRENO_GEM_TYPE_KMEM); + /* fd_context_init overwrites delete_rasterizer_state, so set this + * here. */ + pctx->delete_rasterizer_state = fd6_rasterizer_state_delete; + pctx->delete_depth_stencil_alpha_state = fd6_depth_stencil_alpha_state_delete; - fd6_ctx->vsc_data2 = fd_bo_new(screen->dev, - A6XX_VSC_DATA2_PITCH * 32, - DRM_FREEDRENO_GEM_TYPE_KMEM); + /* initial sizes for VSC buffers (or rather the per-pipe sizes + * which is used to derive entire buffer size: + */ + fd6_ctx->vsc_data_pitch = 0x440; + fd6_ctx->vsc_data2_pitch = 0x1040; - fd6_ctx->blit_mem = fd_bo_new(screen->dev, 0x1000, - DRM_FREEDRENO_GEM_TYPE_KMEM); + fd6_ctx->control_mem = fd_bo_new(screen->dev, 0x1000, + DRM_FREEDRENO_GEM_TYPE_KMEM, "control"); fd_context_setup_common_vbos(&fd6_ctx->base);