freedreno: Move fs functions after geometry pipeline stages
[mesa.git] / src / gallium / drivers / freedreno / a6xx / fd6_context.c
index 33f769619f316e39e5e8244e63c81462f1d4b4df..f2e8e4eaf3d4ead3c4962ac806c917bcbbee42ae 100644 (file)
 #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,11 +50,11 @@ 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);
 
@@ -85,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);
@@ -95,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);
@@ -104,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);