diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index c68ba23e771..11de287e584 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -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 */