Mesa (master): etnaviv: GC7000: Factor out incompatible texture handling logic
Christian Gmeiner
austriancoder at kemper.freedesktop.org
Thu Nov 30 06:33:49 UTC 2017
Module: Mesa
Branch: master
Commit: 260a5e2a1a2490a7f147ed3e04021924cd0fe7cf
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=260a5e2a1a2490a7f147ed3e04021924cd0fe7cf
Author: Wladimir J. van der Laan <laanwj at gmail.com>
Date: Sat Nov 18 10:44:38 2017 +0100
etnaviv: GC7000: Factor out incompatible texture handling logic
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 | 42 +++++++++++++++++----------
src/gallium/drivers/etnaviv/etnaviv_texture.h | 5 ++++
2 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c b/src/gallium/drivers/etnaviv/etnaviv_texture.c
index 295f7eb676..ad0ea16205 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_texture.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c
@@ -226,23 +226,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 bool astc = !!(format & ASTC_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. */
@@ -257,11 +244,34 @@ 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 bool astc = !!(format & ASTC_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 304373303c..ec50bca321 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_texture.h
+++ b/src/gallium/drivers/etnaviv/etnaviv_texture.h
@@ -78,4 +78,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
More information about the mesa-commit
mailing list