mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
freedreno: Track image/SSBO usage for all stages
Once a6xx enables image/SSBO for all shader stages, we have to care about more than just frag shader in the 3d path. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20687>
This commit is contained in:
parent
165de87f8e
commit
066ff5c759
1 changed files with 22 additions and 23 deletions
|
|
@ -134,29 +134,6 @@ batch_draw_tracking_for_dirty_bits(struct fd_batch *batch) assert_dt
|
|||
}
|
||||
}
|
||||
|
||||
/* Mark SSBOs */
|
||||
if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_SSBO) {
|
||||
const struct fd_shaderbuf_stateobj *so =
|
||||
&ctx->shaderbuf[PIPE_SHADER_FRAGMENT];
|
||||
|
||||
u_foreach_bit (i, so->enabled_mask & so->writable_mask)
|
||||
resource_written(batch, so->sb[i].buffer);
|
||||
|
||||
u_foreach_bit (i, so->enabled_mask & ~so->writable_mask)
|
||||
resource_read(batch, so->sb[i].buffer);
|
||||
}
|
||||
|
||||
if (ctx->dirty_shader[PIPE_SHADER_FRAGMENT] & FD_DIRTY_SHADER_IMAGE) {
|
||||
u_foreach_bit (i, ctx->shaderimg[PIPE_SHADER_FRAGMENT].enabled_mask) {
|
||||
struct pipe_image_view *img =
|
||||
&ctx->shaderimg[PIPE_SHADER_FRAGMENT].si[i];
|
||||
if (img->access & PIPE_IMAGE_ACCESS_WRITE)
|
||||
resource_written(batch, img->resource);
|
||||
else
|
||||
resource_read(batch, img->resource);
|
||||
}
|
||||
}
|
||||
|
||||
u_foreach_bit (s, ctx->bound_shader_stages) {
|
||||
/* Mark constbuf as being read: */
|
||||
if (ctx->dirty_shader[s] & FD_DIRTY_SHADER_CONST) {
|
||||
|
|
@ -169,6 +146,28 @@ batch_draw_tracking_for_dirty_bits(struct fd_batch *batch) assert_dt
|
|||
u_foreach_bit (i, ctx->tex[s].valid_textures)
|
||||
resource_read(batch, ctx->tex[s].textures[i]->texture);
|
||||
}
|
||||
|
||||
/* Mark SSBOs as being read or written: */
|
||||
if (ctx->dirty_shader[s] & FD_DIRTY_SHADER_SSBO) {
|
||||
const struct fd_shaderbuf_stateobj *so = &ctx->shaderbuf[s];
|
||||
|
||||
u_foreach_bit (i, so->enabled_mask & so->writable_mask)
|
||||
resource_written(batch, so->sb[i].buffer);
|
||||
|
||||
u_foreach_bit (i, so->enabled_mask & ~so->writable_mask)
|
||||
resource_read(batch, so->sb[i].buffer);
|
||||
}
|
||||
|
||||
/* Mark Images as being read or written: */
|
||||
if (ctx->dirty_shader[s] & FD_DIRTY_SHADER_IMAGE) {
|
||||
u_foreach_bit (i, ctx->shaderimg[s].enabled_mask) {
|
||||
struct pipe_image_view *img = &ctx->shaderimg[s].si[i];
|
||||
if (img->access & PIPE_IMAGE_ACCESS_WRITE)
|
||||
resource_written(batch, img->resource);
|
||||
else
|
||||
resource_read(batch, img->resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Mark VBOs as being read */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue