[Mesa-dev] [PATCH 5/5] radeonsi: add new si_check_render_feedback_texture() helper
Marek Olšák
maraeo at gmail.com
Mon Apr 10 15:15:10 UTC 2017
Other than my comment on patch 3, the series is:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Thu, Apr 6, 2017 at 12:07 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> For bindless.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/gallium/drivers/radeonsi/si_blit.c | 89 +++++++++++++++++-----------------
> 1 file changed, 44 insertions(+), 45 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
> index f690f3e2f3..998288dba2 100644
> --- a/src/gallium/drivers/radeonsi/si_blit.c
> +++ b/src/gallium/drivers/radeonsi/si_blit.c
> @@ -527,6 +527,40 @@ si_decompress_image_color_textures(struct si_context *sctx,
> }
> }
>
> +static void si_check_render_feedback_texture(struct si_context *sctx,
> + struct r600_texture *tex,
> + unsigned first_level,
> + unsigned last_level,
> + unsigned first_layer,
> + unsigned last_layer)
> +{
> + bool render_feedback = false;
> +
> + if (!tex->dcc_offset)
> + return;
> +
> + for (unsigned j = 0; j < sctx->framebuffer.state.nr_cbufs; ++j) {
> + struct r600_surface * surf;
> +
> + if (!sctx->framebuffer.state.cbufs[j])
> + continue;
> +
> + surf = (struct r600_surface*)sctx->framebuffer.state.cbufs[j];
> +
> + if (tex == (struct r600_texture *)surf->base.texture &&
> + surf->base.u.tex.level >= first_level &&
> + surf->base.u.tex.level <= last_level &&
> + surf->base.u.tex.first_layer <= last_layer &&
> + surf->base.u.tex.last_layer >= first_layer) {
> + render_feedback = true;
> + break;
> + }
> + }
> +
> + if (render_feedback)
> + r600_texture_disable_dcc(&sctx->b, tex);
> +}
> +
> static void si_check_render_feedback_textures(struct si_context *sctx,
> struct si_textures_info *textures)
> {
> @@ -535,7 +569,6 @@ static void si_check_render_feedback_textures(struct si_context *sctx,
> while (mask) {
> const struct pipe_sampler_view *view;
> struct r600_texture *tex;
> - bool render_feedback = false;
>
> unsigned i = u_bit_scan(&mask);
>
> @@ -544,29 +577,12 @@ static void si_check_render_feedback_textures(struct si_context *sctx,
> continue;
>
> tex = (struct r600_texture *)view->texture;
> - if (!tex->dcc_offset)
> - continue;
>
> - for (unsigned j = 0; j < sctx->framebuffer.state.nr_cbufs; ++j) {
> - struct r600_surface * surf;
> -
> - if (!sctx->framebuffer.state.cbufs[j])
> - continue;
> -
> - surf = (struct r600_surface*)sctx->framebuffer.state.cbufs[j];
> -
> - if (tex == (struct r600_texture*)surf->base.texture &&
> - surf->base.u.tex.level >= view->u.tex.first_level &&
> - surf->base.u.tex.level <= view->u.tex.last_level &&
> - surf->base.u.tex.first_layer <= view->u.tex.last_layer &&
> - surf->base.u.tex.last_layer >= view->u.tex.first_layer) {
> - render_feedback = true;
> - break;
> - }
> - }
> -
> - if (render_feedback)
> - r600_texture_disable_dcc(&sctx->b, tex);
> + si_check_render_feedback_texture(sctx, tex,
> + view->u.tex.first_level,
> + view->u.tex.last_level,
> + view->u.tex.first_layer,
> + view->u.tex.last_layer);
> }
> }
>
> @@ -578,7 +594,6 @@ static void si_check_render_feedback_images(struct si_context *sctx,
> while (mask) {
> const struct pipe_image_view *view;
> struct r600_texture *tex;
> - bool render_feedback = false;
>
> unsigned i = u_bit_scan(&mask);
>
> @@ -587,28 +602,12 @@ static void si_check_render_feedback_images(struct si_context *sctx,
> continue;
>
> tex = (struct r600_texture *)view->resource;
> - if (!tex->dcc_offset)
> - continue;
> -
> - for (unsigned j = 0; j < sctx->framebuffer.state.nr_cbufs; ++j) {
> - struct r600_surface * surf;
> -
> - if (!sctx->framebuffer.state.cbufs[j])
> - continue;
> -
> - surf = (struct r600_surface*)sctx->framebuffer.state.cbufs[j];
> -
> - if (tex == (struct r600_texture*)surf->base.texture &&
> - surf->base.u.tex.level == view->u.tex.level &&
> - surf->base.u.tex.first_layer <= view->u.tex.last_layer &&
> - surf->base.u.tex.last_layer >= view->u.tex.first_layer) {
> - render_feedback = true;
> - break;
> - }
> - }
>
> - if (render_feedback)
> - r600_texture_disable_dcc(&sctx->b, tex);
> + si_check_render_feedback_texture(sctx, tex,
> + view->u.tex.level,
> + view->u.tex.level,
> + view->u.tex.first_layer,
> + view->u.tex.last_layer);
> }
> }
>
> --
> 2.12.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list