}
}
- /* 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) {
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 */