mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 13:10:31 +01:00
radeonsi: decompress DCC in set_sampler_view instead of create_sampler_view (v2)
v2: don't add a new decompress helper function Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
8c7d1ded19
commit
7d2fa8dc10
3 changed files with 16 additions and 6 deletions
|
|
@ -480,12 +480,21 @@ static void si_set_sampler_view(struct si_context *sctx,
|
|||
|
||||
if (view) {
|
||||
struct r600_texture *rtex = (struct r600_texture *)view->texture;
|
||||
bool is_buffer = rtex->resource.b.b.target == PIPE_BUFFER;
|
||||
|
||||
if (unlikely(!is_buffer && rview->dcc_incompatible)) {
|
||||
if (vi_dcc_enabled(rtex, view->u.tex.first_level))
|
||||
if (!r600_texture_disable_dcc(&sctx->b, rtex))
|
||||
sctx->b.decompress_dcc(&sctx->b.b, rtex);
|
||||
|
||||
rview->dcc_incompatible = false;
|
||||
}
|
||||
|
||||
assert(rtex); /* views with texture == NULL aren't supported */
|
||||
pipe_sampler_view_reference(&views->views[slot], view);
|
||||
memcpy(desc, rview->state, 8*4);
|
||||
|
||||
if (rtex->resource.b.b.target == PIPE_BUFFER) {
|
||||
if (is_buffer) {
|
||||
rtex->resource.bind_history |= PIPE_BIND_SAMPLER_VIEW;
|
||||
|
||||
si_set_buf_desc_address(&rtex->resource,
|
||||
|
|
@ -505,8 +514,7 @@ static void si_set_sampler_view(struct si_context *sctx,
|
|||
desc);
|
||||
}
|
||||
|
||||
if (rtex->resource.b.b.target != PIPE_BUFFER &&
|
||||
rtex->fmask.size) {
|
||||
if (!is_buffer && rtex->fmask.size) {
|
||||
memcpy(desc + 8,
|
||||
rview->fmask_state, 8*4);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ struct si_sampler_view {
|
|||
unsigned base_level;
|
||||
unsigned block_width;
|
||||
bool is_stencil_sampler;
|
||||
bool dcc_incompatible;
|
||||
};
|
||||
|
||||
#define SI_SAMPLER_STATE_MAGIC 0x34f1c35a
|
||||
|
|
|
|||
|
|
@ -3437,9 +3437,10 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
vi_disable_dcc_if_incompatible_format(&sctx->b, texture,
|
||||
state->u.tex.first_level,
|
||||
state->format);
|
||||
view->dcc_incompatible =
|
||||
vi_dcc_formats_are_incompatible(texture,
|
||||
state->u.tex.first_level,
|
||||
state->format);
|
||||
|
||||
si_make_texture_descriptor(sctx->screen, tmp, true,
|
||||
state->target, pipe_format, state_swizzle,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue