From 136fd5cd2e857cc455113aff3c7c931183484774 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 25 Aug 2020 12:52:45 -0400 Subject: [PATCH] panfrost: Don't call panfrost_vt_init for compute Given we emit shared memory immediately after anyway, the function call doesn't do anything but zero-initializing the payload and setting some magic bits. We can do that ourselves at the call site. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 2 +- src/gallium/drivers/panfrost/pan_cmdstream.h | 3 +++ src/gallium/drivers/panfrost/pan_compute.c | 7 ++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 7d7ec775dc0..610e7f89c6c 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -51,7 +51,7 @@ panfrost_bo_access_for_stage(enum pipe_shader_type stage) PAN_BO_ACCESS_VERTEX_TILER; } -static mali_ptr +mali_ptr panfrost_vt_emit_shared_memory(struct panfrost_batch *batch) { struct panfrost_device *dev = pan_device(batch->ctx->base.screen); diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.h b/src/gallium/drivers/panfrost/pan_cmdstream.h index 3603dcc2bc3..18ecee6a375 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.h +++ b/src/gallium/drivers/panfrost/pan_cmdstream.h @@ -81,6 +81,9 @@ mali_ptr panfrost_emit_vertex_data(struct panfrost_batch *batch, mali_ptr *buffers); +mali_ptr +panfrost_vt_emit_shared_memory(struct panfrost_batch *batch); + void panfrost_emit_varying_descriptor(struct panfrost_batch *batch, unsigned vertex_count, diff --git a/src/gallium/drivers/panfrost/pan_compute.c b/src/gallium/drivers/panfrost/pan_compute.c index 14ec88e70f3..bccd249c31d 100644 --- a/src/gallium/drivers/panfrost/pan_compute.c +++ b/src/gallium/drivers/panfrost/pan_compute.c @@ -28,6 +28,7 @@ #include "pan_context.h" #include "pan_cmdstream.h" +#include "panfrost-quirks.h" #include "pan_bo.h" #include "util/u_memory.h" #include "nir_serialize.h" @@ -95,6 +96,7 @@ panfrost_launch_grid(struct pipe_context *pipe, const struct pipe_grid_info *info) { struct panfrost_context *ctx = pan_context(pipe); + struct panfrost_device *dev = pan_device(pipe->screen); /* TODO: Do we want a special compute-only batch? */ struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); @@ -102,7 +104,7 @@ panfrost_launch_grid(struct pipe_context *pipe, ctx->compute_grid = info; /* TODO: Stub */ - struct midgard_payload_vertex_tiler payload; + struct midgard_payload_vertex_tiler payload = { 0 }; /* We implement OpenCL inputs as uniforms (or a UBO -- same thing), so * reuse the graphics path for this by lowering to Gallium */ @@ -117,9 +119,8 @@ panfrost_launch_grid(struct pipe_context *pipe, if (info->input) pipe->set_constant_buffer(pipe, PIPE_SHADER_COMPUTE, 0, &ubuf); - panfrost_vt_init(ctx, PIPE_SHADER_COMPUTE, &payload.prefix, &payload.postfix); - mali_ptr push = 0; + payload.postfix.gl_enables = (dev->quirks & IS_BIFROST) ? 0x2 : 0x6; payload.postfix.shader = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_COMPUTE); payload.postfix.uniform_buffers = panfrost_emit_const_buf(batch, PIPE_SHADER_COMPUTE, &push); payload.postfix.uniforms = push; -- 2.30.2