[PATCH 16/19] etnaviv: GC7000: Factor out incompatible texture handling logic
Christian Gmeiner
christian.gmeiner at gmail.com
Sun Nov 5 15:32:54 UTC 2017
2017-10-30 17:17 GMT+01:00 Wladimir J. van der Laan <laanwj at gmail.com>:
> This will be shared with the texture descriptor path.
>
> Signed-off-by: Wladimir J. van der Laan <laanwj at gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>
> ---
> src/gallium/drivers/etnaviv/etnaviv_texture.c | 40 +++++++++++++++++----------
> src/gallium/drivers/etnaviv/etnaviv_texture.h | 5 ++++
> 2 files changed, 30 insertions(+), 15 deletions(-)
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c b/src/gallium/drivers/etnaviv/etnaviv_texture.c
> index 335a2df..55942a9 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_texture.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c
> @@ -164,22 +164,10 @@ etna_resource_sampler_compatible(struct etna_resource *res)
> return true;
> }
>
> -static struct pipe_sampler_view *
> -etna_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *prsc,
> - const struct pipe_sampler_view *so)
> +struct etna_resource *
> +etna_texture_handle_incompatible(struct pipe_context *pctx, struct pipe_resource *prsc)
> {
> - struct etna_sampler_view *sv = CALLOC_STRUCT(etna_sampler_view);
> struct etna_resource *res = etna_resource(prsc);
> - struct etna_context *ctx = etna_context(pctx);
> - const uint32_t format = translate_texture_format(so->format);
> - const bool ext = !!(format & EXT_FORMAT);
> - const uint32_t swiz = get_texture_swiz(so->format, so->swizzle_r,
> - so->swizzle_g, so->swizzle_b,
> - so->swizzle_a);
> -
> - if (!sv)
> - return NULL;
> -
> if (!etna_resource_sampler_compatible(res)) {
> /* The original resource is not compatible with the sampler.
> * Allocate an appropriately tiled texture. */
> @@ -194,11 +182,33 @@ etna_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *prsc,
> }
>
> if (!res->texture) {
> - free(sv);
> return NULL;
> }
> res = etna_resource(res->texture);
> }
> + return res;
> +}
> +
> +static struct pipe_sampler_view *
> +etna_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *prsc,
> + const struct pipe_sampler_view *so)
> +{
> + struct etna_sampler_view *sv = CALLOC_STRUCT(etna_sampler_view);
> + struct etna_context *ctx = etna_context(pctx);
> + const uint32_t format = translate_texture_format(so->format);
> + const bool ext = !!(format & EXT_FORMAT);
> + const uint32_t swiz = get_texture_swiz(so->format, so->swizzle_r,
> + so->swizzle_g, so->swizzle_b,
> + so->swizzle_a);
> +
> + if (!sv)
> + return NULL;
> +
> + struct etna_resource *res = etna_texture_handle_incompatible(pctx, prsc);
> + if (!res) {
> + free(sv);
> + return NULL;
> + }
>
> sv->base = *so;
> pipe_reference_init(&sv->base.reference, 1);
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.h b/src/gallium/drivers/etnaviv/etnaviv_texture.h
> index a7a67fc..9d1789e 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_texture.h
> +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.h
> @@ -72,4 +72,9 @@ etna_sampler_view(struct pipe_sampler_view *view)
> void
> etna_texture_init(struct pipe_context *pctx);
>
> +/* If the original resource is not compatible with the sampler. Allocate
> + * an appropriately tiled texture. */
> +struct etna_resource *
> +etna_texture_handle_incompatible(struct pipe_context *pctx, struct pipe_resource *prsc);
> +
> #endif
> --
> 2.7.4
>
--
greets
--
Christian Gmeiner, MSc
https://christian-gmeiner.info
More information about the etnaviv
mailing list