OSDN Git Service

freedreno/a3xx: add missing integer formats and enable rendering
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 29 Nov 2014 07:14:35 +0000 (02:14 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sun, 30 Nov 2014 18:04:28 +0000 (13:04 -0500)
The mesa state tracker doesn't fall back on similar integer formats, so
they must all be provided. Remove the restriction against integer color
rendering.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/freedreno/a3xx/fd3_format.c

index 59f5a44..9235a53 100644 (file)
@@ -84,6 +84,13 @@ static struct fd3_format formats[PIPE_FORMAT_COUNT] = {
        _T(L8_UNORM,   8_UNORM, R8_UNORM, WZYX),
        _T(I8_UNORM,   8_UNORM, NONE,     WZYX),
 
+       _T(A8_UINT,    8_UINT,  NONE,     WZYX),
+       _T(A8_SINT,    8_SINT,  NONE,     WZYX),
+       _T(L8_UINT,    8_UINT,  NONE,     WZYX),
+       _T(L8_SINT,    8_SINT,  NONE,     WZYX),
+       _T(I8_UINT,    8_UINT,  NONE,     WZYX),
+       _T(I8_SINT,    8_SINT,  NONE,     WZYX),
+
        /* 16-bit */
        VT(R16_UNORM,   16_UNORM, NONE,     WZYX),
        VT(R16_SNORM,   16_SNORM, NONE,     WZYX),
@@ -93,6 +100,13 @@ static struct fd3_format formats[PIPE_FORMAT_COUNT] = {
        V_(R16_SSCALED, 16_UINT,  NONE,     WZYX),
        VT(R16_FLOAT,   16_FLOAT, NONE,     WZYX),
 
+       _T(A16_UINT,    16_UINT,  NONE,     WZYX),
+       _T(A16_SINT,    16_SINT,  NONE,     WZYX),
+       _T(L16_UINT,    16_UINT,  NONE,     WZYX),
+       _T(L16_SINT,    16_SINT,  NONE,     WZYX),
+       _T(I16_UINT,    16_UINT,  NONE,     WZYX),
+       _T(I16_SINT,    16_SINT,  NONE,     WZYX),
+
        VT(R8G8_UNORM,   8_8_UNORM, R8G8_UNORM, WZYX),
        VT(R8G8_SNORM,   8_8_SNORM, R8G8_SNORM, WZYX),
        VT(R8G8_UINT,    8_8_UINT,  NONE,       WZYX),
@@ -100,6 +114,9 @@ static struct fd3_format formats[PIPE_FORMAT_COUNT] = {
        V_(R8G8_USCALED, 8_8_UINT,  NONE,       WZYX),
        V_(R8G8_SSCALED, 8_8_SINT,  NONE,       WZYX),
 
+       _T(L8A8_UINT,    8_8_UINT,  NONE,       WZYX),
+       _T(L8A8_SINT,    8_8_SINT,  NONE,       WZYX),
+
        _T(Z16_UNORM,      Z16_UNORM,     R8G8_UNORM,     WZYX),
        /*_T(B5G6R5_UNORM,   5_6_5_UNORM,   R5G6B5_UNORM,   WXYZ),*/
        _T(B5G5R5A1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ),
@@ -122,6 +139,13 @@ static struct fd3_format formats[PIPE_FORMAT_COUNT] = {
        VT(R32_FLOAT,   32_FLOAT, NONE,     WZYX),
        V_(R32_FIXED,   32_FIXED, NONE,     WZYX),
 
+       _T(A32_UINT,    32_UINT,  NONE,     WZYX),
+       _T(A32_SINT,    32_SINT,  NONE,     WZYX),
+       _T(L32_UINT,    32_UINT,  NONE,     WZYX),
+       _T(L32_SINT,    32_SINT,  NONE,     WZYX),
+       _T(I32_UINT,    32_UINT,  NONE,     WZYX),
+       _T(I32_SINT,    32_SINT,  NONE,     WZYX),
+
        VT(R16G16_UNORM,   16_16_UNORM, NONE,        WZYX),
        VT(R16G16_SNORM,   16_16_SNORM, NONE,        WZYX),
        VT(R16G16_UINT,    16_16_UINT,  R16G16_UINT, WZYX),
@@ -130,6 +154,9 @@ static struct fd3_format formats[PIPE_FORMAT_COUNT] = {
        V_(R16G16_SSCALED, 16_16_SINT,  NONE,        WZYX),
        VT(R16G16_FLOAT,   16_16_FLOAT, NONE,        WZYX),
 
+       _T(L16A16_UINT,    16_16_UINT,  NONE,        WZYX),
+       _T(L16A16_SINT,    16_16_SINT,  NONE,        WZYX),
+
        VT(R8G8B8A8_UNORM,   8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),
        _T(R8G8B8X8_UNORM,   8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),
        _T(R8G8B8A8_SRGB,    8_8_8_8_UNORM, NONE,           WZYX),
@@ -196,6 +223,9 @@ static struct fd3_format formats[PIPE_FORMAT_COUNT] = {
        VT(R32G32_FLOAT,   32_32_FLOAT, NONE,        WZYX),
        V_(R32G32_FIXED,   32_32_FIXED, NONE,        WZYX),
 
+       _T(L32A32_UINT,    32_32_UINT,  NONE,        WZYX),
+       _T(L32A32_SINT,    32_32_SINT,  NONE,        WZYX),
+
        /* 96-bit */
        V_(R32G32B32_UINT,    32_32_32_UINT,  NONE, WZYX),
        V_(R32G32B32_SINT,    32_32_32_SINT,  NONE, WZYX),
@@ -237,9 +267,6 @@ fd3_pipe2color(enum pipe_format format)
 {
        if (!formats[format].present)
                return ~0;
-       /* Integer formats don't render properly yet */
-       if (util_format_is_pure_integer(format))
-               return ~0;
        return formats[format].rb;
 }