for (unsigned i = 0; i < vb->count && !(ctx->dirty & FD_DIRTY_VTXBUF);
i++) {
if (vb->vb[i].buffer.resource == prsc)
- fd_context_dirty(ctx, FD_DIRTY_VTXBUF);
+ fd_dirty_resource(ctx, prsc, FD_DIRTY_VTXBUF, false);
}
}
i < so->num_targets && !(ctx->dirty & FD_DIRTY_STREAMOUT);
i++) {
if (so->targets[i]->buffer == prsc)
- fd_context_dirty(ctx, FD_DIRTY_STREAMOUT);
+ fd_dirty_resource(ctx, prsc, FD_DIRTY_STREAMOUT, true);
}
}
const unsigned num_ubos = util_last_bit(cb->enabled_mask);
for (unsigned i = 1; i < num_ubos; i++) {
if (cb->cb[i].buffer == prsc) {
- fd_context_dirty_shader(ctx, stage, FD_DIRTY_SHADER_CONST);
+ fd_dirty_shader_resource(ctx, prsc, stage,
+ FD_DIRTY_SHADER_CONST, false);
break;
}
}
struct fd_texture_stateobj *tex = &ctx->tex[stage];
for (unsigned i = 0; i < tex->num_textures; i++) {
if (tex->textures[i] && (tex->textures[i]->texture == prsc)) {
- fd_context_dirty_shader(ctx, stage, FD_DIRTY_SHADER_TEX);
+ fd_dirty_shader_resource(ctx, prsc, stage,
+ FD_DIRTY_SHADER_TEX, false);
break;
}
}
const unsigned num_images = util_last_bit(si->enabled_mask);
for (unsigned i = 0; i < num_images; i++) {
if (si->si[i].resource == prsc) {
- fd_context_dirty_shader(ctx, stage, FD_DIRTY_SHADER_IMAGE);
+ bool write = si->si[i].access & PIPE_IMAGE_ACCESS_WRITE;
+ fd_dirty_shader_resource(ctx, prsc, stage,
+ FD_DIRTY_SHADER_IMAGE, write);
break;
}
}
const unsigned num_ssbos = util_last_bit(sb->enabled_mask);
for (unsigned i = 0; i < num_ssbos; i++) {
if (sb->sb[i].buffer == prsc) {
- fd_context_dirty_shader(ctx, stage, FD_DIRTY_SHADER_SSBO);
+ bool write = sb->writable_mask & BIT(i);
+ fd_dirty_shader_resource(ctx, prsc, stage,
+ FD_DIRTY_SHADER_SSBO, write);
break;
}
}
if (pfb->zsbuf && pfb->zsbuf->texture == prsc) {
batch->resolve &= ~(FD_BUFFER_DEPTH | FD_BUFFER_STENCIL);
- fd_context_dirty(ctx, FD_DIRTY_ZSA);
+ fd_dirty_resource(ctx, prsc, FD_DIRTY_ZSA, true);
}
for (unsigned i = 0; i < pfb->nr_cbufs; i++) {
if (pfb->cbufs[i] && pfb->cbufs[i]->texture == prsc) {
batch->resolve &= ~(PIPE_CLEAR_COLOR0 << i);
- fd_context_dirty(ctx, FD_DIRTY_FRAMEBUFFER);
+ fd_dirty_resource(ctx, prsc, FD_DIRTY_FRAMEBUFFER, true);
}
}
}