Mesa (main): panfrost: Express dependencies as resources, not BOs
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jul 6 19:10:17 UTC 2021
Module: Mesa
Branch: main
Commit: bef10747006b784310692ad99b0bde6b50eb9450
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bef10747006b784310692ad99b0bde6b50eb9450
Author: Alyssa Rosenzweig <alyssa at rosenzweig.io>
Date: Mon May 17 14:42:13 2021 -0400
panfrost: Express dependencies as resources, not BOs
This is a more ergnomic API, and will allow further optimizations.
Signed-off-by: Alyssa Rosenzweig <alyssa at rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11077>
---
src/gallium/drivers/panfrost/pan_blend_cso.c | 7 +-
src/gallium/drivers/panfrost/pan_blit.c | 21 ++----
src/gallium/drivers/panfrost/pan_cmdstream.c | 96 +++++-----------------------
src/gallium/drivers/panfrost/pan_compute.c | 4 +-
src/gallium/drivers/panfrost/pan_context.c | 19 ++----
src/gallium/drivers/panfrost/pan_job.c | 94 +++++++++++++++++----------
src/gallium/drivers/panfrost/pan_job.h | 15 ++++-
7 files changed, 105 insertions(+), 151 deletions(-)
diff --git a/src/gallium/drivers/panfrost/pan_blend_cso.c b/src/gallium/drivers/panfrost/pan_blend_cso.c
index 904c93c42f6..7d63b807fb3 100644
--- a/src/gallium/drivers/panfrost/pan_blend_cso.c
+++ b/src/gallium/drivers/panfrost/pan_blend_cso.c
@@ -187,11 +187,8 @@ panfrost_get_blend(struct panfrost_batch *batch, unsigned rti, struct panfrost_b
/* Upload the shader, sharing a BO */
if (!(*bo)) {
- *bo = panfrost_batch_create_bo(batch, 4096,
- PAN_BO_EXECUTE,
- PAN_BO_ACCESS_PRIVATE |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_FRAGMENT, "Blend shader");
+ *bo = panfrost_batch_create_bo(batch, 4096, PAN_BO_EXECUTE,
+ PIPE_SHADER_FRAGMENT, "Blend shader");
}
struct panfrost_shader_state *ss = panfrost_get_shader_state(ctx, PIPE_SHADER_FRAGMENT);
diff --git a/src/gallium/drivers/panfrost/pan_blit.c b/src/gallium/drivers/panfrost/pan_blit.c
index 89a9983b3a2..ff9d6548128 100644
--- a/src/gallium/drivers/panfrost/pan_blit.c
+++ b/src/gallium/drivers/panfrost/pan_blit.c
@@ -93,10 +93,10 @@ panfrost_blit_add_ctx_bos(struct panfrost_batch *batch,
{
util_dynarray_foreach(&blit_pool->bos, struct panfrost_bo *, bo) {
panfrost_batch_add_bo(batch, *bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER |
- PAN_BO_ACCESS_FRAGMENT);
+ PIPE_SHADER_VERTEX);
+
+ panfrost_batch_add_bo(batch, *bo,
+ PIPE_SHADER_FRAGMENT);
}
}
@@ -270,18 +270,7 @@ panfrost_blit(struct pipe_context *pipe,
pipe_surface_reference(&dst_surf, NULL);
- panfrost_batch_add_bo(batch, pinfo.src.planes[0].image->data.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_FRAGMENT);
-
- if (pinfo.src.planes[1].image) {
- panfrost_batch_add_bo(batch,
- pinfo.src.planes[1].image->data.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_FRAGMENT);
- }
-
+ panfrost_batch_read_rsrc(batch, psrc, PIPE_SHADER_FRAGMENT);
panfrost_batch_add_fbo_bos(batch);
panfrost_blit_add_ctx_bos(batch, &blit_pool);
batch->draws = draw_flags;
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c
index c2978acc3de..eb64fbecd57 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -57,23 +57,6 @@ pan_pipe_asserts()
PIPE_ASSERT(PIPE_FUNC_ALWAYS == MALI_FUNC_ALWAYS);
}
-/* If a BO is accessed for a particular shader stage, will it be in the primary
- * batch (vertex/tiler) or the secondary batch (fragment)? Anything but
- * fragment will be primary, e.g. compute jobs will be considered
- * "vertex/tiler" by analogy */
-
-static inline uint32_t
-panfrost_bo_access_for_stage(enum pipe_shader_type stage)
-{
- assert(stage == PIPE_SHADER_FRAGMENT ||
- stage == PIPE_SHADER_VERTEX ||
- stage == PIPE_SHADER_COMPUTE);
-
- return stage == PIPE_SHADER_FRAGMENT ?
- PAN_BO_ACCESS_FRAGMENT :
- PAN_BO_ACCESS_VERTEX_TILER;
-}
-
/* Gets a GPU address for the associated index buffer. Only gauranteed to be
* good for the duration of the draw (transient), could last longer. Also get
* the bounds on the index buffer for the range accessed by the draw. We do
@@ -100,10 +83,7 @@ panfrost_get_index_buffer_bounded(struct panfrost_batch *batch,
if (!info->has_user_indices) {
/* Only resources can be directly mapped */
- panfrost_batch_add_bo(batch, rsrc->image.data.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER);
+ panfrost_batch_read_rsrc(batch, rsrc, PIPE_SHADER_VERTEX);
out = rsrc->image.data.bo->ptr.gpu + offset;
/* Check the cache */
@@ -639,15 +619,8 @@ panfrost_emit_compute_shader_meta(struct panfrost_batch *batch, enum pipe_shader
{
struct panfrost_shader_state *ss = panfrost_get_shader_state(batch->ctx, stage);
- panfrost_batch_add_bo(batch, ss->bin.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER);
-
- panfrost_batch_add_bo(batch, ss->state.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER);
+ panfrost_batch_add_bo(batch, ss->bin.bo, PIPE_SHADER_VERTEX);
+ panfrost_batch_add_bo(batch, ss->state.bo, PIPE_SHADER_VERTEX);
return ss->state.gpu;
}
@@ -658,11 +631,7 @@ panfrost_emit_frag_shader_meta(struct panfrost_batch *batch)
struct panfrost_context *ctx = batch->ctx;
struct panfrost_shader_state *ss = panfrost_get_shader_state(ctx, PIPE_SHADER_FRAGMENT);
- /* Add the shader BO to the batch. */
- panfrost_batch_add_bo(batch, ss->bin.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_FRAGMENT);
+ panfrost_batch_add_bo(batch, ss->bin.bo, PIPE_SHADER_FRAGMENT);
struct panfrost_device *dev = pan_device(ctx->base.screen);
unsigned rt_count = MAX2(ctx->pipe_framebuffer.nr_cbufs, 1);
@@ -772,10 +741,7 @@ panfrost_map_constant_buffer_gpu(struct panfrost_batch *batch,
struct panfrost_resource *rsrc = pan_resource(cb->buffer);
if (rsrc) {
- panfrost_batch_add_bo(batch, rsrc->image.data.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- panfrost_bo_access_for_stage(st));
+ panfrost_batch_read_rsrc(batch, rsrc, st);
/* Alignment gauranteed by
* PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT */
@@ -907,9 +873,7 @@ panfrost_upload_ssbo_sysval(struct panfrost_batch *batch,
struct panfrost_resource *rsrc = pan_resource(sb.buffer);
struct panfrost_bo *bo = rsrc->image.data.bo;
- panfrost_batch_add_bo(batch, bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_RW |
- panfrost_bo_access_for_stage(st));
+ panfrost_batch_write_rsrc(batch, rsrc, st);
util_range_add(&rsrc->base, &rsrc->valid_buffer_range,
sb.buffer_offset, sb.buffer_size);
@@ -1366,15 +1330,8 @@ panfrost_get_tex_desc(struct panfrost_batch *batch,
struct pipe_sampler_view *pview = &view->base;
struct panfrost_resource *rsrc = pan_resource(pview->texture);
- /* Add the BO to the job so it's retained until the job is done. */
-
- panfrost_batch_add_bo(batch, rsrc->image.data.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- panfrost_bo_access_for_stage(st));
-
- panfrost_batch_add_bo(batch, view->state.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- panfrost_bo_access_for_stage(st));
+ panfrost_batch_read_rsrc(batch, rsrc, st);
+ panfrost_batch_add_bo(batch, view->state.bo, st);
return view->state.gpu;
}
@@ -1417,15 +1374,8 @@ panfrost_emit_texture_descriptors(struct panfrost_batch *batch,
panfrost_update_sampler_view(view, &ctx->base);
out[i] = view->bifrost_descriptor;
- /* Add the BOs to the job so they are retained until the job is done. */
-
- panfrost_batch_add_bo(batch, rsrc->image.data.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- panfrost_bo_access_for_stage(stage));
-
- panfrost_batch_add_bo(batch, view->state.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- panfrost_bo_access_for_stage(stage));
+ panfrost_batch_read_rsrc(batch, rsrc, stage);
+ panfrost_batch_add_bo(batch, view->state.bo, stage);
}
return T.gpu;
@@ -1541,12 +1491,9 @@ emit_image_bufs(struct panfrost_batch *batch, enum pipe_shader_type shader,
is_3d ? 0 : image->u.tex.first_layer,
is_3d ? image->u.tex.first_layer : 0);
- /* Add a dependency of the batch on the shader image buffer */
- uint32_t flags = PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_VERTEX_TILER;
- if (image->shader_access & PIPE_IMAGE_ACCESS_READ)
- flags |= PAN_BO_ACCESS_READ;
if (image->shader_access & PIPE_IMAGE_ACCESS_WRITE) {
- flags |= PAN_BO_ACCESS_WRITE;
+ panfrost_batch_write_rsrc(batch, rsrc, shader);
+
unsigned level = is_buffer ? 0 : image->u.tex.level;
BITSET_SET(rsrc->valid.data, level);
@@ -1554,8 +1501,9 @@ emit_image_bufs(struct panfrost_batch *batch, enum pipe_shader_type shader,
util_range_add(&rsrc->base, &rsrc->valid_buffer_range,
0, rsrc->base.width0);
}
+ } else {
+ panfrost_batch_read_rsrc(batch, rsrc, shader);
}
- panfrost_batch_add_bo(batch, rsrc->image.data.bo, flags);
pan_pack(bufs + (i * 2), ATTRIBUTE_BUFFER, cfg) {
cfg.type = pan_modifier_to_attr_type(rsrc->image.layout.modifier);
@@ -1697,11 +1645,7 @@ panfrost_emit_vertex_data(struct panfrost_batch *batch,
if (!rsrc)
continue;
- /* Add a dependency of the batch on the vertex buffer */
- panfrost_batch_add_bo(batch, rsrc->image.data.bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER);
+ panfrost_batch_read_rsrc(batch, rsrc, PIPE_SHADER_VERTEX);
/* Mask off lower bits, see offset fixup below */
mali_ptr raw_addr = rsrc->image.data.bo->ptr.gpu + buf->buffer_offset;
@@ -1906,14 +1850,8 @@ panfrost_emit_streamout(struct panfrost_batch *batch,
struct panfrost_resource *rsrc = pan_resource(target->buffer);
struct panfrost_bo *bo = rsrc->image.data.bo;
- /* Varyings are WRITE from the perspective of the VERTEX but READ from
- * the perspective of the TILER and FRAGMENT.
- */
- panfrost_batch_add_bo(batch, bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_RW |
- PAN_BO_ACCESS_VERTEX_TILER |
- PAN_BO_ACCESS_FRAGMENT);
+ panfrost_batch_write_rsrc(batch, rsrc, PIPE_SHADER_VERTEX);
+ panfrost_batch_read_rsrc(batch, rsrc, PIPE_SHADER_FRAGMENT);
unsigned offset = panfrost_xfb_offset(stride, target);
diff --git a/src/gallium/drivers/panfrost/pan_compute.c b/src/gallium/drivers/panfrost/pan_compute.c
index 56e4efc273e..8a0d68f59e4 100644
--- a/src/gallium/drivers/panfrost/pan_compute.c
+++ b/src/gallium/drivers/panfrost/pan_compute.c
@@ -237,9 +237,7 @@ panfrost_set_global_binding(struct pipe_context *pctx,
for (unsigned i = first; i < first + count; ++i) {
struct panfrost_resource *rsrc = pan_resource(resources[i]);
-
- panfrost_batch_add_bo(batch, rsrc->image.data.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_RW);
+ panfrost_batch_write_rsrc(batch, rsrc, PIPE_SHADER_COMPUTE);
util_range_add(&rsrc->base, &rsrc->valid_buffer_range,
0, rsrc->base.width0);
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 5dea4198785..3a82e3a59b5 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -448,9 +448,7 @@ panfrost_draw_emit_tiler(struct panfrost_batch *batch,
cfg.occlusion_query = MALI_OCCLUSION_MODE_PREDICATE;
cfg.occlusion = ctx->occlusion_query->bo->ptr.gpu;
panfrost_batch_add_bo(ctx->batch, ctx->occlusion_query->bo,
- PAN_BO_ACCESS_SHARED |
- PAN_BO_ACCESS_RW |
- PAN_BO_ACCESS_FRAGMENT);
+ PIPE_SHADER_FRAGMENT);
}
}
@@ -610,11 +608,9 @@ panfrost_indirect_draw(struct panfrost_batch *batch,
if (info->index_size) {
assert(!info->has_user_indices);
- index_buf = pan_resource(info->index.resource)->image.data.bo;
- panfrost_batch_add_bo(batch,
- index_buf,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER);
+ struct panfrost_resource *rsrc = pan_resource(info->index.resource);
+ index_buf = rsrc->image.data.bo;
+ panfrost_batch_read_rsrc(batch, rsrc, PIPE_SHADER_VERTEX);
}
mali_ptr varyings = 0, vs_vary = 0, fs_vary = 0, pos = 0, psiz = 0;
@@ -662,8 +658,7 @@ panfrost_indirect_draw(struct panfrost_batch *batch,
if (varyings) {
panfrost_batch_add_bo(batch,
dev->indirect_draw_shaders.varying_heap,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_RW |
- PAN_BO_ACCESS_VERTEX_TILER);
+ PIPE_SHADER_VERTEX);
}
assert(indirect->buffer);
@@ -675,9 +670,7 @@ panfrost_indirect_draw(struct panfrost_batch *batch,
vs->info.attribute_count -
util_bitcount(ctx->image_mask[PIPE_SHADER_VERTEX]);
- panfrost_batch_add_bo(batch, draw_buf->image.data.bo,
- PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
- PAN_BO_ACCESS_VERTEX_TILER);
+ panfrost_batch_read_rsrc(batch, draw_buf, PIPE_SHADER_VERTEX);
struct pan_indirect_draw_info draw_info = {
.last_indirect_draw = batch->indirect_draw_job_id,
diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c
index b26c922b599..7175505911b 100644
--- a/src/gallium/drivers/panfrost/pan_job.c
+++ b/src/gallium/drivers/panfrost/pan_job.c
@@ -388,9 +388,9 @@ panfrost_batch_update_bo_access(struct panfrost_batch *batch,
access->last_is_write = writes;
}
-void
-panfrost_batch_add_bo(struct panfrost_batch *batch, struct panfrost_bo *bo,
- uint32_t flags)
+static void
+panfrost_batch_add_bo_old(struct panfrost_batch *batch,
+ struct panfrost_bo *bo, uint32_t flags)
{
if (!bo)
return;
@@ -403,10 +403,6 @@ panfrost_batch_add_bo(struct panfrost_batch *batch, struct panfrost_bo *bo,
batch->first_bo = MIN2(batch->first_bo, bo->gem_handle);
batch->last_bo = MAX2(batch->last_bo, bo->gem_handle);
panfrost_bo_reference(bo);
- } else {
- /* All batches have to agree on the shared flag. */
- assert((old_flags & PAN_BO_ACCESS_SHARED) ==
- (flags & PAN_BO_ACCESS_SHARED));
}
if (old_flags == flags)
@@ -431,18 +427,57 @@ panfrost_batch_add_bo(struct panfrost_batch *batch, struct panfrost_bo *bo,
panfrost_batch_update_bo_access(batch, bo, flags & PAN_BO_ACCESS_WRITE);
}
-static void
-panfrost_batch_add_resource_bos(struct panfrost_batch *batch,
- struct panfrost_resource *rsrc,
- uint32_t flags)
+static uint32_t
+panfrost_access_for_stage(enum pipe_shader_type stage)
{
- panfrost_batch_add_bo(batch, rsrc->image.data.bo, flags);
+ return (stage == PIPE_SHADER_FRAGMENT) ?
+ PAN_BO_ACCESS_FRAGMENT : PAN_BO_ACCESS_VERTEX_TILER;
+}
+
+void
+panfrost_batch_add_bo(struct panfrost_batch *batch,
+ struct panfrost_bo *bo, enum pipe_shader_type stage)
+{
+ panfrost_batch_add_bo_old(batch, bo, PAN_BO_ACCESS_READ |
+ panfrost_access_for_stage(stage));
+}
+
+void
+panfrost_batch_read_rsrc(struct panfrost_batch *batch,
+ struct panfrost_resource *rsrc,
+ enum pipe_shader_type stage)
+{
+ uint32_t access =
+ PAN_BO_ACCESS_SHARED |
+ PAN_BO_ACCESS_READ |
+ panfrost_access_for_stage(stage);
+
+ panfrost_batch_add_bo_old(batch, rsrc->image.data.bo, access);
if (rsrc->image.crc.bo)
- panfrost_batch_add_bo(batch, rsrc->image.crc.bo, flags);
+ panfrost_batch_add_bo_old(batch, rsrc->image.crc.bo, access);
if (rsrc->separate_stencil)
- panfrost_batch_add_bo(batch, rsrc->separate_stencil->image.data.bo, flags);
+ panfrost_batch_add_bo_old(batch, rsrc->separate_stencil->image.data.bo, access);
+}
+
+void
+panfrost_batch_write_rsrc(struct panfrost_batch *batch,
+ struct panfrost_resource *rsrc,
+ enum pipe_shader_type stage)
+{
+ uint32_t access =
+ PAN_BO_ACCESS_SHARED |
+ PAN_BO_ACCESS_WRITE |
+ panfrost_access_for_stage(stage);
+
+ panfrost_batch_add_bo_old(batch, rsrc->image.data.bo, access);
+
+ if (rsrc->image.crc.bo)
+ panfrost_batch_add_bo_old(batch, rsrc->image.crc.bo, access);
+
+ if (rsrc->separate_stencil)
+ panfrost_batch_add_bo_old(batch, rsrc->separate_stencil->image.data.bo, access);
}
/* Adds the BO backing surface to a batch if the surface is non-null */
@@ -450,14 +485,10 @@ panfrost_batch_add_resource_bos(struct panfrost_batch *batch,
static void
panfrost_batch_add_surface(struct panfrost_batch *batch, struct pipe_surface *surf)
{
- uint32_t flags = PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_WRITE |
- PAN_BO_ACCESS_VERTEX_TILER |
- PAN_BO_ACCESS_FRAGMENT;
if (surf) {
struct panfrost_resource *rsrc = pan_resource(surf->texture);
- panfrost_batch_add_resource_bos(batch, rsrc, flags);
+ panfrost_batch_write_rsrc(batch, rsrc, PIPE_SHADER_FRAGMENT);
}
-
}
void
@@ -471,14 +502,14 @@ panfrost_batch_add_fbo_bos(struct panfrost_batch *batch)
struct panfrost_bo *
panfrost_batch_create_bo(struct panfrost_batch *batch, size_t size,
- uint32_t create_flags, uint32_t access_flags,
+ uint32_t create_flags, enum pipe_shader_type stage,
const char *label)
{
struct panfrost_bo *bo;
bo = panfrost_bo_create(pan_device(batch->ctx->base.screen), size,
create_flags, label);
- panfrost_batch_add_bo(batch, bo, access_flags);
+ panfrost_batch_add_bo(batch, bo, stage);
/* panfrost_batch_add_bo() has retained a reference and
* panfrost_bo_create() initialize the refcnt to 1, so let's
@@ -516,11 +547,10 @@ panfrost_batch_get_polygon_list(struct panfrost_batch *batch)
batch->tiler_ctx.midgard.polygon_list =
panfrost_batch_create_bo(batch, size,
init_polygon_list ? 0 : PAN_BO_INVISIBLE,
- PAN_BO_ACCESS_PRIVATE |
- PAN_BO_ACCESS_RW |
- PAN_BO_ACCESS_VERTEX_TILER |
- PAN_BO_ACCESS_FRAGMENT, "Polygon list");
-
+ PIPE_SHADER_VERTEX,
+ "Polygon list");
+ panfrost_batch_add_bo(batch, batch->tiler_ctx.midgard.polygon_list,
+ PIPE_SHADER_FRAGMENT);
if (init_polygon_list) {
assert(batch->tiler_ctx.midgard.polygon_list->ptr.cpu);
@@ -551,11 +581,11 @@ panfrost_batch_get_scratchpad(struct panfrost_batch *batch,
} else {
batch->scratchpad = panfrost_batch_create_bo(batch, size,
PAN_BO_INVISIBLE,
- PAN_BO_ACCESS_PRIVATE |
- PAN_BO_ACCESS_RW |
- PAN_BO_ACCESS_VERTEX_TILER |
- PAN_BO_ACCESS_FRAGMENT,
+ PIPE_SHADER_VERTEX,
"Thread local storage");
+
+ panfrost_batch_add_bo(batch, batch->scratchpad,
+ PIPE_SHADER_FRAGMENT);
}
return batch->scratchpad;
@@ -571,9 +601,7 @@ panfrost_batch_get_shared_memory(struct panfrost_batch *batch,
} else {
batch->shared_memory = panfrost_batch_create_bo(batch, size,
PAN_BO_INVISIBLE,
- PAN_BO_ACCESS_PRIVATE |
- PAN_BO_ACCESS_RW |
- PAN_BO_ACCESS_VERTEX_TILER,
+ PIPE_SHADER_VERTEX,
"Workgroup shared memory");
}
diff --git a/src/gallium/drivers/panfrost/pan_job.h b/src/gallium/drivers/panfrost/pan_job.h
index 397b6e75ea0..8871b1fa9b9 100644
--- a/src/gallium/drivers/panfrost/pan_job.h
+++ b/src/gallium/drivers/panfrost/pan_job.h
@@ -144,8 +144,19 @@ struct panfrost_batch *
panfrost_get_fresh_batch_for_fbo(struct panfrost_context *ctx);
void
-panfrost_batch_add_bo(struct panfrost_batch *batch, struct panfrost_bo *bo,
- uint32_t flags);
+panfrost_batch_add_bo(struct panfrost_batch *batch,
+ struct panfrost_bo *bo,
+ enum pipe_shader_type stage);
+
+void
+panfrost_batch_read_rsrc(struct panfrost_batch *batch,
+ struct panfrost_resource *rsrc,
+ enum pipe_shader_type stage);
+
+void
+panfrost_batch_write_rsrc(struct panfrost_batch *batch,
+ struct panfrost_resource *rsrc,
+ enum pipe_shader_type stage);
void
panfrost_batch_add_fbo_bos(struct panfrost_batch *batch);
More information about the mesa-commit
mailing list