diff options
author | Rob Clark <robclark@freedesktop.org> | 2014-06-13 13:34:55 -0400 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2014-07-07 16:09:36 -0700 |
commit | 018685822756405fc4f1a9e5581458cc4d383c48 (patch) | |
tree | d7ed16df9783b2c49b2e5d3581781c9bcb0c320e | |
parent | b20c82f74c44941368c681fb118338a29c2b1ea5 (diff) |
freedreno/a3xx: vtx formats
Add support for more vertex buffer formats.
Signed-off-by: Rob Clark <robclark@freedesktop.org>
(cherry picked from commit 06e9536e5f5f0cc280385bcf813ecdcf6573401b)
Squashed with:
freedreno: update generated headers
Signed-off-by: Rob Clark <robclark@freedesktop.org>
(cherry picked from commit ba6a490bbc81380fdffcb080752682b7f38b95e6)
-rw-r--r-- | src/gallium/drivers/freedreno/a2xx/a2xx.xml.h | 8 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a3xx/a3xx.xml.h | 15 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a3xx/fd3_emit.c | 8 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a3xx/fd3_util.c | 134 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/adreno_common.xml.h | 8 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/adreno_pm4.xml.h | 8 |
6 files changed, 102 insertions, 79 deletions
diff --git a/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h b/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h index 113fd0008bf..d6ce26b38db 100644 --- a/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h +++ b/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h @@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git The rules-ng-ng source files this header was generated from are: - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-05-21 20:40:21) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-05-21 20:39:42) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30) - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57954 bytes, from 2014-05-26 12:57:46) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-05-21 20:46:17) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10) Copyright (C) 2013-2014 by the following authors: - Rob Clark <robdclark@gmail.com> (robclark) diff --git a/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h b/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h index 92380ebcbe3..5878807b326 100644 --- a/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h +++ b/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h @@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git The rules-ng-ng source files this header was generated from are: - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-05-21 20:40:21) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-05-21 20:39:42) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30) - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57954 bytes, from 2014-05-26 12:57:46) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-05-21 20:46:17) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10) Copyright (C) 2013-2014 by the following authors: - Rob Clark <robdclark@gmail.com> (robclark) @@ -988,6 +988,7 @@ static inline uint32_t A3XX_RB_COPY_CONTROL_MSAA_RESOLVE(enum a3xx_msaa_samples { return ((val) << A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__SHIFT) & A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__MASK; } +#define A3XX_RB_COPY_CONTROL_DEPTHCLEAR 0x00000008 #define A3XX_RB_COPY_CONTROL_MODE__MASK 0x00000070 #define A3XX_RB_COPY_CONTROL_MODE__SHIFT 4 static inline uint32_t A3XX_RB_COPY_CONTROL_MODE(enum adreno_rb_copy_control_mode val) @@ -1536,6 +1537,12 @@ static inline uint32_t A3XX_VFD_DECODE_INSTR_REGID(uint32_t val) { return ((val) << A3XX_VFD_DECODE_INSTR_REGID__SHIFT) & A3XX_VFD_DECODE_INSTR_REGID__MASK; } +#define A3XX_VFD_DECODE_INSTR_SWAP__MASK 0x00c00000 +#define A3XX_VFD_DECODE_INSTR_SWAP__SHIFT 22 +static inline uint32_t A3XX_VFD_DECODE_INSTR_SWAP(enum a3xx_color_swap val) +{ + return ((val) << A3XX_VFD_DECODE_INSTR_SWAP__SHIFT) & A3XX_VFD_DECODE_INSTR_SWAP__MASK; +} #define A3XX_VFD_DECODE_INSTR_SHIFTCNT__MASK 0x1f000000 #define A3XX_VFD_DECODE_INSTR_SHIFTCNT__SHIFT 24 static inline uint32_t A3XX_VFD_DECODE_INSTR_SHIFTCNT(uint32_t val) diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c index 4c6b5c15aaa..878d6ff6325 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c @@ -327,9 +327,12 @@ fd3_emit_vertex_bufs(struct fd_ringbuffer *ring, if (vp->inputs[i].compmask) { struct pipe_resource *prsc = vbufs[i].prsc; struct fd_resource *rsc = fd_resource(prsc); - enum a3xx_vtx_fmt fmt = fd3_pipe2vtx(vbufs[i].format); + enum pipe_format pfmt = vbufs[i].format; + enum a3xx_vtx_fmt fmt = fd3_pipe2vtx(pfmt); bool switchnext = (i != last); - uint32_t fs = util_format_get_blocksize(vbufs[i].format); + uint32_t fs = util_format_get_blocksize(pfmt); + + debug_assert(fmt != ~0); OUT_PKT0(ring, REG_A3XX_VFD_FETCH(j), 2); OUT_RING(ring, A3XX_VFD_FETCH_INSTR_0_FETCHSIZE(fs - 1) | @@ -343,6 +346,7 @@ fd3_emit_vertex_bufs(struct fd_ringbuffer *ring, OUT_RING(ring, A3XX_VFD_DECODE_INSTR_CONSTFILL | A3XX_VFD_DECODE_INSTR_WRITEMASK(vp->inputs[i].compmask) | A3XX_VFD_DECODE_INSTR_FORMAT(fmt) | + A3XX_VFD_DECODE_INSTR_SWAP(fd3_pipe2swap(pfmt)) | A3XX_VFD_DECODE_INSTR_REGID(vp->inputs[i].regid) | A3XX_VFD_DECODE_INSTR_SHIFTCNT(fs) | A3XX_VFD_DECODE_INSTR_LASTCOMPVALID | diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_util.c b/src/gallium/drivers/freedreno/a3xx/fd3_util.c index 682b47d0836..43f30ba526d 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_util.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_util.c @@ -37,70 +37,44 @@ fd3_pipe2vtx(enum pipe_format format) { switch (format) { /* 8-bit buffers. */ - case PIPE_FORMAT_A8_UNORM: - case PIPE_FORMAT_I8_UNORM: - case PIPE_FORMAT_L8_UNORM: case PIPE_FORMAT_R8_UNORM: - case PIPE_FORMAT_L8_SRGB: return VFMT_NORM_UBYTE_8; - case PIPE_FORMAT_A8_SNORM: - case PIPE_FORMAT_I8_SNORM: - case PIPE_FORMAT_L8_SNORM: case PIPE_FORMAT_R8_SNORM: return VFMT_NORM_BYTE_8; - case PIPE_FORMAT_A8_UINT: - case PIPE_FORMAT_I8_UINT: - case PIPE_FORMAT_L8_UINT: case PIPE_FORMAT_R8_UINT: return VFMT_UBYTE_8; - case PIPE_FORMAT_A8_SINT: - case PIPE_FORMAT_I8_SINT: - case PIPE_FORMAT_L8_SINT: case PIPE_FORMAT_R8_SINT: return VFMT_BYTE_8; /* 16-bit buffers. */ case PIPE_FORMAT_R16_UNORM: - case PIPE_FORMAT_A16_UNORM: - case PIPE_FORMAT_L16_UNORM: - case PIPE_FORMAT_I16_UNORM: case PIPE_FORMAT_Z16_UNORM: return VFMT_NORM_USHORT_16; case PIPE_FORMAT_R16_SNORM: - case PIPE_FORMAT_A16_SNORM: - case PIPE_FORMAT_L16_SNORM: - case PIPE_FORMAT_I16_SNORM: return VFMT_NORM_SHORT_16; case PIPE_FORMAT_R16_UINT: - case PIPE_FORMAT_A16_UINT: - case PIPE_FORMAT_L16_UINT: - case PIPE_FORMAT_I16_UINT: return VFMT_USHORT_16; case PIPE_FORMAT_R16_SINT: - case PIPE_FORMAT_A16_SINT: - case PIPE_FORMAT_L16_SINT: - case PIPE_FORMAT_I16_SINT: return VFMT_SHORT_16; - case PIPE_FORMAT_L8A8_UNORM: + case PIPE_FORMAT_R16_FLOAT: + return VFMT_FLOAT_16; + case PIPE_FORMAT_R8G8_UNORM: return VFMT_NORM_UBYTE_8_8; - case PIPE_FORMAT_L8A8_SNORM: case PIPE_FORMAT_R8G8_SNORM: return VFMT_NORM_BYTE_8_8; - case PIPE_FORMAT_L8A8_UINT: case PIPE_FORMAT_R8G8_UINT: return VFMT_UBYTE_8_8; - case PIPE_FORMAT_L8A8_SINT: case PIPE_FORMAT_R8G8_SINT: return VFMT_BYTE_8_8; @@ -121,42 +95,62 @@ fd3_pipe2vtx(enum pipe_format format) case PIPE_FORMAT_A8B8G8R8_UNORM: case PIPE_FORMAT_A8R8G8B8_UNORM: case PIPE_FORMAT_B8G8R8A8_UNORM: - case PIPE_FORMAT_B8G8R8X8_UNORM: case PIPE_FORMAT_R8G8B8A8_UNORM: - case PIPE_FORMAT_R8G8B8X8_UNORM: - case PIPE_FORMAT_X8B8G8R8_UNORM: - case PIPE_FORMAT_X8R8G8B8_UNORM: - case PIPE_FORMAT_A8B8G8R8_SRGB: - case PIPE_FORMAT_B8G8R8A8_SRGB: return VFMT_NORM_UBYTE_8_8_8_8; case PIPE_FORMAT_R8G8B8A8_SNORM: - case PIPE_FORMAT_R8G8B8X8_SNORM: return VFMT_NORM_BYTE_8_8_8_8; case PIPE_FORMAT_R8G8B8A8_UINT: - case PIPE_FORMAT_R8G8B8X8_UINT: return VFMT_UBYTE_8_8_8_8; case PIPE_FORMAT_R8G8B8A8_SINT: - case PIPE_FORMAT_R8G8B8X8_SINT: return VFMT_BYTE_8_8_8_8; -/* TODO probably need gles3 blob drivers to find the 32bit int formats: - case PIPE_FORMAT_R32_UINT: - case PIPE_FORMAT_R32_SINT: - case PIPE_FORMAT_A32_UINT: - case PIPE_FORMAT_A32_SINT: - case PIPE_FORMAT_L32_UINT: - case PIPE_FORMAT_L32_SINT: - case PIPE_FORMAT_I32_UINT: - case PIPE_FORMAT_I32_SINT: -*/ + case PIPE_FORMAT_R16G16_SSCALED: + return VFMT_SHORT_16_16; + + case PIPE_FORMAT_R16G16_FLOAT: + return VFMT_FLOAT_16_16; + + case PIPE_FORMAT_R16G16_UINT: + return VFMT_USHORT_16_16; + + case PIPE_FORMAT_R16G16_UNORM: + return VFMT_NORM_USHORT_16_16; + + case PIPE_FORMAT_R16G16_SNORM: + return VFMT_NORM_SHORT_16_16; + + case PIPE_FORMAT_R10G10B10A2_UNORM: + return VFMT_NORM_UINT_10_10_10_2; + + case PIPE_FORMAT_R10G10B10A2_SNORM: + return VFMT_NORM_INT_10_10_10_2; + + case PIPE_FORMAT_R10G10B10A2_USCALED: + return VFMT_UINT_10_10_10_2; + + case PIPE_FORMAT_R10G10B10A2_SSCALED: + return VFMT_INT_10_10_10_2; + + /* 48-bit buffers. */ + case PIPE_FORMAT_R16G16B16_FLOAT: + return VFMT_FLOAT_16_16_16; + + case PIPE_FORMAT_R16G16B16_SSCALED: + return VFMT_SHORT_16_16_16; + + case PIPE_FORMAT_R16G16B16_UINT: + return VFMT_USHORT_16_16_16; + + case PIPE_FORMAT_R16G16B16_SNORM: + return VFMT_NORM_SHORT_16_16_16; + + case PIPE_FORMAT_R16G16B16_UNORM: + return VFMT_NORM_USHORT_16_16_16; case PIPE_FORMAT_R32_FLOAT: - case PIPE_FORMAT_A32_FLOAT: - case PIPE_FORMAT_L32_FLOAT: - case PIPE_FORMAT_I32_FLOAT: case PIPE_FORMAT_Z32_FLOAT: return VFMT_FLOAT_32; @@ -177,23 +171,14 @@ fd3_pipe2vtx(enum pipe_format format) return VFMT_SHORT_16_16_16_16; case PIPE_FORMAT_R32G32_FLOAT: - case PIPE_FORMAT_L32A32_FLOAT: return VFMT_FLOAT_32_32; case PIPE_FORMAT_R32G32_FIXED: return VFMT_FIXED_32_32; case PIPE_FORMAT_R16G16B16A16_FLOAT: - case PIPE_FORMAT_R16G16B16X16_FLOAT: return VFMT_FLOAT_16_16_16_16; -/* TODO probably need gles3 blob drivers to find the 32bit int formats: - case PIPE_FORMAT_R32G32_SINT: - case PIPE_FORMAT_R32G32_UINT: - case PIPE_FORMAT_L32A32_UINT: - case PIPE_FORMAT_L32A32_SINT: -*/ - /* 96-bit buffers. */ case PIPE_FORMAT_R32G32B32_FLOAT: return VFMT_FLOAT_32_32_32; @@ -203,7 +188,6 @@ fd3_pipe2vtx(enum pipe_format format) /* 128-bit buffers. */ case PIPE_FORMAT_R32G32B32A32_FLOAT: - case PIPE_FORMAT_R32G32B32X32_FLOAT: return VFMT_FLOAT_32_32_32_32; case PIPE_FORMAT_R32G32B32A32_FIXED: @@ -214,6 +198,20 @@ fd3_pipe2vtx(enum pipe_format format) case PIPE_FORMAT_R32G32B32A32_UNORM: case PIPE_FORMAT_R32G32B32A32_SINT: case PIPE_FORMAT_R32G32B32A32_UINT: + + case PIPE_FORMAT_R32_UINT: + case PIPE_FORMAT_R32_SINT: + case PIPE_FORMAT_A32_UINT: + case PIPE_FORMAT_A32_SINT: + case PIPE_FORMAT_L32_UINT: + case PIPE_FORMAT_L32_SINT: + case PIPE_FORMAT_I32_UINT: + case PIPE_FORMAT_I32_SINT: + + case PIPE_FORMAT_R32G32_SINT: + case PIPE_FORMAT_R32G32_UINT: + case PIPE_FORMAT_L32A32_UINT: + case PIPE_FORMAT_L32A32_SINT: */ default: @@ -358,8 +356,22 @@ fd3_pipe2swap(enum pipe_format format) switch (format) { case PIPE_FORMAT_B8G8R8A8_UNORM: case PIPE_FORMAT_B8G8R8X8_UNORM: + case PIPE_FORMAT_B8G8R8A8_SRGB: + case PIPE_FORMAT_B8G8R8X8_SRGB: return WXYZ; + case PIPE_FORMAT_A8R8G8B8_UNORM: + case PIPE_FORMAT_X8R8G8B8_UNORM: + case PIPE_FORMAT_A8R8G8B8_SRGB: + case PIPE_FORMAT_X8R8G8B8_SRGB: + return ZYXW; + + case PIPE_FORMAT_A8B8G8R8_UNORM: + case PIPE_FORMAT_X8B8G8R8_UNORM: + case PIPE_FORMAT_A8B8G8R8_SRGB: + case PIPE_FORMAT_X8B8G8R8_SRGB: + return XYZW; + case PIPE_FORMAT_R8G8B8A8_UNORM: case PIPE_FORMAT_R8G8B8X8_UNORM: case PIPE_FORMAT_Z24X8_UNORM: diff --git a/src/gallium/drivers/freedreno/adreno_common.xml.h b/src/gallium/drivers/freedreno/adreno_common.xml.h index c06bec0dc11..3317ae3469f 100644 --- a/src/gallium/drivers/freedreno/adreno_common.xml.h +++ b/src/gallium/drivers/freedreno/adreno_common.xml.h @@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git The rules-ng-ng source files this header was generated from are: - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-05-21 20:40:21) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-05-21 20:39:42) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30) - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57954 bytes, from 2014-05-26 12:57:46) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-05-21 20:46:17) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10) Copyright (C) 2013-2014 by the following authors: - Rob Clark <robdclark@gmail.com> (robclark) diff --git a/src/gallium/drivers/freedreno/adreno_pm4.xml.h b/src/gallium/drivers/freedreno/adreno_pm4.xml.h index 8fb59a4746c..08f26739a6f 100644 --- a/src/gallium/drivers/freedreno/adreno_pm4.xml.h +++ b/src/gallium/drivers/freedreno/adreno_pm4.xml.h @@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git The rules-ng-ng source files this header was generated from are: - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-05-21 20:40:21) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-05-21 20:39:42) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30) - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57954 bytes, from 2014-05-26 12:57:46) -- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-05-21 20:46:17) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47) +- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10) Copyright (C) 2013-2014 by the following authors: - Rob Clark <robdclark@gmail.com> (robclark) |