If the GPU supports linear sampling, linear addressing mode will be used as default.
Signed-off-by: Christian Gmeiner <christian.gmei...@gmail.com> --- src/gallium/drivers/etnaviv/etnaviv_resource.c | 10 +++++++--- src/gallium/drivers/etnaviv/etnaviv_texture.c | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index 9a7ebf3064e..7d24b1f03bd 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c @@ -318,9 +318,9 @@ etna_resource_create(struct pipe_screen *pscreen, { struct etna_screen *screen = etna_screen(pscreen); - /* Figure out what tiling and address mode 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. + /* Figure out what tiling and address mode to use. + * Textures are TILED or LINEAR. If LINEAR_TEXTURE_SUPPORT capability is + * available LINEAR gets prefered. * Buffers always have LINEAR layout. */ unsigned layout = ETNA_LAYOUT_LINEAR; @@ -334,6 +334,10 @@ etna_resource_create(struct pipe_screen *pscreen, if (util_format_is_compressed(templat->format)) layout = ETNA_LAYOUT_LINEAR; + else if (VIV_FEATURE(screen, chipMinorFeatures1, LINEAR_TEXTURE_SUPPORT)) { + layout = ETNA_LAYOUT_LINEAR; + mode = ETNA_ADDRESSING_MODE_LINEAR; + } } else if (templat->target != PIPE_BUFFER) { bool want_multitiled = false; bool want_supertiled = screen->specs.can_supertile; diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c b/src/gallium/drivers/etnaviv/etnaviv_texture.c index 3993e31cec1..b06f20531fd 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_texture.c +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c @@ -172,7 +172,9 @@ etna_resource_sampler_compatible(struct etna_resource *res) if (res->layout == ETNA_LAYOUT_SUPER_TILED && VIV_FEATURE(screen, chipMinorFeatures2, SUPERTILED_TEXTURE)) return true; - /* TODO: LINEAR_TEXTURE_SUPPORT */ + /* This GPU supports texturing from linear textures? */ + if (res->layout == ETNA_LAYOUT_LINEAR && VIV_FEATURE(screen, chipMinorFeatures1, LINEAR_TEXTURE_SUPPORT)) + return true; /* Otherwise, only support tiled layouts */ if (res->layout != ETNA_LAYOUT_TILED) -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev