freedreno: fix invalidate logic
Set dirty bits on invalidate to trigger invalidate logic in fd_draw_vbo. Also, resource_written for color needs to be after the invalidate logic. Signed-off-by: Jonathan Marek <jonathan@marek.ca>
This commit is contained in:
committed by
Rob Clark
parent
786f9639d6
commit
bcefa0f1cb
@@ -165,15 +165,6 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->dirty & FD_DIRTY_FRAMEBUFFER) {
|
||||
for (i = 0; i < pfb->nr_cbufs; i++) {
|
||||
if (!pfb->cbufs[i])
|
||||
continue;
|
||||
|
||||
resource_written(batch, pfb->cbufs[i]->texture);
|
||||
}
|
||||
}
|
||||
|
||||
if (fd_logicop_enabled(ctx))
|
||||
batch->gmem_reason |= FD_GMEM_LOGICOP_ENABLED;
|
||||
|
||||
@@ -195,6 +186,9 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
|
||||
|
||||
if (fd_blend_enabled(ctx, i))
|
||||
batch->gmem_reason |= FD_GMEM_BLEND_ENABLED;
|
||||
|
||||
if (ctx->dirty & FD_DIRTY_FRAMEBUFFER)
|
||||
resource_written(batch, pfb->cbufs[i]->texture);
|
||||
}
|
||||
|
||||
/* Mark SSBOs as being written.. we don't actually know which ones are
|
||||
|
||||
@@ -1188,24 +1188,30 @@ fd_blitter_pipe_end(struct fd_context *ctx)
|
||||
static void
|
||||
fd_invalidate_resource(struct pipe_context *pctx, struct pipe_resource *prsc)
|
||||
{
|
||||
struct fd_context *ctx = fd_context(pctx);
|
||||
struct fd_resource *rsc = fd_resource(prsc);
|
||||
|
||||
/*
|
||||
* TODO I guess we could track that the resource is invalidated and
|
||||
* use that as a hint to realloc rather than stall in _transfer_map(),
|
||||
* even in the non-DISCARD_WHOLE_RESOURCE case?
|
||||
*
|
||||
* Note: we set dirty bits to trigger invalidate logic fd_draw_vbo
|
||||
*/
|
||||
|
||||
if (rsc->write_batch) {
|
||||
struct fd_batch *batch = rsc->write_batch;
|
||||
struct pipe_framebuffer_state *pfb = &batch->framebuffer;
|
||||
|
||||
if (pfb->zsbuf && pfb->zsbuf->texture == prsc)
|
||||
if (pfb->zsbuf && pfb->zsbuf->texture == prsc) {
|
||||
batch->resolve &= ~(FD_BUFFER_DEPTH | FD_BUFFER_STENCIL);
|
||||
ctx->dirty |= FD_DIRTY_ZSA;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < pfb->nr_cbufs; i++) {
|
||||
if (pfb->cbufs[i] && pfb->cbufs[i]->texture == prsc) {
|
||||
batch->resolve &= ~(PIPE_CLEAR_COLOR0 << i);
|
||||
ctx->dirty |= FD_DIRTY_FRAMEBUFFER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user