static void si_check_render_feedback(struct si_context *sctx)
{
+ /* There is no render feedback if color writes are disabled.
+ * (e.g. a pixel shader with image stores)
+ */
+ if (!si_get_total_colormask(sctx))
+ return;
if (!sctx->need_check_render_feedback)
return;
si_decompress_resident_images(sctx);
}
+ if (sctx->ps_uses_fbfetch) {
+ struct pipe_surface *cb0 = sctx->framebuffer.state.cbufs[0];
+ si_decompress_color_texture(sctx,
+ (struct r600_texture*)cb0->texture,
+ cb0->u.tex.first_layer,
+ cb0->u.tex.last_layer);
+ }
+
si_check_render_feedback(sctx);
}
}
}
-static void si_decompress_dcc(struct pipe_context *ctx,
- struct r600_texture *rtex)
+void si_decompress_dcc(struct pipe_context *ctx, struct r600_texture *rtex)
{
if (!rtex->dcc_offset)
return;
sctx->b.b.flush_resource = si_flush_resource;
sctx->b.b.generate_mipmap = si_generate_mipmap;
sctx->b.blit_decompress_depth = si_blit_decompress_depth;
- sctx->b.decompress_dcc = si_decompress_dcc;
}