Mesa (master): etnaviv: add support for snorm textures

Christian Gmeiner austriancoder at kemper.freedesktop.org
Mon Jun 26 18:00:03 UTC 2017


Module: Mesa
Branch: master
Commit: d8b2ccdb880f95a15437c384257e6aeea95dba3c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d8b2ccdb880f95a15437c384257e6aeea95dba3c

Author: Christian Gmeiner <christian.gmeiner at gmail.com>
Date:   Wed Jun 21 22:36:48 2017 +0200

etnaviv: add support for snorm textures

Based on a patch from Wladimir J. van der Laan and untested due
to lack of hardware. Binary blob emits those formats if GPU supports
HALTI1 (faked with ibvivhook).

Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
Reviewed-by: Wladimir J. van der Laan <laanwj at gmail.com>

---

 src/gallium/drivers/etnaviv/etnaviv_format.c | 7 ++++---
 src/gallium/drivers/etnaviv/etnaviv_screen.c | 3 +++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_format.c b/src/gallium/drivers/etnaviv/etnaviv_format.c
index 354dc2026c..c7c032a2e3 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_format.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_format.c
@@ -91,7 +91,7 @@ struct etna_format {
 static struct etna_format formats[PIPE_FORMAT_COUNT] = {
    /* 8-bit */
    V_(R8_UNORM,   UNSIGNED_BYTE, NONE),
-   V_(R8_SNORM,   BYTE,          NONE),
+   VT(R8_SNORM,   BYTE,          EXT_R8_SNORM | EXT_FORMAT, SWIZ(X, 0, 0, 1), NONE),
    V_(R8_UINT,    UNSIGNED_BYTE, NONE),
    V_(R8_SINT,    BYTE,          NONE),
    V_(R8_USCALED, UNSIGNED_BYTE, NONE),
@@ -121,7 +121,7 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = {
    _T(B5G5R5X1_UNORM, X1R5G5B5, SWIZ(X, Y, Z, W), X1R5G5B5),
 
    VT(R8G8_UNORM,   UNSIGNED_BYTE,  EXT_G8R8 | EXT_FORMAT, SWIZ(X, Y, 0, 1), NONE),
-   V_(R8G8_SNORM,   BYTE,           NONE),
+   VT(R8G8_SNORM,   BYTE,           EXT_G8R8_SNORM | EXT_FORMAT, SWIZ(X, Y, 0, 1), NONE),
    V_(R8G8_UINT,    UNSIGNED_BYTE,  NONE),
    V_(R8G8_SINT,    BYTE,           NONE),
    V_(R8G8_USCALED, UNSIGNED_BYTE,  NONE),
@@ -156,8 +156,9 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = {
    V_(A8B8G8R8_UNORM,   UNSIGNED_BYTE, NONE),
 
    V_(R8G8B8A8_UNORM,   UNSIGNED_BYTE, A8B8G8R8),
-   V_(R8G8B8A8_SNORM,   BYTE,          A8B8G8R8),
+   VT(R8G8B8A8_SNORM,   BYTE,          EXT_A8B8G8R8_SNORM | EXT_FORMAT, SWIZ(X, Y, Z, 1), NONE),
    _T(R8G8B8X8_UNORM,   X8B8G8R8,      SWIZ(X, Y, Z, W), X8B8G8R8),
+   _T(R8G8B8X8_SNORM,   EXT_X8B8G8R8_SNORM | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
    V_(R8G8B8A8_UINT,    UNSIGNED_BYTE, A8B8G8R8),
    V_(R8G8B8A8_SINT,    BYTE,          A8B8G8R8),
    V_(R8G8B8A8_USCALED, UNSIGNED_BYTE, A8B8G8R8),
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index 19d3d91192..eefb51c5da 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -473,6 +473,9 @@ gpu_supports_texure_format(struct etna_screen *screen, uint32_t fmt,
    if (fmt & EXT_FORMAT)
       supported = VIV_FEATURE(screen, chipMinorFeatures1, HALTI0);
 
+   if (util_format_is_snorm(format))
+      supported = VIV_FEATURE(screen, chipMinorFeatures2, HALTI1);
+
    if (!supported)
       return false;
 




More information about the mesa-commit mailing list