r600g: don't decompress depth or stencil if there isn't any
This commit is contained in:
parent
ea72351a91
commit
e2f623f1d6
|
@ -1722,9 +1722,12 @@ static void evergreen_emit_db_misc_state(struct r600_context *rctx, struct r600_
|
||||||
db_count_control |= S_028004_PERFECT_ZPASS_COUNTS(1);
|
db_count_control |= S_028004_PERFECT_ZPASS_COUNTS(1);
|
||||||
db_render_override |= S_02800C_NOOP_CULL_DISABLE(1);
|
db_render_override |= S_02800C_NOOP_CULL_DISABLE(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a->flush_depthstencil_through_cb) {
|
if (a->flush_depthstencil_through_cb) {
|
||||||
db_render_control |= S_028000_DEPTH_COPY_ENABLE(1) |
|
assert(a->copy_depth || a->copy_stencil);
|
||||||
S_028000_STENCIL_COPY_ENABLE(1) |
|
|
||||||
|
db_render_control |= S_028000_DEPTH_COPY_ENABLE(a->copy_depth) |
|
||||||
|
S_028000_STENCIL_COPY_ENABLE(a->copy_stencil) |
|
||||||
S_028000_COPY_CENTROID(1);
|
S_028000_COPY_CENTROID(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,8 @@ void r600_blit_uncompress_depth(struct pipe_context *ctx,
|
||||||
float depth = 1.0f;
|
float depth = 1.0f;
|
||||||
struct r600_resource_texture *flushed_depth_texture = staging ?
|
struct r600_resource_texture *flushed_depth_texture = staging ?
|
||||||
staging : texture->flushed_depth_texture;
|
staging : texture->flushed_depth_texture;
|
||||||
|
const struct util_format_description *desc =
|
||||||
|
util_format_description(texture->resource.b.b.format);
|
||||||
|
|
||||||
if (!staging && !texture->dirty_db_mask)
|
if (!staging && !texture->dirty_db_mask)
|
||||||
return;
|
return;
|
||||||
|
@ -138,11 +140,11 @@ void r600_blit_uncompress_depth(struct pipe_context *ctx,
|
||||||
rctx->family == CHIP_RV620 || rctx->family == CHIP_RV635)
|
rctx->family == CHIP_RV620 || rctx->family == CHIP_RV635)
|
||||||
depth = 0.0f;
|
depth = 0.0f;
|
||||||
|
|
||||||
if (!rctx->db_misc_state.flush_depthstencil_through_cb) {
|
/* Enable decompression in DB_RENDER_CONTROL */
|
||||||
/* Enable decompression in DB_RENDER_CONTROL */
|
rctx->db_misc_state.flush_depthstencil_through_cb = true;
|
||||||
rctx->db_misc_state.flush_depthstencil_through_cb = true;
|
rctx->db_misc_state.copy_depth = util_format_has_depth(desc);
|
||||||
r600_atom_dirty(rctx, &rctx->db_misc_state.atom);
|
rctx->db_misc_state.copy_stencil = util_format_has_stencil(desc);
|
||||||
}
|
r600_atom_dirty(rctx, &rctx->db_misc_state.atom);
|
||||||
|
|
||||||
for (level = first_level; level <= last_level; level++) {
|
for (level = first_level; level <= last_level; level++) {
|
||||||
if (!staging && !(texture->dirty_db_mask & (1 << level)))
|
if (!staging && !(texture->dirty_db_mask & (1 << level)))
|
||||||
|
|
|
@ -80,6 +80,7 @@ struct r600_db_misc_state {
|
||||||
struct r600_atom atom;
|
struct r600_atom atom;
|
||||||
bool occlusion_query_enabled;
|
bool occlusion_query_enabled;
|
||||||
bool flush_depthstencil_through_cb;
|
bool flush_depthstencil_through_cb;
|
||||||
|
bool copy_depth, copy_stencil;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct r600_cb_misc_state {
|
struct r600_cb_misc_state {
|
||||||
|
|
|
@ -1684,8 +1684,10 @@ static void r600_emit_db_misc_state(struct r600_context *rctx, struct r600_atom
|
||||||
db_render_override |= S_028D10_NOOP_CULL_DISABLE(1);
|
db_render_override |= S_028D10_NOOP_CULL_DISABLE(1);
|
||||||
}
|
}
|
||||||
if (a->flush_depthstencil_through_cb) {
|
if (a->flush_depthstencil_through_cb) {
|
||||||
db_render_control |= S_028D0C_DEPTH_COPY_ENABLE(1) |
|
assert(a->copy_depth || a->copy_stencil);
|
||||||
S_028D0C_STENCIL_COPY_ENABLE(1) |
|
|
||||||
|
db_render_control |= S_028D0C_DEPTH_COPY_ENABLE(a->copy_depth) |
|
||||||
|
S_028D0C_STENCIL_COPY_ENABLE(a->copy_stencil) |
|
||||||
S_028D0C_COPY_CENTROID(1);
|
S_028D0C_COPY_CENTROID(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue