From: Wladimir J. van der Laan Date: Tue, 18 Apr 2017 11:34:50 +0000 (+0200) Subject: etnaviv: Supertiled texture support on gc3000 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9da0cd56c3f95081bd4cc7efe87d2b475019b17d;p=mesa.git etnaviv: Supertiled texture support on gc3000 Support supertiled textures on hardware that has the appropriate feature flag SUPERTILED_TEXTURE. Most of the scaffolding was already in place in etna_layout_multiple: case ETNA_LAYOUT_SUPER_TILED: *paddingX = 64; *paddingY = 64; *halign = TEXTURE_HALIGN_SUPER_TILED; So this is just a matter of allowing it. Signed-off-by: Wladimir J. van der Laan Reviewed-by: Christian Gmeiner --- diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index db9acacae20..2c5e9298e55 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c @@ -231,12 +231,9 @@ etna_resource_create(struct pipe_screen *pscreen, { struct etna_screen *screen = etna_screen(pscreen); - /* Figure out what tiling to use -- for now, assume that textures cannot be - * supertiled, and cannot be linear. - * There is a feature flag SUPERTILED_TEXTURE (not supported on any known hw) - * that may allow this, as well - * as LINEAR_TEXTURE_SUPPORT (supported on gc880 and gc2000 at least), but - * not sure how it works. + /* Figure out what tiling to use -- for now, assume that texture cannot be linear. + * there is a capability LINEAR_TEXTURE_SUPPORT (supported on gc880 and + * gc2000 at least), but not sure how it works. * Buffers always have LINEAR layout. */ unsigned layout = ETNA_LAYOUT_LINEAR; diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c b/src/gallium/drivers/etnaviv/etnaviv_texture.c index 93b077b5045..3a842381ac2 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_texture.c +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c @@ -129,12 +129,18 @@ etna_resource_sampler_compatible(struct etna_resource *res) if (util_format_is_compressed(res->base.format)) return true; - /* The sampler (as we currently know it) only accepts tiled layouts */ + struct etna_screen *screen = etna_screen(res->base.screen); + /* This GPU supports texturing from supertiled textures? */ + if (res->layout == ETNA_LAYOUT_SUPER_TILED && VIV_FEATURE(screen, chipMinorFeatures2, SUPERTILED_TEXTURE)) + return true; + + /* TODO: LINEAR_TEXTURE_SUPPORT */ + + /* Otherwise, only support tiled layouts */ if (res->layout != ETNA_LAYOUT_TILED) return false; /* If we have HALIGN support, we can allow for the RS padding */ - struct etna_screen *screen = etna_screen(res->base.screen); if (VIV_FEATURE(screen, chipMinorFeatures1, TEXTURE_HALIGN)) return true;