OSDN Git Service

libdrm: add etnaviv tests
authorThe etnaviv authors <dri-devel@lists.freedesktop.org>
Tue, 6 Sep 2016 16:16:02 +0000 (18:16 +0200)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Sat, 17 Sep 2016 13:05:33 +0000 (15:05 +0200)
This adds the following basic unit tests:

- etnaviv_2d_test
  Let the 2D core render a defined pattern into a bo
  and store it as bmp.

- etnaviv_bo_cache_test
  Basic tests to validate the bo-cache behavior.

- etnaviv_cmd_stream_test
  Tests for the etna_cmd_stream API.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
12 files changed:
.gitignore
configure.ac
tests/Makefile.am
tests/etnaviv/Makefile.am [new file with mode: 0644]
tests/etnaviv/cmdstream.xml.h [new file with mode: 0644]
tests/etnaviv/etnaviv_2d_test.c [new file with mode: 0644]
tests/etnaviv/etnaviv_bo_cache_test.c [new file with mode: 0644]
tests/etnaviv/etnaviv_cmd_stream_test.c [new file with mode: 0644]
tests/etnaviv/state.xml.h [new file with mode: 0644]
tests/etnaviv/state_2d.xml.h [new file with mode: 0644]
tests/etnaviv/write_bmp.c [new file with mode: 0644]
tests/etnaviv/write_bmp.h [new file with mode: 0644]

index 3226b3a..d51e619 100644 (file)
@@ -102,4 +102,7 @@ tests/radeon/radeon_ttm
 tests/exynos/exynos_fimg2d_event
 tests/exynos/exynos_fimg2d_perf
 tests/exynos/exynos_fimg2d_test
+tests/etnaviv/etnaviv_2d_test
+tests/etnaviv/etnaviv_cmd_stream_test
+tests/etnaviv/etnaviv_bo_cache_test
 man/*.3
index 64f3e6c..330358a 100644 (file)
@@ -551,6 +551,7 @@ AC_CONFIG_FILES([
        tests/exynos/Makefile
        tests/tegra/Makefile
        tests/nouveau/Makefile
+       tests/etnaviv/Makefile
        tests/util/Makefile
        man/Makefile
        libdrm.pc])
index 58feb12..4a499e4 100644 (file)
@@ -22,6 +22,10 @@ if HAVE_TEGRA
 SUBDIRS += tegra
 endif
 
+if HAVE_ETNAVIV
+SUBDIRS += etnaviv
+endif
+
 AM_CFLAGS = \
        $(WARN_CFLAGS)\
        -I $(top_srcdir)/include/drm \
diff --git a/tests/etnaviv/Makefile.am b/tests/etnaviv/Makefile.am
new file mode 100644 (file)
index 0000000..0631864
--- /dev/null
@@ -0,0 +1,41 @@
+AM_CFLAGS = \
+       -I $(top_srcdir)/include/drm \
+       -I $(top_srcdir)/etnaviv \
+       -I $(top_srcdir)
+
+if HAVE_INSTALL_TESTS
+bin_PROGRAMS = \
+       etnaviv_2d_test \
+       etnaviv_cmd_stream_test \
+       etnaviv_bo_cache_test
+else
+noinst_PROGRAMS = \
+       etnaviv_2d_test \
+       etnaviv_cmd_stream_test \
+       etnaviv_bo_cache_test
+endif
+
+etnaviv_2d_test_LDADD = \
+       $(top_builddir)/libdrm.la \
+       $(top_builddir)/etnaviv/libdrm_etnaviv.la
+
+etnaviv_2d_test_SOURCES = \
+       cmdstream.xml.h \
+       etnaviv_2d_test.c \
+       state.xml.h \
+       state_2d.xml.h \
+       write_bmp.c \
+       write_bmp.h
+
+etnaviv_cmd_stream_test_LDADD = \
+       $(top_builddir)/etnaviv/libdrm_etnaviv.la
+
+etnaviv_cmd_stream_test_SOURCES = \
+       etnaviv_cmd_stream_test.c
+
+etnaviv_bo_cache_test_LDADD = \
+       $(top_builddir)/libdrm.la \
+       $(top_builddir)/etnaviv/libdrm_etnaviv.la
+
+etnaviv_bo_cache_test_SOURCES = \
+       etnaviv_bo_cache_test.c
diff --git a/tests/etnaviv/cmdstream.xml.h b/tests/etnaviv/cmdstream.xml.h
new file mode 100644 (file)
index 0000000..109285c
--- /dev/null
@@ -0,0 +1,242 @@
+#ifndef CMDSTREAM_XML
+#define CMDSTREAM_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- cmdstream.xml (  12621 bytes, from 2016-09-06 14:44:16)
+- copyright.xml (   1597 bytes, from 2016-09-06 14:44:16)
+- common.xml    (  20583 bytes, from 2016-09-06 14:14:12)
+
+Copyright (C) 2012-2016 by the following authors:
+- Wladimir J. van der Laan <laanwj@gmail.com>
+- Christian Gmeiner <christian.gmeiner@gmail.com>
+- Lucas Stach <l.stach@pengutronix.de>
+- Russell King <rmk@arm.linux.org.uk>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sub license,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+
+#define FE_OPCODE_LOAD_STATE                                   0x00000001
+#define FE_OPCODE_END                                          0x00000002
+#define FE_OPCODE_NOP                                          0x00000003
+#define FE_OPCODE_DRAW_2D                                      0x00000004
+#define FE_OPCODE_DRAW_PRIMITIVES                              0x00000005
+#define FE_OPCODE_DRAW_INDEXED_PRIMITIVES                      0x00000006
+#define FE_OPCODE_WAIT                                         0x00000007
+#define FE_OPCODE_LINK                                         0x00000008
+#define FE_OPCODE_STALL                                                0x00000009
+#define FE_OPCODE_CALL                                         0x0000000a
+#define FE_OPCODE_RETURN                                       0x0000000b
+#define FE_OPCODE_CHIP_SELECT                                  0x0000000d
+#define PRIMITIVE_TYPE_POINTS                                  0x00000001
+#define PRIMITIVE_TYPE_LINES                                   0x00000002
+#define PRIMITIVE_TYPE_LINE_STRIP                              0x00000003
+#define PRIMITIVE_TYPE_TRIANGLES                               0x00000004
+#define PRIMITIVE_TYPE_TRIANGLE_STRIP                          0x00000005
+#define PRIMITIVE_TYPE_TRIANGLE_FAN                            0x00000006
+#define PRIMITIVE_TYPE_LINE_LOOP                               0x00000007
+#define PRIMITIVE_TYPE_QUADS                                   0x00000008
+#define VIV_FE_LOAD_STATE                                      0x00000000
+
+#define VIV_FE_LOAD_STATE_HEADER                               0x00000000
+#define VIV_FE_LOAD_STATE_HEADER_OP__MASK                      0xf8000000
+#define VIV_FE_LOAD_STATE_HEADER_OP__SHIFT                     27
+#define VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE                 0x08000000
+#define VIV_FE_LOAD_STATE_HEADER_FIXP                          0x04000000
+#define VIV_FE_LOAD_STATE_HEADER_COUNT__MASK                   0x03ff0000
+#define VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT                  16
+#define VIV_FE_LOAD_STATE_HEADER_COUNT(x)                      (((x) << VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT) & VIV_FE_LOAD_STATE_HEADER_COUNT__MASK)
+#define VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK                  0x0000ffff
+#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT                 0
+#define VIV_FE_LOAD_STATE_HEADER_OFFSET(x)                     (((x) << VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT) & VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK)
+#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHR                   2
+
+#define VIV_FE_END                                             0x00000000
+
+#define VIV_FE_END_HEADER                                      0x00000000
+#define VIV_FE_END_HEADER_EVENT_ID__MASK                       0x0000001f
+#define VIV_FE_END_HEADER_EVENT_ID__SHIFT                      0
+#define VIV_FE_END_HEADER_EVENT_ID(x)                          (((x) << VIV_FE_END_HEADER_EVENT_ID__SHIFT) & VIV_FE_END_HEADER_EVENT_ID__MASK)
+#define VIV_FE_END_HEADER_EVENT_ENABLE                         0x00000100
+#define VIV_FE_END_HEADER_OP__MASK                             0xf8000000
+#define VIV_FE_END_HEADER_OP__SHIFT                            27
+#define VIV_FE_END_HEADER_OP_END                               0x10000000
+
+#define VIV_FE_NOP                                             0x00000000
+
+#define VIV_FE_NOP_HEADER                                      0x00000000
+#define VIV_FE_NOP_HEADER_OP__MASK                             0xf8000000
+#define VIV_FE_NOP_HEADER_OP__SHIFT                            27
+#define VIV_FE_NOP_HEADER_OP_NOP                               0x18000000
+
+#define VIV_FE_DRAW_2D                                         0x00000000
+
+#define VIV_FE_DRAW_2D_HEADER                                  0x00000000
+#define VIV_FE_DRAW_2D_HEADER_COUNT__MASK                      0x0000ff00
+#define VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT                     8
+#define VIV_FE_DRAW_2D_HEADER_COUNT(x)                         (((x) << VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_COUNT__MASK)
+#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK                 0x07ff0000
+#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT                        16
+#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT(x)                    (((x) << VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK)
+#define VIV_FE_DRAW_2D_HEADER_OP__MASK                         0xf8000000
+#define VIV_FE_DRAW_2D_HEADER_OP__SHIFT                                27
+#define VIV_FE_DRAW_2D_HEADER_OP_DRAW_2D                       0x20000000
+
+#define VIV_FE_DRAW_2D_TOP_LEFT                                        0x00000008
+#define VIV_FE_DRAW_2D_TOP_LEFT_X__MASK                                0x0000ffff
+#define VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT                       0
+#define VIV_FE_DRAW_2D_TOP_LEFT_X(x)                           (((x) << VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT) & VIV_FE_DRAW_2D_TOP_LEFT_X__MASK)
+#define VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK                                0xffff0000
+#define VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT                       16
+#define VIV_FE_DRAW_2D_TOP_LEFT_Y(x)                           (((x) << VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT) & VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK)
+
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT                            0x0000000c
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK                    0x0000ffff
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT                   0
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X(x)                       (((x) << VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT) & VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK)
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK                    0xffff0000
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT                   16
+#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y(x)                       (((x) << VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT) & VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK)
+
+#define VIV_FE_DRAW_PRIMITIVES                                 0x00000000
+
+#define VIV_FE_DRAW_PRIMITIVES_HEADER                          0x00000000
+#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__MASK                 0xf8000000
+#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__SHIFT                        27
+#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES       0x28000000
+
+#define VIV_FE_DRAW_PRIMITIVES_COMMAND                         0x00000004
+#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK              0x000000ff
+#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT             0
+#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE(x)                 (((x) << VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK)
+
+#define VIV_FE_DRAW_PRIMITIVES_START                           0x00000008
+
+#define VIV_FE_DRAW_PRIMITIVES_COUNT                           0x0000000c
+
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES                         0x00000000
+
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER                  0x00000000
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__MASK         0xf8000000
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__SHIFT                27
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP_DRAW_INDEXED_PRIMITIVES       0x30000000
+
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND                 0x00000004
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK      0x000000ff
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT     0
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE(x)         (((x) << VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK)
+
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_START                   0x00000008
+
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COUNT                   0x0000000c
+
+#define VIV_FE_DRAW_INDEXED_PRIMITIVES_OFFSET                  0x00000010
+
+#define VIV_FE_WAIT                                            0x00000000
+
+#define VIV_FE_WAIT_HEADER                                     0x00000000
+#define VIV_FE_WAIT_HEADER_DELAY__MASK                         0x0000ffff
+#define VIV_FE_WAIT_HEADER_DELAY__SHIFT                                0
+#define VIV_FE_WAIT_HEADER_DELAY(x)                            (((x) << VIV_FE_WAIT_HEADER_DELAY__SHIFT) & VIV_FE_WAIT_HEADER_DELAY__MASK)
+#define VIV_FE_WAIT_HEADER_OP__MASK                            0xf8000000
+#define VIV_FE_WAIT_HEADER_OP__SHIFT                           27
+#define VIV_FE_WAIT_HEADER_OP_WAIT                             0x38000000
+
+#define VIV_FE_LINK                                            0x00000000
+
+#define VIV_FE_LINK_HEADER                                     0x00000000
+#define VIV_FE_LINK_HEADER_PREFETCH__MASK                      0x0000ffff
+#define VIV_FE_LINK_HEADER_PREFETCH__SHIFT                     0
+#define VIV_FE_LINK_HEADER_PREFETCH(x)                         (((x) << VIV_FE_LINK_HEADER_PREFETCH__SHIFT) & VIV_FE_LINK_HEADER_PREFETCH__MASK)
+#define VIV_FE_LINK_HEADER_OP__MASK                            0xf8000000
+#define VIV_FE_LINK_HEADER_OP__SHIFT                           27
+#define VIV_FE_LINK_HEADER_OP_LINK                             0x40000000
+
+#define VIV_FE_LINK_ADDRESS                                    0x00000004
+
+#define VIV_FE_STALL                                           0x00000000
+
+#define VIV_FE_STALL_HEADER                                    0x00000000
+#define VIV_FE_STALL_HEADER_OP__MASK                           0xf8000000
+#define VIV_FE_STALL_HEADER_OP__SHIFT                          27
+#define VIV_FE_STALL_HEADER_OP_STALL                           0x48000000
+
+#define VIV_FE_STALL_TOKEN                                     0x00000004
+#define VIV_FE_STALL_TOKEN_FROM__MASK                          0x0000001f
+#define VIV_FE_STALL_TOKEN_FROM__SHIFT                         0
+#define VIV_FE_STALL_TOKEN_FROM(x)                             (((x) << VIV_FE_STALL_TOKEN_FROM__SHIFT) & VIV_FE_STALL_TOKEN_FROM__MASK)
+#define VIV_FE_STALL_TOKEN_TO__MASK                            0x00001f00
+#define VIV_FE_STALL_TOKEN_TO__SHIFT                           8
+#define VIV_FE_STALL_TOKEN_TO(x)                               (((x) << VIV_FE_STALL_TOKEN_TO__SHIFT) & VIV_FE_STALL_TOKEN_TO__MASK)
+
+#define VIV_FE_CALL                                            0x00000000
+
+#define VIV_FE_CALL_HEADER                                     0x00000000
+#define VIV_FE_CALL_HEADER_PREFETCH__MASK                      0x0000ffff
+#define VIV_FE_CALL_HEADER_PREFETCH__SHIFT                     0
+#define VIV_FE_CALL_HEADER_PREFETCH(x)                         (((x) << VIV_FE_CALL_HEADER_PREFETCH__SHIFT) & VIV_FE_CALL_HEADER_PREFETCH__MASK)
+#define VIV_FE_CALL_HEADER_OP__MASK                            0xf8000000
+#define VIV_FE_CALL_HEADER_OP__SHIFT                           27
+#define VIV_FE_CALL_HEADER_OP_CALL                             0x50000000
+
+#define VIV_FE_CALL_ADDRESS                                    0x00000004
+
+#define VIV_FE_CALL_RETURN_PREFETCH                            0x00000008
+
+#define VIV_FE_CALL_RETURN_ADDRESS                             0x0000000c
+
+#define VIV_FE_RETURN                                          0x00000000
+
+#define VIV_FE_RETURN_HEADER                                   0x00000000
+#define VIV_FE_RETURN_HEADER_OP__MASK                          0xf8000000
+#define VIV_FE_RETURN_HEADER_OP__SHIFT                         27
+#define VIV_FE_RETURN_HEADER_OP_RETURN                         0x58000000
+
+#define VIV_FE_CHIP_SELECT                                     0x00000000
+
+#define VIV_FE_CHIP_SELECT_HEADER                              0x00000000
+#define VIV_FE_CHIP_SELECT_HEADER_OP__MASK                     0xf8000000
+#define VIV_FE_CHIP_SELECT_HEADER_OP__SHIFT                    27
+#define VIV_FE_CHIP_SELECT_HEADER_OP_CHIP_SELECT               0x68000000
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP15                        0x00008000
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP14                        0x00004000
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP13                        0x00002000
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP12                        0x00001000
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP11                        0x00000800
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP10                        0x00000400
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP9                 0x00000200
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP8                 0x00000100
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP7                 0x00000080
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP6                 0x00000040
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP5                 0x00000020
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP4                 0x00000010
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP3                 0x00000008
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP2                 0x00000004
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP1                 0x00000002
+#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP0                 0x00000001
+
+
+#endif /* CMDSTREAM_XML */
diff --git a/tests/etnaviv/etnaviv_2d_test.c b/tests/etnaviv/etnaviv_2d_test.c
new file mode 100644 (file)
index 0000000..10751c7
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2014-2015 Etnaviv Project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Authors:
+ *    Christian Gmeiner <christian.gmeiner@gmail.com>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "xf86drm.h"
+#include "etnaviv_drmif.h"
+#include "etnaviv_drm.h"
+
+#include "state.xml.h"
+#include "state_2d.xml.h"
+#include "cmdstream.xml.h"
+
+#include "write_bmp.h"
+
+static inline void etna_emit_load_state(struct etna_cmd_stream *stream,
+               const uint16_t offset, const uint16_t count)
+{
+       uint32_t v;
+
+       v =     (VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | VIV_FE_LOAD_STATE_HEADER_OFFSET(offset) |
+                       (VIV_FE_LOAD_STATE_HEADER_COUNT(count) & VIV_FE_LOAD_STATE_HEADER_COUNT__MASK));
+
+       etna_cmd_stream_emit(stream, v);
+}
+
+static inline void etna_set_state(struct etna_cmd_stream *stream, uint32_t address, uint32_t value)
+{
+       etna_cmd_stream_reserve(stream, 2);
+       etna_emit_load_state(stream, address >> 2, 1);
+       etna_cmd_stream_emit(stream, value);
+}
+
+static inline void etna_set_state_from_bo(struct etna_cmd_stream *stream,
+               uint32_t address, struct etna_bo *bo)
+{
+       etna_cmd_stream_reserve(stream, 2);
+       etna_emit_load_state(stream, address >> 2, 1);
+
+       etna_cmd_stream_reloc(stream, &(struct etna_reloc){
+               .bo = bo,
+               .flags = ETNA_RELOC_READ,
+               .offset = 0,
+       });
+}
+
+static void gen_cmd_stream(struct etna_cmd_stream *stream, struct etna_bo *bmp, const int width, const int height)
+{
+       int rec;
+       static int num_rects = 256;
+
+       etna_set_state(stream, VIVS_DE_SRC_STRIDE, 0);
+       etna_set_state(stream, VIVS_DE_SRC_ROTATION_CONFIG, 0);
+       etna_set_state(stream, VIVS_DE_SRC_CONFIG, 0);
+       etna_set_state(stream, VIVS_DE_SRC_ORIGIN, 0);
+       etna_set_state(stream, VIVS_DE_SRC_SIZE, 0);
+       etna_set_state(stream, VIVS_DE_SRC_COLOR_BG, 0);
+       etna_set_state(stream, VIVS_DE_SRC_COLOR_FG, 0);
+       etna_set_state(stream, VIVS_DE_STRETCH_FACTOR_LOW, 0);
+       etna_set_state(stream, VIVS_DE_STRETCH_FACTOR_HIGH, 0);
+       etna_set_state_from_bo(stream, VIVS_DE_DEST_ADDRESS, bmp);
+       etna_set_state(stream, VIVS_DE_DEST_STRIDE, width*4);
+       etna_set_state(stream, VIVS_DE_DEST_ROTATION_CONFIG, 0);
+       etna_set_state(stream, VIVS_DE_DEST_CONFIG,
+                       VIVS_DE_DEST_CONFIG_FORMAT(DE_FORMAT_A8R8G8B8) |
+                       VIVS_DE_DEST_CONFIG_COMMAND_CLEAR |
+                       VIVS_DE_DEST_CONFIG_SWIZZLE(DE_SWIZZLE_ARGB) |
+                       VIVS_DE_DEST_CONFIG_TILED_DISABLE |
+                       VIVS_DE_DEST_CONFIG_MINOR_TILED_DISABLE
+                       );
+       etna_set_state(stream, VIVS_DE_ROP,
+                       VIVS_DE_ROP_ROP_FG(0xcc) | VIVS_DE_ROP_ROP_BG(0xcc) | VIVS_DE_ROP_TYPE_ROP4);
+       etna_set_state(stream, VIVS_DE_CLIP_TOP_LEFT,
+                       VIVS_DE_CLIP_TOP_LEFT_X(0) |
+                       VIVS_DE_CLIP_TOP_LEFT_Y(0)
+                       );
+       etna_set_state(stream, VIVS_DE_CLIP_BOTTOM_RIGHT,
+                       VIVS_DE_CLIP_BOTTOM_RIGHT_X(width) |
+                       VIVS_DE_CLIP_BOTTOM_RIGHT_Y(height)
+                       );
+       etna_set_state(stream, VIVS_DE_CONFIG, 0); /* TODO */
+       etna_set_state(stream, VIVS_DE_SRC_ORIGIN_FRACTION, 0);
+       etna_set_state(stream, VIVS_DE_ALPHA_CONTROL, 0);
+       etna_set_state(stream, VIVS_DE_ALPHA_MODES, 0);
+       etna_set_state(stream, VIVS_DE_DEST_ROTATION_HEIGHT, 0);
+       etna_set_state(stream, VIVS_DE_SRC_ROTATION_HEIGHT, 0);
+       etna_set_state(stream, VIVS_DE_ROT_ANGLE, 0);
+
+       /* Clear color PE20 */
+       etna_set_state(stream, VIVS_DE_CLEAR_PIXEL_VALUE32, 0xff40ff40);
+       /* Clear color PE10 */
+       etna_set_state(stream, VIVS_DE_CLEAR_BYTE_MASK, 0xff);
+       etna_set_state(stream, VIVS_DE_CLEAR_PIXEL_VALUE_LOW, 0xff40ff40);
+       etna_set_state(stream, VIVS_DE_CLEAR_PIXEL_VALUE_HIGH, 0xff40ff40);
+
+       etna_set_state(stream, VIVS_DE_DEST_COLOR_KEY, 0);
+       etna_set_state(stream, VIVS_DE_GLOBAL_SRC_COLOR, 0);
+       etna_set_state(stream, VIVS_DE_GLOBAL_DEST_COLOR, 0);
+       etna_set_state(stream, VIVS_DE_COLOR_MULTIPLY_MODES, 0);
+       etna_set_state(stream, VIVS_DE_PE_TRANSPARENCY, 0);
+       etna_set_state(stream, VIVS_DE_PE_CONTROL, 0);
+       etna_set_state(stream, VIVS_DE_PE_DITHER_LOW, 0xffffffff);
+       etna_set_state(stream, VIVS_DE_PE_DITHER_HIGH, 0xffffffff);
+
+       /* Queue DE command */
+       etna_cmd_stream_emit(stream,
+                       VIV_FE_DRAW_2D_HEADER_OP_DRAW_2D | VIV_FE_DRAW_2D_HEADER_COUNT(num_rects) /* render one rectangle */
+               );
+       etna_cmd_stream_emit(stream, 0x0); /* rectangles start aligned */
+
+       for(rec=0; rec < num_rects; ++rec) {
+               int x = rec%16;
+               int y = rec/16;
+               etna_cmd_stream_emit(stream, VIV_FE_DRAW_2D_TOP_LEFT_X(x*8) | VIV_FE_DRAW_2D_TOP_LEFT_Y(y*8));
+               etna_cmd_stream_emit(stream, VIV_FE_DRAW_2D_BOTTOM_RIGHT_X(x*8+4) | VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y(y*8+4));
+       }
+       etna_set_state(stream, 1, 0);
+       etna_set_state(stream, 1, 0);
+       etna_set_state(stream, 1, 0);
+
+       etna_set_state(stream, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_PE2D);
+}
+
+int main(int argc, char *argv[])
+{
+       const int width = 256;
+       const int height = 256;
+       const size_t bmp_size = width * height * 4;
+
+       struct etna_device *dev;
+       struct etna_gpu *gpu;
+       struct etna_pipe *pipe;
+       struct etna_bo *bmp;
+       struct etna_cmd_stream *stream;
+
+       drmVersionPtr version;
+       int fd, ret = 0;
+
+       fd = open(argv[1], O_RDWR);
+       if (fd < 0)
+               return 1;
+
+       version = drmGetVersion(fd);
+       if (version) {
+               printf("Version: %d.%d.%d\n", version->version_major,
+                      version->version_minor, version->version_patchlevel);
+               printf("  Name: %s\n", version->name);
+               printf("  Date: %s\n", version->date);
+               printf("  Description: %s\n", version->desc);
+               drmFreeVersion(version);
+       }
+
+       dev = etna_device_new(fd);
+       if (!dev) {
+               ret = 2;
+               goto out;
+       }
+
+       /* TODO: we assume that core 0 is a 2D capable one */
+       gpu = etna_gpu_new(dev, 0);
+       if (!gpu) {
+               ret = 3;
+               goto out_device;
+       }
+
+       pipe = etna_pipe_new(gpu, ETNA_PIPE_2D);
+       if (!pipe) {
+               ret = 4;
+               goto out_gpu;
+       }
+
+       bmp = etna_bo_new(dev, bmp_size, ETNA_BO_UNCACHED);
+       if (!bmp) {
+               ret = 5;
+               goto out_pipe;
+       }
+       memset(etna_bo_map(bmp), 0, bmp_size);
+
+       stream = etna_cmd_stream_new(pipe, 0x300, NULL, NULL);
+       if (!stream) {
+               ret = 6;
+               goto out_bo;
+       }
+
+       /* generate command sequence */
+       gen_cmd_stream(stream, bmp, width, height);
+
+       etna_cmd_stream_finish(stream);
+
+       bmp_dump32(etna_bo_map(bmp), width, height, false, "/tmp/etna.bmp");
+
+       etna_cmd_stream_del(stream);
+
+out_bo:
+    etna_bo_del(bmp);
+
+out_pipe:
+       etna_pipe_del(pipe);
+
+out_gpu:
+       etna_gpu_del(gpu);
+
+out_device:
+       etna_device_del(dev);
+
+out:
+       close(fd);
+
+       return ret;
+}
diff --git a/tests/etnaviv/etnaviv_bo_cache_test.c b/tests/etnaviv/etnaviv_bo_cache_test.c
new file mode 100644 (file)
index 0000000..fb01f8d
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2016 Etnaviv Project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Authors:
+ *    Christian Gmeiner <christian.gmeiner@gmail.com>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#undef NDEBUG
+#include <assert.h>
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "xf86drm.h"
+#include "etnaviv_drmif.h"
+#include "etnaviv_drm.h"
+
+static void test_cache(struct etna_device *dev)
+{
+       struct etna_bo *bo, *tmp;
+
+       /* allocate and free some bo's with same size - we must
+        * get the same bo over and over. */
+       printf("testing bo cache ... ");
+
+       bo = tmp = etna_bo_new(dev, 0x100, ETNA_BO_UNCACHED);
+       assert(bo);
+       etna_bo_del(bo);
+
+       for (unsigned i = 0; i < 100; i++) {
+               tmp = etna_bo_new(dev, 0x100, ETNA_BO_UNCACHED);
+               etna_bo_del(tmp);
+               assert(tmp == bo);
+       }
+
+       printf("ok\n");
+}
+
+static void test_size_rounding(struct etna_device *dev)
+{
+       struct etna_bo *bo;
+
+       printf("testing size rounding ... ");
+
+       bo = etna_bo_new(dev, 15, ETNA_BO_UNCACHED);
+       assert(etna_bo_size(bo) == 4096);
+       etna_bo_del(bo);
+
+       bo = etna_bo_new(dev, 4096, ETNA_BO_UNCACHED);
+       assert(etna_bo_size(bo) == 4096);
+       etna_bo_del(bo);
+
+       bo = etna_bo_new(dev, 4100, ETNA_BO_UNCACHED);
+       assert(etna_bo_size(bo) == 8192);
+       etna_bo_del(bo);
+
+       printf("ok\n");
+}
+
+int main(int argc, char *argv[])
+{
+       struct etna_device *dev;
+
+       drmVersionPtr version;
+       int fd, ret = 0;
+
+       fd = open(argv[1], O_RDWR);
+       if (fd < 0)
+               return 1;
+
+       version = drmGetVersion(fd);
+       if (version) {
+               printf("Version: %d.%d.%d\n", version->version_major,
+                      version->version_minor, version->version_patchlevel);
+               printf("  Name: %s\n", version->name);
+               printf("  Date: %s\n", version->date);
+               printf("  Description: %s\n", version->desc);
+               drmFreeVersion(version);
+       }
+
+       dev = etna_device_new(fd);
+       if (!dev) {
+               ret = 2;
+               goto out;
+       }
+
+       test_cache(dev);
+       test_size_rounding(dev);
+
+       etna_device_del(dev);
+
+out:
+       close(fd);
+
+       return ret;
+}
diff --git a/tests/etnaviv/etnaviv_cmd_stream_test.c b/tests/etnaviv/etnaviv_cmd_stream_test.c
new file mode 100644 (file)
index 0000000..b650aae
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2015 Etnaviv Project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Authors:
+ *    Christian Gmeiner <christian.gmeiner@gmail.com>
+ */
+
+#undef NDEBUG
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "etnaviv_drmif.h"
+
+static void test_avail()
+{
+       struct etna_cmd_stream *stream;
+
+       printf("testing etna_cmd_stream_avail ... ");
+
+       /* invalid size */
+       stream = etna_cmd_stream_new(NULL, 0, NULL, NULL);
+       assert(stream == NULL);
+
+       stream = etna_cmd_stream_new(NULL, 4, NULL, NULL);
+       assert(stream);
+       assert(etna_cmd_stream_avail(stream) == 2);
+       etna_cmd_stream_del(stream);
+
+       stream = etna_cmd_stream_new(NULL, 20, NULL, NULL);
+       assert(stream);
+       assert(etna_cmd_stream_avail(stream) == 18);
+       etna_cmd_stream_del(stream);
+
+       /* odd number of 32 bit words */
+       stream = etna_cmd_stream_new(NULL, 1, NULL, NULL);
+       assert(stream);
+       assert(etna_cmd_stream_avail(stream) == 0);
+       etna_cmd_stream_del(stream);
+
+       stream = etna_cmd_stream_new(NULL, 23, NULL, NULL);
+       assert(stream);
+       assert(etna_cmd_stream_avail(stream) == 22);
+       etna_cmd_stream_del(stream);
+
+       printf("ok\n");
+}
+
+static void test_emit()
+{
+       struct etna_cmd_stream *stream;
+
+       printf("testing etna_cmd_stream_emit ... ");
+
+       stream = etna_cmd_stream_new(NULL, 6, NULL, NULL);
+       assert(stream);
+       assert(etna_cmd_stream_avail(stream) == 4);
+
+       etna_cmd_stream_emit(stream, 0x1);
+       assert(etna_cmd_stream_avail(stream) == 3);
+
+       etna_cmd_stream_emit(stream, 0x2);
+       assert(etna_cmd_stream_avail(stream) == 2);
+
+       etna_cmd_stream_emit(stream, 0x3);
+       assert(etna_cmd_stream_avail(stream) == 1);
+
+       etna_cmd_stream_del(stream);
+
+       printf("ok\n");
+}
+
+static void test_offset()
+{
+       struct etna_cmd_stream *stream;
+
+       printf("testing etna_cmd_stream_offset ... ");
+
+       stream = etna_cmd_stream_new(NULL, 6, NULL, NULL);
+       assert(etna_cmd_stream_offset(stream) == 0);
+
+       etna_cmd_stream_emit(stream, 0x1);
+       assert(etna_cmd_stream_offset(stream) == 1);
+
+       etna_cmd_stream_emit(stream, 0x2);
+       assert(etna_cmd_stream_offset(stream) == 2);
+
+       etna_cmd_stream_emit(stream, 0x3);
+       etna_cmd_stream_emit(stream, 0x4);
+       assert(etna_cmd_stream_offset(stream) == 4);
+
+       etna_cmd_stream_del(stream);
+
+       printf("ok\n");
+}
+
+int main(int argc, char *argv[])
+{
+       test_avail();
+       test_emit();
+       test_offset();
+
+       return 0;
+}
diff --git a/tests/etnaviv/state.xml.h b/tests/etnaviv/state.xml.h
new file mode 100644 (file)
index 0000000..e1ecbf3
--- /dev/null
@@ -0,0 +1,375 @@
+#ifndef STATE_XML
+#define STATE_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- state.xml     (  18940 bytes, from 2016-09-06 14:14:12)
+- common.xml    (  20583 bytes, from 2016-09-06 14:14:12)
+- state_hi.xml  (  25653 bytes, from 2016-09-06 14:45:17)
+- copyright.xml (   1597 bytes, from 2016-09-06 14:44:16)
+- state_2d.xml  (  51552 bytes, from 2016-09-06 14:44:16)
+- state_3d.xml  (  54603 bytes, from 2016-09-06 14:44:16)
+- state_vg.xml  (   5975 bytes, from 2016-09-06 14:44:16)
+
+Copyright (C) 2012-2016 by the following authors:
+- Wladimir J. van der Laan <laanwj@gmail.com>
+- Christian Gmeiner <christian.gmeiner@gmail.com>
+- Lucas Stach <l.stach@pengutronix.de>
+- Russell King <rmk@arm.linux.org.uk>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sub license,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+
+#define VARYING_COMPONENT_USE_UNUSED                           0x00000000
+#define VARYING_COMPONENT_USE_USED                             0x00000001
+#define VARYING_COMPONENT_USE_POINTCOORD_X                     0x00000002
+#define VARYING_COMPONENT_USE_POINTCOORD_Y                     0x00000003
+#define FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__MASK           0x000000ff
+#define FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__SHIFT          0
+#define FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE(x)              (((x) << FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__SHIFT) & FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__MASK)
+#define VIVS_FE                                                        0x00000000
+
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG(i0)                     (0x00000600 + 0x4*(i0))
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG__ESIZE                   0x00000004
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG__LEN                     0x00000010
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE__MASK               0x0000000f
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE__SHIFT              0
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_BYTE                        0x00000000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_BYTE       0x00000001
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_SHORT               0x00000002
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_SHORT      0x00000003
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_INT                 0x00000004
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_INT                0x00000005
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_FLOAT               0x00000008
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_HALF_FLOAT          0x00000009
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_FIXED               0x0000000b
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_INT_10_10_10_2      0x0000000c
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_INT_10_10_10_2     0x0000000d
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__MASK             0x00000030
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__SHIFT            4
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN(x)                        (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__MASK)
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NONCONSECUTIVE           0x00000080
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__MASK             0x00000700
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__SHIFT            8
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM(x)                        (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__MASK)
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__MASK                        0x00003000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__SHIFT               12
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM(x)                   (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__MASK)
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE__MASK          0x0000c000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE__SHIFT         14
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE_OFF            0x00000000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE_ON             0x00008000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_START__MASK              0x00ff0000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_START__SHIFT             16
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_START(x)                 (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_START__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_START__MASK)
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_END__MASK                        0xff000000
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_END__SHIFT               24
+#define VIVS_FE_VERTEX_ELEMENT_CONFIG_END(x)                   (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_END__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_END__MASK)
+
+#define VIVS_FE_CMD_STREAM_BASE_ADDR                           0x00000640
+
+#define VIVS_FE_INDEX_STREAM_BASE_ADDR                         0x00000644
+
+#define VIVS_FE_INDEX_STREAM_CONTROL                           0x00000648
+#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE__MASK                        0x00000003
+#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE__SHIFT               0
+#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE_UNSIGNED_CHAR                0x00000000
+#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE_UNSIGNED_SHORT       0x00000001
+#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE_UNSIGNED_INT         0x00000002
+
+#define VIVS_FE_VERTEX_STREAM_BASE_ADDR                                0x0000064c
+
+#define VIVS_FE_VERTEX_STREAM_CONTROL                          0x00000650
+
+#define VIVS_FE_COMMAND_ADDRESS                                        0x00000654
+
+#define VIVS_FE_COMMAND_CONTROL                                        0x00000658
+#define VIVS_FE_COMMAND_CONTROL_PREFETCH__MASK                 0x0000ffff
+#define VIVS_FE_COMMAND_CONTROL_PREFETCH__SHIFT                        0
+#define VIVS_FE_COMMAND_CONTROL_PREFETCH(x)                    (((x) << VIVS_FE_COMMAND_CONTROL_PREFETCH__SHIFT) & VIVS_FE_COMMAND_CONTROL_PREFETCH__MASK)
+#define VIVS_FE_COMMAND_CONTROL_ENABLE                         0x00010000
+
+#define VIVS_FE_DMA_STATUS                                     0x0000065c
+
+#define VIVS_FE_DMA_DEBUG_STATE                                        0x00000660
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE__MASK                        0x0000001f
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE__SHIFT               0
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_IDLE                 0x00000000
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_DEC                  0x00000001
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_ADR0                 0x00000002
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_LOAD0                        0x00000003
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_ADR1                 0x00000004
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_LOAD1                        0x00000005
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DADR                        0x00000006
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DCMD                        0x00000007
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DCNTL               0x00000008
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DIDXCNTL            0x00000009
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_INITREQDMA           0x0000000a
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_DRAWIDX              0x0000000b
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_DRAW                 0x0000000c
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DRECT0              0x0000000d
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DRECT1              0x0000000e
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DDATA0              0x0000000f
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DDATA1              0x00000010
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_WAITFIFO             0x00000011
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_WAIT                 0x00000012
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_LINK                 0x00000013
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_END                  0x00000014
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_STALL                        0x00000015
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE__MASK            0x00000300
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE__SHIFT           8
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_IDLE             0x00000000
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_START            0x00000100
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_REQ              0x00000200
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_END              0x00000300
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE__MASK          0x00000c00
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE__SHIFT         10
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE_IDLE           0x00000000
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE_RAMVALID       0x00000400
+#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE_VALID          0x00000800
+#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE__MASK            0x00003000
+#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE__SHIFT           12
+#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE_IDLE             0x00000000
+#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE_WAITIDX          0x00001000
+#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE_CAL              0x00002000
+#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE__MASK                        0x0000c000
+#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE__SHIFT               14
+#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE_IDLE                 0x00000000
+#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE_LDADR                        0x00004000
+#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE_IDXCALC              0x00008000
+#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE__MASK             0x00030000
+#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE__SHIFT            16
+#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE_IDLE              0x00000000
+#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE_CKCACHE           0x00010000
+#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE_MISS              0x00020000
+
+#define VIVS_FE_DMA_ADDRESS                                    0x00000664
+
+#define VIVS_FE_DMA_LOW                                                0x00000668
+
+#define VIVS_FE_DMA_HIGH                                       0x0000066c
+
+#define VIVS_FE_AUTO_FLUSH                                     0x00000670
+
+#define VIVS_FE_UNK00678                                       0x00000678
+
+#define VIVS_FE_UNK0067C                                       0x0000067c
+
+#define VIVS_FE_VERTEX_STREAMS(i0)                            (0x00000000 + 0x4*(i0))
+#define VIVS_FE_VERTEX_STREAMS__ESIZE                          0x00000004
+#define VIVS_FE_VERTEX_STREAMS__LEN                            0x00000008
+
+#define VIVS_FE_VERTEX_STREAMS_BASE_ADDR(i0)                  (0x00000680 + 0x4*(i0))
+
+#define VIVS_FE_VERTEX_STREAMS_CONTROL(i0)                    (0x000006a0 + 0x4*(i0))
+
+#define VIVS_FE_UNK00700(i0)                                  (0x00000700 + 0x4*(i0))
+#define VIVS_FE_UNK00700__ESIZE                                        0x00000004
+#define VIVS_FE_UNK00700__LEN                                  0x00000010
+
+#define VIVS_FE_UNK00740(i0)                                  (0x00000740 + 0x4*(i0))
+#define VIVS_FE_UNK00740__ESIZE                                        0x00000004
+#define VIVS_FE_UNK00740__LEN                                  0x00000010
+
+#define VIVS_FE_UNK00780(i0)                                  (0x00000780 + 0x4*(i0))
+#define VIVS_FE_UNK00780__ESIZE                                        0x00000004
+#define VIVS_FE_UNK00780__LEN                                  0x00000010
+
+#define VIVS_GL                                                        0x00000000
+
+#define VIVS_GL_PIPE_SELECT                                    0x00003800
+#define VIVS_GL_PIPE_SELECT_PIPE__MASK                         0x00000001
+#define VIVS_GL_PIPE_SELECT_PIPE__SHIFT                                0
+#define VIVS_GL_PIPE_SELECT_PIPE(x)                            (((x) << VIVS_GL_PIPE_SELECT_PIPE__SHIFT) & VIVS_GL_PIPE_SELECT_PIPE__MASK)
+
+#define VIVS_GL_EVENT                                          0x00003804
+#define VIVS_GL_EVENT_EVENT_ID__MASK                           0x0000001f
+#define VIVS_GL_EVENT_EVENT_ID__SHIFT                          0
+#define VIVS_GL_EVENT_EVENT_ID(x)                              (((x) << VIVS_GL_EVENT_EVENT_ID__SHIFT) & VIVS_GL_EVENT_EVENT_ID__MASK)
+#define VIVS_GL_EVENT_FROM_FE                                  0x00000020
+#define VIVS_GL_EVENT_FROM_PE                                  0x00000040
+#define VIVS_GL_EVENT_SOURCE__MASK                             0x00001f00
+#define VIVS_GL_EVENT_SOURCE__SHIFT                            8
+#define VIVS_GL_EVENT_SOURCE(x)                                        (((x) << VIVS_GL_EVENT_SOURCE__SHIFT) & VIVS_GL_EVENT_SOURCE__MASK)
+
+#define VIVS_GL_SEMAPHORE_TOKEN                                        0x00003808
+#define VIVS_GL_SEMAPHORE_TOKEN_FROM__MASK                     0x0000001f
+#define VIVS_GL_SEMAPHORE_TOKEN_FROM__SHIFT                    0
+#define VIVS_GL_SEMAPHORE_TOKEN_FROM(x)                                (((x) << VIVS_GL_SEMAPHORE_TOKEN_FROM__SHIFT) & VIVS_GL_SEMAPHORE_TOKEN_FROM__MASK)
+#define VIVS_GL_SEMAPHORE_TOKEN_TO__MASK                       0x00001f00
+#define VIVS_GL_SEMAPHORE_TOKEN_TO__SHIFT                      8
+#define VIVS_GL_SEMAPHORE_TOKEN_TO(x)                          (((x) << VIVS_GL_SEMAPHORE_TOKEN_TO__SHIFT) & VIVS_GL_SEMAPHORE_TOKEN_TO__MASK)
+
+#define VIVS_GL_FLUSH_CACHE                                    0x0000380c
+#define VIVS_GL_FLUSH_CACHE_DEPTH                              0x00000001
+#define VIVS_GL_FLUSH_CACHE_COLOR                              0x00000002
+#define VIVS_GL_FLUSH_CACHE_TEXTURE                            0x00000004
+#define VIVS_GL_FLUSH_CACHE_PE2D                               0x00000008
+#define VIVS_GL_FLUSH_CACHE_TEXTUREVS                          0x00000010
+#define VIVS_GL_FLUSH_CACHE_SHADER_L1                          0x00000020
+#define VIVS_GL_FLUSH_CACHE_SHADER_L2                          0x00000040
+
+#define VIVS_GL_FLUSH_MMU                                      0x00003810
+#define VIVS_GL_FLUSH_MMU_FLUSH_FEMMU                          0x00000001
+#define VIVS_GL_FLUSH_MMU_FLUSH_UNK1                           0x00000002
+#define VIVS_GL_FLUSH_MMU_FLUSH_UNK2                           0x00000004
+#define VIVS_GL_FLUSH_MMU_FLUSH_PEMMU                          0x00000008
+#define VIVS_GL_FLUSH_MMU_FLUSH_UNK4                           0x00000010
+
+#define VIVS_GL_VERTEX_ELEMENT_CONFIG                          0x00003814
+
+#define VIVS_GL_MULTI_SAMPLE_CONFIG                            0x00003818
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES__MASK         0x00000003
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES__SHIFT                0
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_NONE          0x00000000
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_2X            0x00000001
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_4X            0x00000002
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_MASK          0x00000008
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__MASK         0x000000f0
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__SHIFT                4
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES(x)            (((x) << VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__SHIFT) & VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__MASK)
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES_MASK          0x00000100
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__MASK                        0x00007000
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__SHIFT               12
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12(x)                   (((x) << VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__SHIFT) & VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__MASK)
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12_MASK                 0x00008000
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__MASK                        0x00030000
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__SHIFT               16
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16(x)                   (((x) << VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__SHIFT) & VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__MASK)
+#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16_MASK                 0x00080000
+
+#define VIVS_GL_VARYING_TOTAL_COMPONENTS                       0x0000381c
+#define VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__MASK             0x000000ff
+#define VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__SHIFT            0
+#define VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM(x)                        (((x) << VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__SHIFT) & VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__MASK)
+
+#define VIVS_GL_VARYING_NUM_COMPONENTS                         0x00003820
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__MASK              0x00000007
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__SHIFT             0
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR0(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__MASK              0x00000070
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__SHIFT             4
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR1(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__MASK              0x00000700
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__SHIFT             8
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR2(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__MASK              0x00007000
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__SHIFT             12
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR3(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__MASK              0x00070000
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__SHIFT             16
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR4(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__MASK              0x00700000
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__SHIFT             20
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR5(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__MASK              0x07000000
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__SHIFT             24
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR6(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__MASK)
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__MASK              0x70000000
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__SHIFT             28
+#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR7(x)                 (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__MASK)
+
+#define VIVS_GL_VARYING_COMPONENT_USE(i0)                     (0x00003828 + 0x4*(i0))
+#define VIVS_GL_VARYING_COMPONENT_USE__ESIZE                   0x00000004
+#define VIVS_GL_VARYING_COMPONENT_USE__LEN                     0x00000002
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP0__MASK              0x00000003
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP0__SHIFT             0
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP0(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP0__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP0__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP1__MASK              0x0000000c
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP1__SHIFT             2
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP1(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP1__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP1__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP2__MASK              0x00000030
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP2__SHIFT             4
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP2(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP2__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP2__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP3__MASK              0x000000c0
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP3__SHIFT             6
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP3(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP3__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP3__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP4__MASK              0x00000300
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP4__SHIFT             8
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP4(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP4__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP4__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP5__MASK              0x00000c00
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP5__SHIFT             10
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP5(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP5__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP5__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP6__MASK              0x00003000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP6__SHIFT             12
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP6(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP6__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP6__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP7__MASK              0x0000c000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP7__SHIFT             14
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP7(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP7__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP7__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP8__MASK              0x00030000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP8__SHIFT             16
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP8(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP8__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP8__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP9__MASK              0x000c0000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP9__SHIFT             18
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP9(x)                 (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP9__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP9__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP10__MASK             0x00300000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP10__SHIFT            20
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP10(x)                        (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP10__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP10__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP11__MASK             0x00c00000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP11__SHIFT            22
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP11(x)                        (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP11__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP11__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP12__MASK             0x03000000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP12__SHIFT            24
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP12(x)                        (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP12__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP12__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP13__MASK             0x0c000000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP13__SHIFT            26
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP13(x)                        (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP13__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP13__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP14__MASK             0x30000000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP14__SHIFT            28
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP14(x)                        (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP14__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP14__MASK)
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP15__MASK             0xc0000000
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP15__SHIFT            30
+#define VIVS_GL_VARYING_COMPONENT_USE_COMP15(x)                        (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP15__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP15__MASK)
+
+#define VIVS_GL_UNK03834                                       0x00003834
+
+#define VIVS_GL_UNK03838                                       0x00003838
+
+#define VIVS_GL_API_MODE                                       0x0000384c
+#define VIVS_GL_API_MODE_OPENGL                                        0x00000000
+#define VIVS_GL_API_MODE_OPENVG                                        0x00000001
+#define VIVS_GL_API_MODE_OPENCL                                        0x00000002
+
+#define VIVS_GL_CONTEXT_POINTER                                        0x00003850
+
+#define VIVS_GL_UNK03A00                                       0x00003a00
+
+#define VIVS_GL_STALL_TOKEN                                    0x00003c00
+#define VIVS_GL_STALL_TOKEN_FROM__MASK                         0x0000001f
+#define VIVS_GL_STALL_TOKEN_FROM__SHIFT                                0
+#define VIVS_GL_STALL_TOKEN_FROM(x)                            (((x) << VIVS_GL_STALL_TOKEN_FROM__SHIFT) & VIVS_GL_STALL_TOKEN_FROM__MASK)
+#define VIVS_GL_STALL_TOKEN_TO__MASK                           0x00001f00
+#define VIVS_GL_STALL_TOKEN_TO__SHIFT                          8
+#define VIVS_GL_STALL_TOKEN_TO(x)                              (((x) << VIVS_GL_STALL_TOKEN_TO__SHIFT) & VIVS_GL_STALL_TOKEN_TO__MASK)
+#define VIVS_GL_STALL_TOKEN_FLIP0                              0x40000000
+#define VIVS_GL_STALL_TOKEN_FLIP1                              0x80000000
+
+#define VIVS_DUMMY                                             0x00000000
+
+#define VIVS_DUMMY_DUMMY                                       0x0003fffc
+
+
+#endif /* STATE_XML */
diff --git a/tests/etnaviv/state_2d.xml.h b/tests/etnaviv/state_2d.xml.h
new file mode 100644 (file)
index 0000000..715eed4
--- /dev/null
@@ -0,0 +1,1497 @@
+#ifndef STATE_2D_XML
+#define STATE_2D_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- state.xml     (  18940 bytes, from 2016-09-06 14:14:12)
+- common.xml    (  20583 bytes, from 2016-09-06 14:14:12)
+- state_hi.xml  (  25653 bytes, from 2016-09-06 14:45:17)
+- copyright.xml (   1597 bytes, from 2016-09-06 14:44:16)
+- state_2d.xml  (  51552 bytes, from 2016-09-06 14:44:16)
+- state_3d.xml  (  54603 bytes, from 2016-09-06 14:44:16)
+- state_vg.xml  (   5975 bytes, from 2016-09-06 14:44:16)
+
+Copyright (C) 2012-2016 by the following authors:
+- Wladimir J. van der Laan <laanwj@gmail.com>
+- Christian Gmeiner <christian.gmeiner@gmail.com>
+- Lucas Stach <l.stach@pengutronix.de>
+- Russell King <rmk@arm.linux.org.uk>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sub license,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+
+#define DE_FORMAT_X4R4G4B4                                     0x00000000
+#define DE_FORMAT_A4R4G4B4                                     0x00000001
+#define DE_FORMAT_X1R5G5B5                                     0x00000002
+#define DE_FORMAT_A1R5G5B5                                     0x00000003
+#define DE_FORMAT_R5G6B5                                       0x00000004
+#define DE_FORMAT_X8R8G8B8                                     0x00000005
+#define DE_FORMAT_A8R8G8B8                                     0x00000006
+#define DE_FORMAT_YUY2                                         0x00000007
+#define DE_FORMAT_UYVY                                         0x00000008
+#define DE_FORMAT_INDEX8                                       0x00000009
+#define DE_FORMAT_MONOCHROME                                   0x0000000a
+#define DE_FORMAT_YV12                                         0x0000000f
+#define DE_FORMAT_A8                                           0x00000010
+#define DE_FORMAT_NV12                                         0x00000011
+#define DE_FORMAT_NV16                                         0x00000012
+#define DE_FORMAT_RG16                                         0x00000013
+#define DE_SWIZZLE_ARGB                                                0x00000000
+#define DE_SWIZZLE_RGBA                                                0x00000001
+#define DE_SWIZZLE_ABGR                                                0x00000002
+#define DE_SWIZZLE_BGRA                                                0x00000003
+#define DE_BLENDMODE_ZERO                                      0x00000000
+#define DE_BLENDMODE_ONE                                       0x00000001
+#define DE_BLENDMODE_NORMAL                                    0x00000002
+#define DE_BLENDMODE_INVERSED                                  0x00000003
+#define DE_BLENDMODE_COLOR                                     0x00000004
+#define DE_BLENDMODE_COLOR_INVERSED                            0x00000005
+#define DE_BLENDMODE_SATURATED_ALPHA                           0x00000006
+#define DE_BLENDMODE_SATURATED_DEST_ALPHA                      0x00000007
+#define DE_COMPONENT_BLUE                                      0x00000000
+#define DE_COMPONENT_GREEN                                     0x00000001
+#define DE_COMPONENT_RED                                       0x00000002
+#define DE_COMPONENT_ALPHA                                     0x00000003
+#define DE_ROT_MODE_ROT0                                       0x00000000
+#define DE_ROT_MODE_FLIP_X                                     0x00000001
+#define DE_ROT_MODE_FLIP_Y                                     0x00000002
+#define DE_ROT_MODE_ROT90                                      0x00000004
+#define DE_ROT_MODE_ROT180                                     0x00000005
+#define DE_ROT_MODE_ROT270                                     0x00000006
+#define DE_MIRROR_MODE_NONE                                    0x00000000
+#define DE_MIRROR_MODE_MIRROR_X                                        0x00000001
+#define DE_MIRROR_MODE_MIRROR_Y                                        0x00000002
+#define DE_MIRROR_MODE_MIRROR_XY                               0x00000003
+#define DE_COLOR_BLUE__MASK                                    0x000000ff
+#define DE_COLOR_BLUE__SHIFT                                   0
+#define DE_COLOR_BLUE(x)                                       (((x) << DE_COLOR_BLUE__SHIFT) & DE_COLOR_BLUE__MASK)
+#define DE_COLOR_GREEN__MASK                                   0x0000ff00
+#define DE_COLOR_GREEN__SHIFT                                  8
+#define DE_COLOR_GREEN(x)                                      (((x) << DE_COLOR_GREEN__SHIFT) & DE_COLOR_GREEN__MASK)
+#define DE_COLOR_RED__MASK                                     0x00ff0000
+#define DE_COLOR_RED__SHIFT                                    16
+#define DE_COLOR_RED(x)                                                (((x) << DE_COLOR_RED__SHIFT) & DE_COLOR_RED__MASK)
+#define DE_COLOR_ALPHA__MASK                                   0xff000000
+#define DE_COLOR_ALPHA__SHIFT                                  24
+#define DE_COLOR_ALPHA(x)                                      (((x) << DE_COLOR_ALPHA__SHIFT) & DE_COLOR_ALPHA__MASK)
+#define VIVS_DE                                                        0x00000000
+
+#define VIVS_DE_SRC_ADDRESS                                    0x00001200
+
+#define VIVS_DE_SRC_STRIDE                                     0x00001204
+#define VIVS_DE_SRC_STRIDE_STRIDE__MASK                                0x0003ffff
+#define VIVS_DE_SRC_STRIDE_STRIDE__SHIFT                       0
+#define VIVS_DE_SRC_STRIDE_STRIDE(x)                           (((x) << VIVS_DE_SRC_STRIDE_STRIDE__SHIFT) & VIVS_DE_SRC_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_SRC_ROTATION_CONFIG                            0x00001208
+#define VIVS_DE_SRC_ROTATION_CONFIG_WIDTH__MASK                        0x0000ffff
+#define VIVS_DE_SRC_ROTATION_CONFIG_WIDTH__SHIFT               0
+#define VIVS_DE_SRC_ROTATION_CONFIG_WIDTH(x)                   (((x) << VIVS_DE_SRC_ROTATION_CONFIG_WIDTH__SHIFT) & VIVS_DE_SRC_ROTATION_CONFIG_WIDTH__MASK)
+#define VIVS_DE_SRC_ROTATION_CONFIG_ROTATION__MASK             0x00010000
+#define VIVS_DE_SRC_ROTATION_CONFIG_ROTATION__SHIFT            16
+#define VIVS_DE_SRC_ROTATION_CONFIG_ROTATION_DISABLE           0x00000000
+#define VIVS_DE_SRC_ROTATION_CONFIG_ROTATION_ENABLE            0x00010000
+
+#define VIVS_DE_SRC_CONFIG                                     0x0000120c
+#define VIVS_DE_SRC_CONFIG_PE10_SOURCE_FORMAT__MASK            0x0000000f
+#define VIVS_DE_SRC_CONFIG_PE10_SOURCE_FORMAT__SHIFT           0
+#define VIVS_DE_SRC_CONFIG_PE10_SOURCE_FORMAT(x)               (((x) << VIVS_DE_SRC_CONFIG_PE10_SOURCE_FORMAT__SHIFT) & VIVS_DE_SRC_CONFIG_PE10_SOURCE_FORMAT__MASK)
+#define VIVS_DE_SRC_CONFIG_TRANSPARENCY__MASK                  0x00000030
+#define VIVS_DE_SRC_CONFIG_TRANSPARENCY__SHIFT                 4
+#define VIVS_DE_SRC_CONFIG_TRANSPARENCY(x)                     (((x) << VIVS_DE_SRC_CONFIG_TRANSPARENCY__SHIFT) & VIVS_DE_SRC_CONFIG_TRANSPARENCY__MASK)
+#define VIVS_DE_SRC_CONFIG_SRC_RELATIVE__MASK                  0x00000040
+#define VIVS_DE_SRC_CONFIG_SRC_RELATIVE__SHIFT                 6
+#define VIVS_DE_SRC_CONFIG_SRC_RELATIVE_ABSOLUTE               0x00000000
+#define VIVS_DE_SRC_CONFIG_SRC_RELATIVE_RELATIVE               0x00000040
+#define VIVS_DE_SRC_CONFIG_TILED__MASK                         0x00000080
+#define VIVS_DE_SRC_CONFIG_TILED__SHIFT                                7
+#define VIVS_DE_SRC_CONFIG_TILED_DISABLE                       0x00000000
+#define VIVS_DE_SRC_CONFIG_TILED_ENABLE                                0x00000080
+#define VIVS_DE_SRC_CONFIG_LOCATION__MASK                      0x00000100
+#define VIVS_DE_SRC_CONFIG_LOCATION__SHIFT                     8
+#define VIVS_DE_SRC_CONFIG_LOCATION_MEMORY                     0x00000000
+#define VIVS_DE_SRC_CONFIG_LOCATION_STREAM                     0x00000100
+#define VIVS_DE_SRC_CONFIG_PACK__MASK                          0x00003000
+#define VIVS_DE_SRC_CONFIG_PACK__SHIFT                         12
+#define VIVS_DE_SRC_CONFIG_PACK_PACKED8                                0x00000000
+#define VIVS_DE_SRC_CONFIG_PACK_PACKED16                       0x00001000
+#define VIVS_DE_SRC_CONFIG_PACK_PACKED32                       0x00002000
+#define VIVS_DE_SRC_CONFIG_PACK_UNPACKED                       0x00003000
+#define VIVS_DE_SRC_CONFIG_MONO_TRANSPARENCY__MASK             0x00008000
+#define VIVS_DE_SRC_CONFIG_MONO_TRANSPARENCY__SHIFT            15
+#define VIVS_DE_SRC_CONFIG_MONO_TRANSPARENCY_BACKGROUND                0x00000000
+#define VIVS_DE_SRC_CONFIG_MONO_TRANSPARENCY_FOREGROUND                0x00008000
+#define VIVS_DE_SRC_CONFIG_UNK16                               0x00010000
+#define VIVS_DE_SRC_CONFIG_SWIZZLE__MASK                       0x00300000
+#define VIVS_DE_SRC_CONFIG_SWIZZLE__SHIFT                      20
+#define VIVS_DE_SRC_CONFIG_SWIZZLE(x)                          (((x) << VIVS_DE_SRC_CONFIG_SWIZZLE__SHIFT) & VIVS_DE_SRC_CONFIG_SWIZZLE__MASK)
+#define VIVS_DE_SRC_CONFIG_SOURCE_FORMAT__MASK                 0x1f000000
+#define VIVS_DE_SRC_CONFIG_SOURCE_FORMAT__SHIFT                        24
+#define VIVS_DE_SRC_CONFIG_SOURCE_FORMAT(x)                    (((x) << VIVS_DE_SRC_CONFIG_SOURCE_FORMAT__SHIFT) & VIVS_DE_SRC_CONFIG_SOURCE_FORMAT__MASK)
+#define VIVS_DE_SRC_CONFIG_DISABLE420_L2_CACHE                 0x20000000
+#define VIVS_DE_SRC_CONFIG_ENDIAN_CONTROL__MASK                        0xc0000000
+#define VIVS_DE_SRC_CONFIG_ENDIAN_CONTROL__SHIFT               30
+#define VIVS_DE_SRC_CONFIG_ENDIAN_CONTROL(x)                   (((x) << VIVS_DE_SRC_CONFIG_ENDIAN_CONTROL__SHIFT) & VIVS_DE_SRC_CONFIG_ENDIAN_CONTROL__MASK)
+
+#define VIVS_DE_SRC_ORIGIN                                     0x00001210
+#define VIVS_DE_SRC_ORIGIN_X__MASK                             0x0000ffff
+#define VIVS_DE_SRC_ORIGIN_X__SHIFT                            0
+#define VIVS_DE_SRC_ORIGIN_X(x)                                        (((x) << VIVS_DE_SRC_ORIGIN_X__SHIFT) & VIVS_DE_SRC_ORIGIN_X__MASK)
+#define VIVS_DE_SRC_ORIGIN_Y__MASK                             0xffff0000
+#define VIVS_DE_SRC_ORIGIN_Y__SHIFT                            16
+#define VIVS_DE_SRC_ORIGIN_Y(x)                                        (((x) << VIVS_DE_SRC_ORIGIN_Y__SHIFT) & VIVS_DE_SRC_ORIGIN_Y__MASK)
+
+#define VIVS_DE_SRC_SIZE                                       0x00001214
+#define VIVS_DE_SRC_SIZE_X__MASK                               0x0000ffff
+#define VIVS_DE_SRC_SIZE_X__SHIFT                              0
+#define VIVS_DE_SRC_SIZE_X(x)                                  (((x) << VIVS_DE_SRC_SIZE_X__SHIFT) & VIVS_DE_SRC_SIZE_X__MASK)
+#define VIVS_DE_SRC_SIZE_Y__MASK                               0xffff0000
+#define VIVS_DE_SRC_SIZE_Y__SHIFT                              16
+#define VIVS_DE_SRC_SIZE_Y(x)                                  (((x) << VIVS_DE_SRC_SIZE_Y__SHIFT) & VIVS_DE_SRC_SIZE_Y__MASK)
+
+#define VIVS_DE_SRC_COLOR_BG                                   0x00001218
+
+#define VIVS_DE_SRC_COLOR_FG                                   0x0000121c
+
+#define VIVS_DE_STRETCH_FACTOR_LOW                             0x00001220
+#define VIVS_DE_STRETCH_FACTOR_LOW_X__MASK                     0x7fffffff
+#define VIVS_DE_STRETCH_FACTOR_LOW_X__SHIFT                    0
+#define VIVS_DE_STRETCH_FACTOR_LOW_X(x)                                (((x) << VIVS_DE_STRETCH_FACTOR_LOW_X__SHIFT) & VIVS_DE_STRETCH_FACTOR_LOW_X__MASK)
+
+#define VIVS_DE_STRETCH_FACTOR_HIGH                            0x00001224
+#define VIVS_DE_STRETCH_FACTOR_HIGH_Y__MASK                    0x7fffffff
+#define VIVS_DE_STRETCH_FACTOR_HIGH_Y__SHIFT                   0
+#define VIVS_DE_STRETCH_FACTOR_HIGH_Y(x)                       (((x) << VIVS_DE_STRETCH_FACTOR_HIGH_Y__SHIFT) & VIVS_DE_STRETCH_FACTOR_HIGH_Y__MASK)
+
+#define VIVS_DE_DEST_ADDRESS                                   0x00001228
+
+#define VIVS_DE_DEST_STRIDE                                    0x0000122c
+#define VIVS_DE_DEST_STRIDE_STRIDE__MASK                       0x0003ffff
+#define VIVS_DE_DEST_STRIDE_STRIDE__SHIFT                      0
+#define VIVS_DE_DEST_STRIDE_STRIDE(x)                          (((x) << VIVS_DE_DEST_STRIDE_STRIDE__SHIFT) & VIVS_DE_DEST_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_DEST_ROTATION_CONFIG                           0x00001230
+#define VIVS_DE_DEST_ROTATION_CONFIG_WIDTH__MASK               0x0000ffff
+#define VIVS_DE_DEST_ROTATION_CONFIG_WIDTH__SHIFT              0
+#define VIVS_DE_DEST_ROTATION_CONFIG_WIDTH(x)                  (((x) << VIVS_DE_DEST_ROTATION_CONFIG_WIDTH__SHIFT) & VIVS_DE_DEST_ROTATION_CONFIG_WIDTH__MASK)
+#define VIVS_DE_DEST_ROTATION_CONFIG_ROTATION__MASK            0x00010000
+#define VIVS_DE_DEST_ROTATION_CONFIG_ROTATION__SHIFT           16
+#define VIVS_DE_DEST_ROTATION_CONFIG_ROTATION_DISABLE          0x00000000
+#define VIVS_DE_DEST_ROTATION_CONFIG_ROTATION_ENABLE           0x00010000
+
+#define VIVS_DE_DEST_CONFIG                                    0x00001234
+#define VIVS_DE_DEST_CONFIG_FORMAT__MASK                       0x0000001f
+#define VIVS_DE_DEST_CONFIG_FORMAT__SHIFT                      0
+#define VIVS_DE_DEST_CONFIG_FORMAT(x)                          (((x) << VIVS_DE_DEST_CONFIG_FORMAT__SHIFT) & VIVS_DE_DEST_CONFIG_FORMAT__MASK)
+#define VIVS_DE_DEST_CONFIG_TILED__MASK                                0x00000100
+#define VIVS_DE_DEST_CONFIG_TILED__SHIFT                       8
+#define VIVS_DE_DEST_CONFIG_TILED_DISABLE                      0x00000000
+#define VIVS_DE_DEST_CONFIG_TILED_ENABLE                       0x00000100
+#define VIVS_DE_DEST_CONFIG_COMMAND__MASK                      0x0000f000
+#define VIVS_DE_DEST_CONFIG_COMMAND__SHIFT                     12
+#define VIVS_DE_DEST_CONFIG_COMMAND_CLEAR                      0x00000000
+#define VIVS_DE_DEST_CONFIG_COMMAND_LINE                       0x00001000
+#define VIVS_DE_DEST_CONFIG_COMMAND_BIT_BLT                    0x00002000
+#define VIVS_DE_DEST_CONFIG_COMMAND_BIT_BLT_REVERSED           0x00003000
+#define VIVS_DE_DEST_CONFIG_COMMAND_STRETCH_BLT                        0x00004000
+#define VIVS_DE_DEST_CONFIG_COMMAND_HOR_FILTER_BLT             0x00005000
+#define VIVS_DE_DEST_CONFIG_COMMAND_VER_FILTER_BLT             0x00006000
+#define VIVS_DE_DEST_CONFIG_COMMAND_ONE_PASS_FILTER_BLT                0x00007000
+#define VIVS_DE_DEST_CONFIG_COMMAND_MULTI_SOURCE_BLT           0x00008000
+#define VIVS_DE_DEST_CONFIG_SWIZZLE__MASK                      0x00030000
+#define VIVS_DE_DEST_CONFIG_SWIZZLE__SHIFT                     16
+#define VIVS_DE_DEST_CONFIG_SWIZZLE(x)                         (((x) << VIVS_DE_DEST_CONFIG_SWIZZLE__SHIFT) & VIVS_DE_DEST_CONFIG_SWIZZLE__MASK)
+#define VIVS_DE_DEST_CONFIG_ENDIAN_CONTROL__MASK               0x00300000
+#define VIVS_DE_DEST_CONFIG_ENDIAN_CONTROL__SHIFT              20
+#define VIVS_DE_DEST_CONFIG_ENDIAN_CONTROL(x)                  (((x) << VIVS_DE_DEST_CONFIG_ENDIAN_CONTROL__SHIFT) & VIVS_DE_DEST_CONFIG_ENDIAN_CONTROL__MASK)
+#define VIVS_DE_DEST_CONFIG_GDI_STRE__MASK                     0x01000000
+#define VIVS_DE_DEST_CONFIG_GDI_STRE__SHIFT                    24
+#define VIVS_DE_DEST_CONFIG_GDI_STRE_DISABLE                   0x00000000
+#define VIVS_DE_DEST_CONFIG_GDI_STRE_ENABLE                    0x01000000
+#define VIVS_DE_DEST_CONFIG_INTER_TILE_PER_FIX__MASK           0x02000000
+#define VIVS_DE_DEST_CONFIG_INTER_TILE_PER_FIX__SHIFT          25
+#define VIVS_DE_DEST_CONFIG_INTER_TILE_PER_FIX_DISABLED                0x02000000
+#define VIVS_DE_DEST_CONFIG_INTER_TILE_PER_FIX_ENABLED         0x00000000
+#define VIVS_DE_DEST_CONFIG_MINOR_TILED__MASK                  0x04000000
+#define VIVS_DE_DEST_CONFIG_MINOR_TILED__SHIFT                 26
+#define VIVS_DE_DEST_CONFIG_MINOR_TILED_DISABLE                        0x00000000
+#define VIVS_DE_DEST_CONFIG_MINOR_TILED_ENABLE                 0x04000000
+
+#define VIVS_DE_PATTERN_ADDRESS                                        0x00001238
+
+#define VIVS_DE_PATTERN_CONFIG                                 0x0000123c
+#define VIVS_DE_PATTERN_CONFIG_FORMAT__MASK                    0x0000000f
+#define VIVS_DE_PATTERN_CONFIG_FORMAT__SHIFT                   0
+#define VIVS_DE_PATTERN_CONFIG_FORMAT(x)                       (((x) << VIVS_DE_PATTERN_CONFIG_FORMAT__SHIFT) & VIVS_DE_PATTERN_CONFIG_FORMAT__MASK)
+#define VIVS_DE_PATTERN_CONFIG_TYPE__MASK                      0x00000010
+#define VIVS_DE_PATTERN_CONFIG_TYPE__SHIFT                     4
+#define VIVS_DE_PATTERN_CONFIG_TYPE_SOLID_COLOR                        0x00000000
+#define VIVS_DE_PATTERN_CONFIG_TYPE_PATTERN                    0x00000010
+#define VIVS_DE_PATTERN_CONFIG_COLOR_CONVERT__MASK             0x00000020
+#define VIVS_DE_PATTERN_CONFIG_COLOR_CONVERT__SHIFT            5
+#define VIVS_DE_PATTERN_CONFIG_COLOR_CONVERT_DISABLE           0x00000000
+#define VIVS_DE_PATTERN_CONFIG_COLOR_CONVERT_ENABLE            0x00000020
+#define VIVS_DE_PATTERN_CONFIG_INIT_TRIGGER__MASK              0x000000c0
+#define VIVS_DE_PATTERN_CONFIG_INIT_TRIGGER__SHIFT             6
+#define VIVS_DE_PATTERN_CONFIG_INIT_TRIGGER(x)                 (((x) << VIVS_DE_PATTERN_CONFIG_INIT_TRIGGER__SHIFT) & VIVS_DE_PATTERN_CONFIG_INIT_TRIGGER__MASK)
+#define VIVS_DE_PATTERN_CONFIG_ORIGIN_X__MASK                  0x00070000
+#define VIVS_DE_PATTERN_CONFIG_ORIGIN_X__SHIFT                 16
+#define VIVS_DE_PATTERN_CONFIG_ORIGIN_X(x)                     (((x) << VIVS_DE_PATTERN_CONFIG_ORIGIN_X__SHIFT) & VIVS_DE_PATTERN_CONFIG_ORIGIN_X__MASK)
+#define VIVS_DE_PATTERN_CONFIG_ORIGIN_Y__MASK                  0x00700000
+#define VIVS_DE_PATTERN_CONFIG_ORIGIN_Y__SHIFT                 20
+#define VIVS_DE_PATTERN_CONFIG_ORIGIN_Y(x)                     (((x) << VIVS_DE_PATTERN_CONFIG_ORIGIN_Y__SHIFT) & VIVS_DE_PATTERN_CONFIG_ORIGIN_Y__MASK)
+
+#define VIVS_DE_PATTERN_LOW                                    0x00001240
+
+#define VIVS_DE_PATTERN_HIGH                                   0x00001244
+
+#define VIVS_DE_PATTERN_MASK_LOW                               0x00001248
+
+#define VIVS_DE_PATTERN_MASK_HIGH                              0x0000124c
+
+#define VIVS_DE_PATTERN_BG_COLOR                               0x00001250
+
+#define VIVS_DE_PATTERN_FG_COLOR                               0x00001254
+
+#define VIVS_DE_ROP                                            0x0000125c
+#define VIVS_DE_ROP_ROP_FG__MASK                               0x000000ff
+#define VIVS_DE_ROP_ROP_FG__SHIFT                              0
+#define VIVS_DE_ROP_ROP_FG(x)                                  (((x) << VIVS_DE_ROP_ROP_FG__SHIFT) & VIVS_DE_ROP_ROP_FG__MASK)
+#define VIVS_DE_ROP_ROP_BG__MASK                               0x0000ff00
+#define VIVS_DE_ROP_ROP_BG__SHIFT                              8
+#define VIVS_DE_ROP_ROP_BG(x)                                  (((x) << VIVS_DE_ROP_ROP_BG__SHIFT) & VIVS_DE_ROP_ROP_BG__MASK)
+#define VIVS_DE_ROP_TYPE__MASK                                 0x00300000
+#define VIVS_DE_ROP_TYPE__SHIFT                                        20
+#define VIVS_DE_ROP_TYPE_ROP2_PATTERN                          0x00000000
+#define VIVS_DE_ROP_TYPE_ROP2_SOURCE                           0x00100000
+#define VIVS_DE_ROP_TYPE_ROP3                                  0x00200000
+#define VIVS_DE_ROP_TYPE_ROP4                                  0x00300000
+
+#define VIVS_DE_CLIP_TOP_LEFT                                  0x00001260
+#define VIVS_DE_CLIP_TOP_LEFT_X__MASK                          0x00007fff
+#define VIVS_DE_CLIP_TOP_LEFT_X__SHIFT                         0
+#define VIVS_DE_CLIP_TOP_LEFT_X(x)                             (((x) << VIVS_DE_CLIP_TOP_LEFT_X__SHIFT) & VIVS_DE_CLIP_TOP_LEFT_X__MASK)
+#define VIVS_DE_CLIP_TOP_LEFT_Y__MASK                          0x7fff0000
+#define VIVS_DE_CLIP_TOP_LEFT_Y__SHIFT                         16
+#define VIVS_DE_CLIP_TOP_LEFT_Y(x)                             (((x) << VIVS_DE_CLIP_TOP_LEFT_Y__SHIFT) & VIVS_DE_CLIP_TOP_LEFT_Y__MASK)
+
+#define VIVS_DE_CLIP_BOTTOM_RIGHT                              0x00001264
+#define VIVS_DE_CLIP_BOTTOM_RIGHT_X__MASK                      0x00007fff
+#define VIVS_DE_CLIP_BOTTOM_RIGHT_X__SHIFT                     0
+#define VIVS_DE_CLIP_BOTTOM_RIGHT_X(x)                         (((x) << VIVS_DE_CLIP_BOTTOM_RIGHT_X__SHIFT) & VIVS_DE_CLIP_BOTTOM_RIGHT_X__MASK)
+#define VIVS_DE_CLIP_BOTTOM_RIGHT_Y__MASK                      0x7fff0000
+#define VIVS_DE_CLIP_BOTTOM_RIGHT_Y__SHIFT                     16
+#define VIVS_DE_CLIP_BOTTOM_RIGHT_Y(x)                         (((x) << VIVS_DE_CLIP_BOTTOM_RIGHT_Y__SHIFT) & VIVS_DE_CLIP_BOTTOM_RIGHT_Y__MASK)
+
+#define VIVS_DE_CLEAR_BYTE_MASK                                        0x00001268
+
+#define VIVS_DE_CONFIG                                         0x0000126c
+#define VIVS_DE_CONFIG_MIRROR_BLT_ENABLE__MASK                 0x00000001
+#define VIVS_DE_CONFIG_MIRROR_BLT_ENABLE__SHIFT                        0
+#define VIVS_DE_CONFIG_MIRROR_BLT_ENABLE_OFF                   0x00000000
+#define VIVS_DE_CONFIG_MIRROR_BLT_ENABLE_ON                    0x00000001
+#define VIVS_DE_CONFIG_MIRROR_BLT_MODE__MASK                   0x00000030
+#define VIVS_DE_CONFIG_MIRROR_BLT_MODE__SHIFT                  4
+#define VIVS_DE_CONFIG_MIRROR_BLT_MODE_NORMAL                  0x00000000
+#define VIVS_DE_CONFIG_MIRROR_BLT_MODE_HMIRROR                 0x00000010
+#define VIVS_DE_CONFIG_MIRROR_BLT_MODE_VMIRROR                 0x00000020
+#define VIVS_DE_CONFIG_MIRROR_BLT_MODE_FULL_MIRROR             0x00000030
+#define VIVS_DE_CONFIG_SOURCE_SELECT__MASK                     0x00070000
+#define VIVS_DE_CONFIG_SOURCE_SELECT__SHIFT                    16
+#define VIVS_DE_CONFIG_SOURCE_SELECT(x)                                (((x) << VIVS_DE_CONFIG_SOURCE_SELECT__SHIFT) & VIVS_DE_CONFIG_SOURCE_SELECT__MASK)
+#define VIVS_DE_CONFIG_DESTINATION_SELECT__MASK                        0x00300000
+#define VIVS_DE_CONFIG_DESTINATION_SELECT__SHIFT               20
+#define VIVS_DE_CONFIG_DESTINATION_SELECT(x)                   (((x) << VIVS_DE_CONFIG_DESTINATION_SELECT__SHIFT) & VIVS_DE_CONFIG_DESTINATION_SELECT__MASK)
+
+#define VIVS_DE_CLEAR_PIXEL_VALUE_LOW                          0x00001270
+
+#define VIVS_DE_CLEAR_PIXEL_VALUE_HIGH                         0x00001274
+
+#define VIVS_DE_SRC_ORIGIN_FRACTION                            0x00001278
+#define VIVS_DE_SRC_ORIGIN_FRACTION_X__MASK                    0x0000ffff
+#define VIVS_DE_SRC_ORIGIN_FRACTION_X__SHIFT                   0
+#define VIVS_DE_SRC_ORIGIN_FRACTION_X(x)                       (((x) << VIVS_DE_SRC_ORIGIN_FRACTION_X__SHIFT) & VIVS_DE_SRC_ORIGIN_FRACTION_X__MASK)
+#define VIVS_DE_SRC_ORIGIN_FRACTION_Y__MASK                    0xffff0000
+#define VIVS_DE_SRC_ORIGIN_FRACTION_Y__SHIFT                   16
+#define VIVS_DE_SRC_ORIGIN_FRACTION_Y(x)                       (((x) << VIVS_DE_SRC_ORIGIN_FRACTION_Y__SHIFT) & VIVS_DE_SRC_ORIGIN_FRACTION_Y__MASK)
+
+#define VIVS_DE_ALPHA_CONTROL                                  0x0000127c
+#define VIVS_DE_ALPHA_CONTROL_ENABLE__MASK                     0x00000001
+#define VIVS_DE_ALPHA_CONTROL_ENABLE__SHIFT                    0
+#define VIVS_DE_ALPHA_CONTROL_ENABLE_OFF                       0x00000000
+#define VIVS_DE_ALPHA_CONTROL_ENABLE_ON                                0x00000001
+#define VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__MASK      0x00ff0000
+#define VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__SHIFT     16
+#define VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA(x)         (((x) << VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__SHIFT) & VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__MASK)
+#define VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__MASK      0xff000000
+#define VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__SHIFT     24
+#define VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA(x)         (((x) << VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__SHIFT) & VIVS_DE_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__MASK)
+
+#define VIVS_DE_ALPHA_MODES                                    0x00001280
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_MODE__MASK               0x00000001
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_MODE__SHIFT              0
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_MODE_NORMAL              0x00000000
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_MODE_INVERSED            0x00000001
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_MODE__MASK               0x00000010
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_MODE__SHIFT              4
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_MODE_NORMAL              0x00000000
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_MODE_INVERSED            0x00000010
+#define VIVS_DE_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE__MASK                0x00000300
+#define VIVS_DE_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE__SHIFT       8
+#define VIVS_DE_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_NORMAL       0x00000000
+#define VIVS_DE_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_GLOBAL       0x00000100
+#define VIVS_DE_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_SCALED       0x00000200
+#define VIVS_DE_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE__MASK                0x00003000
+#define VIVS_DE_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE__SHIFT       12
+#define VIVS_DE_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_NORMAL       0x00000000
+#define VIVS_DE_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_GLOBAL       0x00001000
+#define VIVS_DE_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_SCALED       0x00002000
+#define VIVS_DE_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY__MASK      0x00010000
+#define VIVS_DE_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY__SHIFT     16
+#define VIVS_DE_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY_ENABLE     0x00010000
+#define VIVS_DE_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY__MASK      0x00100000
+#define VIVS_DE_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY__SHIFT     20
+#define VIVS_DE_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY_ENABLE     0x00100000
+#define VIVS_DE_ALPHA_MODES_SRC_BLENDING_MODE__MASK            0x07000000
+#define VIVS_DE_ALPHA_MODES_SRC_BLENDING_MODE__SHIFT           24
+#define VIVS_DE_ALPHA_MODES_SRC_BLENDING_MODE(x)               (((x) << VIVS_DE_ALPHA_MODES_SRC_BLENDING_MODE__SHIFT) & VIVS_DE_ALPHA_MODES_SRC_BLENDING_MODE__MASK)
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_FACTOR__MASK             0x08000000
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_FACTOR__SHIFT            27
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_FACTOR_DISABLE           0x00000000
+#define VIVS_DE_ALPHA_MODES_SRC_ALPHA_FACTOR_ENABLE            0x08000000
+#define VIVS_DE_ALPHA_MODES_DST_BLENDING_MODE__MASK            0x70000000
+#define VIVS_DE_ALPHA_MODES_DST_BLENDING_MODE__SHIFT           28
+#define VIVS_DE_ALPHA_MODES_DST_BLENDING_MODE(x)               (((x) << VIVS_DE_ALPHA_MODES_DST_BLENDING_MODE__SHIFT) & VIVS_DE_ALPHA_MODES_DST_BLENDING_MODE__MASK)
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_FACTOR__MASK             0x80000000
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_FACTOR__SHIFT            31
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_FACTOR_DISABLE           0x00000000
+#define VIVS_DE_ALPHA_MODES_DST_ALPHA_FACTOR_ENABLE            0x80000000
+
+#define VIVS_DE_UPLANE_ADDRESS                                 0x00001284
+
+#define VIVS_DE_UPLANE_STRIDE                                  0x00001288
+#define VIVS_DE_UPLANE_STRIDE_STRIDE__MASK                     0x0003ffff
+#define VIVS_DE_UPLANE_STRIDE_STRIDE__SHIFT                    0
+#define VIVS_DE_UPLANE_STRIDE_STRIDE(x)                                (((x) << VIVS_DE_UPLANE_STRIDE_STRIDE__SHIFT) & VIVS_DE_UPLANE_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_VPLANE_ADDRESS                                 0x0000128c
+
+#define VIVS_DE_VPLANE_STRIDE                                  0x00001290
+#define VIVS_DE_VPLANE_STRIDE_STRIDE__MASK                     0x0003ffff
+#define VIVS_DE_VPLANE_STRIDE_STRIDE__SHIFT                    0
+#define VIVS_DE_VPLANE_STRIDE_STRIDE(x)                                (((x) << VIVS_DE_VPLANE_STRIDE_STRIDE__SHIFT) & VIVS_DE_VPLANE_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_VR_CONFIG                                      0x00001294
+#define VIVS_DE_VR_CONFIG_START__MASK                          0x00000003
+#define VIVS_DE_VR_CONFIG_START__SHIFT                         0
+#define VIVS_DE_VR_CONFIG_START_HORIZONTAL_BLIT                        0x00000000
+#define VIVS_DE_VR_CONFIG_START_VERTICAL_BLIT                  0x00000001
+#define VIVS_DE_VR_CONFIG_START_ONE_PASS_BLIT                  0x00000002
+#define VIVS_DE_VR_CONFIG_START_MASK                           0x00000008
+
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW                            0x00001298
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW_LEFT__MASK                 0x0000ffff
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW_LEFT__SHIFT                        0
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW_LEFT(x)                    (((x) << VIVS_DE_VR_SOURCE_IMAGE_LOW_LEFT__SHIFT) & VIVS_DE_VR_SOURCE_IMAGE_LOW_LEFT__MASK)
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW_TOP__MASK                  0xffff0000
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW_TOP__SHIFT                 16
+#define VIVS_DE_VR_SOURCE_IMAGE_LOW_TOP(x)                     (((x) << VIVS_DE_VR_SOURCE_IMAGE_LOW_TOP__SHIFT) & VIVS_DE_VR_SOURCE_IMAGE_LOW_TOP__MASK)
+
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH                           0x0000129c
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH_RIGHT__MASK               0x0000ffff
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH_RIGHT__SHIFT              0
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH_RIGHT(x)                  (((x) << VIVS_DE_VR_SOURCE_IMAGE_HIGH_RIGHT__SHIFT) & VIVS_DE_VR_SOURCE_IMAGE_HIGH_RIGHT__MASK)
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH_BOTTOM__MASK              0xffff0000
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH_BOTTOM__SHIFT             16
+#define VIVS_DE_VR_SOURCE_IMAGE_HIGH_BOTTOM(x)                 (((x) << VIVS_DE_VR_SOURCE_IMAGE_HIGH_BOTTOM__SHIFT) & VIVS_DE_VR_SOURCE_IMAGE_HIGH_BOTTOM__MASK)
+
+#define VIVS_DE_VR_SOURCE_ORIGIN_LOW                           0x000012a0
+#define VIVS_DE_VR_SOURCE_ORIGIN_LOW_X__MASK                   0xffffffff
+#define VIVS_DE_VR_SOURCE_ORIGIN_LOW_X__SHIFT                  0
+#define VIVS_DE_VR_SOURCE_ORIGIN_LOW_X(x)                      (((x) << VIVS_DE_VR_SOURCE_ORIGIN_LOW_X__SHIFT) & VIVS_DE_VR_SOURCE_ORIGIN_LOW_X__MASK)
+
+#define VIVS_DE_VR_SOURCE_ORIGIN_HIGH                          0x000012a4
+#define VIVS_DE_VR_SOURCE_ORIGIN_HIGH_Y__MASK                  0xffffffff
+#define VIVS_DE_VR_SOURCE_ORIGIN_HIGH_Y__SHIFT                 0
+#define VIVS_DE_VR_SOURCE_ORIGIN_HIGH_Y(x)                     (((x) << VIVS_DE_VR_SOURCE_ORIGIN_HIGH_Y__SHIFT) & VIVS_DE_VR_SOURCE_ORIGIN_HIGH_Y__MASK)
+
+#define VIVS_DE_VR_TARGET_WINDOW_LOW                           0x000012a8
+#define VIVS_DE_VR_TARGET_WINDOW_LOW_LEFT__MASK                        0x0000ffff
+#define VIVS_DE_VR_TARGET_WINDOW_LOW_LEFT__SHIFT               0
+#define VIVS_DE_VR_TARGET_WINDOW_LOW_LEFT(x)                   (((x) << VIVS_DE_VR_TARGET_WINDOW_LOW_LEFT__SHIFT) & VIVS_DE_VR_TARGET_WINDOW_LOW_LEFT__MASK)
+#define VIVS_DE_VR_TARGET_WINDOW_LOW_TOP__MASK                 0xffff0000
+#define VIVS_DE_VR_TARGET_WINDOW_LOW_TOP__SHIFT                        16
+#define VIVS_DE_VR_TARGET_WINDOW_LOW_TOP(x)                    (((x) << VIVS_DE_VR_TARGET_WINDOW_LOW_TOP__SHIFT) & VIVS_DE_VR_TARGET_WINDOW_LOW_TOP__MASK)
+
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH                          0x000012ac
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH_RIGHT__MASK              0x0000ffff
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH_RIGHT__SHIFT             0
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH_RIGHT(x)                 (((x) << VIVS_DE_VR_TARGET_WINDOW_HIGH_RIGHT__SHIFT) & VIVS_DE_VR_TARGET_WINDOW_HIGH_RIGHT__MASK)
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH_BOTTOM__MASK             0xffff0000
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH_BOTTOM__SHIFT            16
+#define VIVS_DE_VR_TARGET_WINDOW_HIGH_BOTTOM(x)                        (((x) << VIVS_DE_VR_TARGET_WINDOW_HIGH_BOTTOM__SHIFT) & VIVS_DE_VR_TARGET_WINDOW_HIGH_BOTTOM__MASK)
+
+#define VIVS_DE_PE_CONFIG                                      0x000012b0
+#define VIVS_DE_PE_CONFIG_DESTINATION_FETCH__MASK              0x00000003
+#define VIVS_DE_PE_CONFIG_DESTINATION_FETCH__SHIFT             0
+#define VIVS_DE_PE_CONFIG_DESTINATION_FETCH_DISABLE            0x00000000
+#define VIVS_DE_PE_CONFIG_DESTINATION_FETCH_DEFAULT            0x00000001
+#define VIVS_DE_PE_CONFIG_DESTINATION_FETCH_ALWAYS             0x00000002
+#define VIVS_DE_PE_CONFIG_DESTINATION_FETCH_MASK               0x00000008
+
+#define VIVS_DE_DEST_ROTATION_HEIGHT                           0x000012b4
+#define VIVS_DE_DEST_ROTATION_HEIGHT_HEIGHT__MASK              0x0000ffff
+#define VIVS_DE_DEST_ROTATION_HEIGHT_HEIGHT__SHIFT             0
+#define VIVS_DE_DEST_ROTATION_HEIGHT_HEIGHT(x)                 (((x) << VIVS_DE_DEST_ROTATION_HEIGHT_HEIGHT__SHIFT) & VIVS_DE_DEST_ROTATION_HEIGHT_HEIGHT__MASK)
+
+#define VIVS_DE_SRC_ROTATION_HEIGHT                            0x000012b8
+#define VIVS_DE_SRC_ROTATION_HEIGHT_HEIGHT__MASK               0x0000ffff
+#define VIVS_DE_SRC_ROTATION_HEIGHT_HEIGHT__SHIFT              0
+#define VIVS_DE_SRC_ROTATION_HEIGHT_HEIGHT(x)                  (((x) << VIVS_DE_SRC_ROTATION_HEIGHT_HEIGHT__SHIFT) & VIVS_DE_SRC_ROTATION_HEIGHT_HEIGHT__MASK)
+
+#define VIVS_DE_ROT_ANGLE                                      0x000012bc
+#define VIVS_DE_ROT_ANGLE_SRC__MASK                            0x00000007
+#define VIVS_DE_ROT_ANGLE_SRC__SHIFT                           0
+#define VIVS_DE_ROT_ANGLE_SRC(x)                               (((x) << VIVS_DE_ROT_ANGLE_SRC__SHIFT) & VIVS_DE_ROT_ANGLE_SRC__MASK)
+#define VIVS_DE_ROT_ANGLE_DST__MASK                            0x00000038
+#define VIVS_DE_ROT_ANGLE_DST__SHIFT                           3
+#define VIVS_DE_ROT_ANGLE_DST(x)                               (((x) << VIVS_DE_ROT_ANGLE_DST__SHIFT) & VIVS_DE_ROT_ANGLE_DST__MASK)
+#define VIVS_DE_ROT_ANGLE_SRC_MASK                             0x00000100
+#define VIVS_DE_ROT_ANGLE_DST_MASK                             0x00000200
+#define VIVS_DE_ROT_ANGLE_SRC_MIRROR__MASK                     0x00003000
+#define VIVS_DE_ROT_ANGLE_SRC_MIRROR__SHIFT                    12
+#define VIVS_DE_ROT_ANGLE_SRC_MIRROR(x)                                (((x) << VIVS_DE_ROT_ANGLE_SRC_MIRROR__SHIFT) & VIVS_DE_ROT_ANGLE_SRC_MIRROR__MASK)
+#define VIVS_DE_ROT_ANGLE_SRC_MIRROR_MASK                      0x00008000
+#define VIVS_DE_ROT_ANGLE_DST_MIRROR__MASK                     0x00030000
+#define VIVS_DE_ROT_ANGLE_DST_MIRROR__SHIFT                    16
+#define VIVS_DE_ROT_ANGLE_DST_MIRROR(x)                                (((x) << VIVS_DE_ROT_ANGLE_DST_MIRROR__SHIFT) & VIVS_DE_ROT_ANGLE_DST_MIRROR__MASK)
+#define VIVS_DE_ROT_ANGLE_DST_MIRROR_MASK                      0x00080000
+
+#define VIVS_DE_CLEAR_PIXEL_VALUE32                            0x000012c0
+
+#define VIVS_DE_DEST_COLOR_KEY                                 0x000012c4
+
+#define VIVS_DE_GLOBAL_SRC_COLOR                               0x000012c8
+
+#define VIVS_DE_GLOBAL_DEST_COLOR                              0x000012cc
+
+#define VIVS_DE_COLOR_MULTIPLY_MODES                           0x000012d0
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY__MASK     0x00000001
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY__SHIFT    0
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY_DISABLE   0x00000000
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY_ENABLE    0x00000001
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY__MASK     0x00000010
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY__SHIFT    4
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY_DISABLE   0x00000000
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY_ENABLE    0x00000010
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY__MASK      0x00000300
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY__SHIFT     8
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_ALPHA      0x00000100
+#define VIVS_DE_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_COLOR      0x00000200
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY__MASK      0x00100000
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY__SHIFT     20
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY_ENABLE     0x00100000
+
+#define VIVS_DE_PE_TRANSPARENCY                                        0x000012d4
+#define VIVS_DE_PE_TRANSPARENCY_SOURCE__MASK                   0x00000003
+#define VIVS_DE_PE_TRANSPARENCY_SOURCE__SHIFT                  0
+#define VIVS_DE_PE_TRANSPARENCY_SOURCE_OPAQUE                  0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_SOURCE_MASK                    0x00000001
+#define VIVS_DE_PE_TRANSPARENCY_SOURCE_KEY                     0x00000002
+#define VIVS_DE_PE_TRANSPARENCY_PATTERN__MASK                  0x00000030
+#define VIVS_DE_PE_TRANSPARENCY_PATTERN__SHIFT                 4
+#define VIVS_DE_PE_TRANSPARENCY_PATTERN_OPAQUE                 0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_PATTERN_MASK                   0x00000010
+#define VIVS_DE_PE_TRANSPARENCY_PATTERN_KEY                    0x00000020
+#define VIVS_DE_PE_TRANSPARENCY_DESTINATION__MASK              0x00000300
+#define VIVS_DE_PE_TRANSPARENCY_DESTINATION__SHIFT             8
+#define VIVS_DE_PE_TRANSPARENCY_DESTINATION_OPAQUE             0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_DESTINATION_MASK               0x00000100
+#define VIVS_DE_PE_TRANSPARENCY_DESTINATION_KEY                        0x00000200
+#define VIVS_DE_PE_TRANSPARENCY_TRANSPARENCY_MASK              0x00001000
+#define VIVS_DE_PE_TRANSPARENCY_USE_SRC_OVERRIDE__MASK         0x00030000
+#define VIVS_DE_PE_TRANSPARENCY_USE_SRC_OVERRIDE__SHIFT                16
+#define VIVS_DE_PE_TRANSPARENCY_USE_SRC_OVERRIDE_DEFAULT       0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_USE_SRC_OVERRIDE_USE_ENABLE    0x00010000
+#define VIVS_DE_PE_TRANSPARENCY_USE_SRC_OVERRIDE_USE_DISABLE   0x00020000
+#define VIVS_DE_PE_TRANSPARENCY_USE_PAT_OVERRIDE__MASK         0x00300000
+#define VIVS_DE_PE_TRANSPARENCY_USE_PAT_OVERRIDE__SHIFT                20
+#define VIVS_DE_PE_TRANSPARENCY_USE_PAT_OVERRIDE_DEFAULT       0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_USE_PAT_OVERRIDE_USE_ENABLE    0x00100000
+#define VIVS_DE_PE_TRANSPARENCY_USE_PAT_OVERRIDE_USE_DISABLE   0x00200000
+#define VIVS_DE_PE_TRANSPARENCY_USE_DST_OVERRIDE__MASK         0x03000000
+#define VIVS_DE_PE_TRANSPARENCY_USE_DST_OVERRIDE__SHIFT                24
+#define VIVS_DE_PE_TRANSPARENCY_USE_DST_OVERRIDE_DEFAULT       0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_USE_DST_OVERRIDE_USE_ENABLE    0x01000000
+#define VIVS_DE_PE_TRANSPARENCY_USE_DST_OVERRIDE_USE_DISABLE   0x02000000
+#define VIVS_DE_PE_TRANSPARENCY_RESOURCE_OVERRIDE_MASK         0x10000000
+#define VIVS_DE_PE_TRANSPARENCY_DFB_COLOR_KEY__MASK            0x20000000
+#define VIVS_DE_PE_TRANSPARENCY_DFB_COLOR_KEY__SHIFT           29
+#define VIVS_DE_PE_TRANSPARENCY_DFB_COLOR_KEY_DISABLE          0x00000000
+#define VIVS_DE_PE_TRANSPARENCY_DFB_COLOR_KEY_ENABLE           0x20000000
+#define VIVS_DE_PE_TRANSPARENCY_DFB_COLOR_KEY_MASK             0x80000000
+
+#define VIVS_DE_PE_CONTROL                                     0x000012d8
+#define VIVS_DE_PE_CONTROL_YUV__MASK                           0x00000001
+#define VIVS_DE_PE_CONTROL_YUV__SHIFT                          0
+#define VIVS_DE_PE_CONTROL_YUV_601                             0x00000000
+#define VIVS_DE_PE_CONTROL_YUV_709                             0x00000001
+#define VIVS_DE_PE_CONTROL_YUV_MASK                            0x00000008
+#define VIVS_DE_PE_CONTROL_UV_SWIZZLE__MASK                    0x00000010
+#define VIVS_DE_PE_CONTROL_UV_SWIZZLE__SHIFT                   4
+#define VIVS_DE_PE_CONTROL_UV_SWIZZLE_UV                       0x00000000
+#define VIVS_DE_PE_CONTROL_UV_SWIZZLE_VU                       0x00000010
+#define VIVS_DE_PE_CONTROL_UV_SWIZZLE_MASK                     0x00000080
+#define VIVS_DE_PE_CONTROL_YUVRGB__MASK                                0x00000100
+#define VIVS_DE_PE_CONTROL_YUVRGB__SHIFT                       8
+#define VIVS_DE_PE_CONTROL_YUVRGB_DISABLE                      0x00000000
+#define VIVS_DE_PE_CONTROL_YUVRGB_ENABLE                       0x00000100
+#define VIVS_DE_PE_CONTROL_YUVRGB_MASK                         0x00000800
+
+#define VIVS_DE_SRC_COLOR_KEY_HIGH                             0x000012dc
+
+#define VIVS_DE_DEST_COLOR_KEY_HIGH                            0x000012e0
+
+#define VIVS_DE_VR_CONFIG_EX                                   0x000012e4
+#define VIVS_DE_VR_CONFIG_EX_VERTICAL_LINE_WIDTH__MASK         0x00000003
+#define VIVS_DE_VR_CONFIG_EX_VERTICAL_LINE_WIDTH__SHIFT                0
+#define VIVS_DE_VR_CONFIG_EX_VERTICAL_LINE_WIDTH_AUTO          0x00000000
+#define VIVS_DE_VR_CONFIG_EX_VERTICAL_LINE_WIDTH_PIXELS16      0x00000001
+#define VIVS_DE_VR_CONFIG_EX_VERTICAL_LINE_WIDTH_PIXELS32      0x00000002
+#define VIVS_DE_VR_CONFIG_EX_VERTICAL_LINE_WIDTH_MASK          0x00000008
+#define VIVS_DE_VR_CONFIG_EX_FILTER_TAP__MASK                  0x000000f0
+#define VIVS_DE_VR_CONFIG_EX_FILTER_TAP__SHIFT                 4
+#define VIVS_DE_VR_CONFIG_EX_FILTER_TAP(x)                     (((x) << VIVS_DE_VR_CONFIG_EX_FILTER_TAP__SHIFT) & VIVS_DE_VR_CONFIG_EX_FILTER_TAP__MASK)
+#define VIVS_DE_VR_CONFIG_EX_FILTER_TAP_MASK                   0x00000100
+
+#define VIVS_DE_PE_DITHER_LOW                                  0x000012e8
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y0__MASK                        0x0000000f
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y0__SHIFT               0
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y0(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y0__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y0__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y0__MASK                        0x000000f0
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y0__SHIFT               4
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y0(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y0__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y0__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y0__MASK                        0x00000f00
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y0__SHIFT               8
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y0(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y0__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y0__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y0__MASK                        0x0000f000
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y0__SHIFT               12
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y0(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y0__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y0__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y1__MASK                        0x000f0000
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y1__SHIFT               16
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y1(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y1__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X0_Y1__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y1__MASK                        0x00f00000
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y1__SHIFT               20
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y1(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y1__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X1_Y1__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y1__MASK                        0x0f000000
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y1__SHIFT               24
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y1(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y1__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X2_Y1__MASK)
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y1__MASK                        0xf0000000
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y1__SHIFT               28
+#define VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y1(x)                   (((x) << VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y1__SHIFT) & VIVS_DE_PE_DITHER_LOW_PIXEL_X3_Y1__MASK)
+
+#define VIVS_DE_PE_DITHER_HIGH                                 0x000012ec
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y2__MASK               0x0000000f
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y2__SHIFT              0
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y2(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y2__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y2__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y2__MASK               0x000000f0
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y2__SHIFT              4
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y2(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y2__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y2__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y2__MASK               0x00000f00
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y2__SHIFT              8
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y2(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y2__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y2__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y2__MASK               0x0000f000
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y2__SHIFT              12
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y2(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y2__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y2__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y3__MASK               0x000f0000
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y3__SHIFT              16
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y3(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y3__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X0_Y3__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y3__MASK               0x00f00000
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y3__SHIFT              20
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y3(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y3__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X1_Y3__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y3__MASK               0x0f000000
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y3__SHIFT              24
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y3(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y3__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X2_Y3__MASK)
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y3__MASK               0xf0000000
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y3__SHIFT              28
+#define VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y3(x)                  (((x) << VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y3__SHIFT) & VIVS_DE_PE_DITHER_HIGH_PIXEL_X3_Y3__MASK)
+
+#define VIVS_DE_BW_CONFIG                                      0x000012f0
+#define VIVS_DE_BW_CONFIG_BLOCK_CONFIG__MASK                   0x00000001
+#define VIVS_DE_BW_CONFIG_BLOCK_CONFIG__SHIFT                  0
+#define VIVS_DE_BW_CONFIG_BLOCK_CONFIG_AUTO                    0x00000000
+#define VIVS_DE_BW_CONFIG_BLOCK_CONFIG_CUSTOMIZE               0x00000001
+#define VIVS_DE_BW_CONFIG_BLOCK_CONFIG_MASK                    0x00000008
+#define VIVS_DE_BW_CONFIG_BLOCK_WALK_DIRECTION__MASK           0x00000010
+#define VIVS_DE_BW_CONFIG_BLOCK_WALK_DIRECTION__SHIFT          4
+#define VIVS_DE_BW_CONFIG_BLOCK_WALK_DIRECTION_RIGHT_BOTTOM    0x00000000
+#define VIVS_DE_BW_CONFIG_BLOCK_WALK_DIRECTION_BOTTOM_RIGHT    0x00000010
+#define VIVS_DE_BW_CONFIG_BLOCK_WALK_DIRECTION_MASK            0x00000080
+#define VIVS_DE_BW_CONFIG_TILE_WALK_DIRECTION__MASK            0x00000100
+#define VIVS_DE_BW_CONFIG_TILE_WALK_DIRECTION__SHIFT           8
+#define VIVS_DE_BW_CONFIG_TILE_WALK_DIRECTION_RIGHT_BOTTOM     0x00000000
+#define VIVS_DE_BW_CONFIG_TILE_WALK_DIRECTION_BOTTOM_RIGHT     0x00000100
+#define VIVS_DE_BW_CONFIG_TILE_WALK_DIRECTION_MASK             0x00000800
+#define VIVS_DE_BW_CONFIG_PIXEL_WALK_DIRECTION__MASK           0x00001000
+#define VIVS_DE_BW_CONFIG_PIXEL_WALK_DIRECTION__SHIFT          12
+#define VIVS_DE_BW_CONFIG_PIXEL_WALK_DIRECTION_RIGHT_BOTTOM    0x00000000
+#define VIVS_DE_BW_CONFIG_PIXEL_WALK_DIRECTION_BOTTOM_RIGHT    0x00001000
+#define VIVS_DE_BW_CONFIG_PIXEL_WALK_DIRECTION_MASK            0x00008000
+
+#define VIVS_DE_BW_BLOCK_SIZE                                  0x000012f4
+#define VIVS_DE_BW_BLOCK_SIZE_WIDTH__MASK                      0x0000ffff
+#define VIVS_DE_BW_BLOCK_SIZE_WIDTH__SHIFT                     0
+#define VIVS_DE_BW_BLOCK_SIZE_WIDTH(x)                         (((x) << VIVS_DE_BW_BLOCK_SIZE_WIDTH__SHIFT) & VIVS_DE_BW_BLOCK_SIZE_WIDTH__MASK)
+#define VIVS_DE_BW_BLOCK_SIZE_HEIGHT__MASK                     0xffff0000
+#define VIVS_DE_BW_BLOCK_SIZE_HEIGHT__SHIFT                    16
+#define VIVS_DE_BW_BLOCK_SIZE_HEIGHT(x)                                (((x) << VIVS_DE_BW_BLOCK_SIZE_HEIGHT__SHIFT) & VIVS_DE_BW_BLOCK_SIZE_HEIGHT__MASK)
+
+#define VIVS_DE_BW_TILE_SIZE                                   0x000012f8
+#define VIVS_DE_BW_TILE_SIZE_WIDTH__MASK                       0x0000ffff
+#define VIVS_DE_BW_TILE_SIZE_WIDTH__SHIFT                      0
+#define VIVS_DE_BW_TILE_SIZE_WIDTH(x)                          (((x) << VIVS_DE_BW_TILE_SIZE_WIDTH__SHIFT) & VIVS_DE_BW_TILE_SIZE_WIDTH__MASK)
+#define VIVS_DE_BW_TILE_SIZE_HEIGHT__MASK                      0xffff0000
+#define VIVS_DE_BW_TILE_SIZE_HEIGHT__SHIFT                     16
+#define VIVS_DE_BW_TILE_SIZE_HEIGHT(x)                         (((x) << VIVS_DE_BW_TILE_SIZE_HEIGHT__SHIFT) & VIVS_DE_BW_TILE_SIZE_HEIGHT__MASK)
+
+#define VIVS_DE_BW_BLOCK_MASK                                  0x000012fc
+#define VIVS_DE_BW_BLOCK_MASK_HORIZONTAL__MASK                 0x0000ffff
+#define VIVS_DE_BW_BLOCK_MASK_HORIZONTAL__SHIFT                        0
+#define VIVS_DE_BW_BLOCK_MASK_HORIZONTAL(x)                    (((x) << VIVS_DE_BW_BLOCK_MASK_HORIZONTAL__SHIFT) & VIVS_DE_BW_BLOCK_MASK_HORIZONTAL__MASK)
+#define VIVS_DE_BW_BLOCK_MASK_VERTICAL__MASK                   0xffff0000
+#define VIVS_DE_BW_BLOCK_MASK_VERTICAL__SHIFT                  16
+#define VIVS_DE_BW_BLOCK_MASK_VERTICAL(x)                      (((x) << VIVS_DE_BW_BLOCK_MASK_VERTICAL__SHIFT) & VIVS_DE_BW_BLOCK_MASK_VERTICAL__MASK)
+
+#define VIVS_DE_SRC_EX_CONFIG                                  0x00001300
+#define VIVS_DE_SRC_EX_CONFIG_MULTI_TILED__MASK                        0x00000001
+#define VIVS_DE_SRC_EX_CONFIG_MULTI_TILED__SHIFT               0
+#define VIVS_DE_SRC_EX_CONFIG_MULTI_TILED_DISABLE              0x00000000
+#define VIVS_DE_SRC_EX_CONFIG_MULTI_TILED_ENABLE               0x00000001
+#define VIVS_DE_SRC_EX_CONFIG_SUPER_TILED__MASK                        0x00000008
+#define VIVS_DE_SRC_EX_CONFIG_SUPER_TILED__SHIFT               3
+#define VIVS_DE_SRC_EX_CONFIG_SUPER_TILED_DISABLE              0x00000000
+#define VIVS_DE_SRC_EX_CONFIG_SUPER_TILED_ENABLE               0x00000008
+#define VIVS_DE_SRC_EX_CONFIG_MINOR_TILED__MASK                        0x00000100
+#define VIVS_DE_SRC_EX_CONFIG_MINOR_TILED__SHIFT               8
+#define VIVS_DE_SRC_EX_CONFIG_MINOR_TILED_DISABLE              0x00000000
+#define VIVS_DE_SRC_EX_CONFIG_MINOR_TILED_ENABLE               0x00000100
+
+#define VIVS_DE_SRC_EX_ADDRESS                                 0x00001304
+
+#define VIVS_DE_DE_MULTI_SOURCE                                        0x00001308
+#define VIVS_DE_DE_MULTI_SOURCE_MAX_SOURCE__MASK               0x00000007
+#define VIVS_DE_DE_MULTI_SOURCE_MAX_SOURCE__SHIFT              0
+#define VIVS_DE_DE_MULTI_SOURCE_MAX_SOURCE(x)                  (((x) << VIVS_DE_DE_MULTI_SOURCE_MAX_SOURCE__SHIFT) & VIVS_DE_DE_MULTI_SOURCE_MAX_SOURCE__MASK)
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK__MASK         0x00000700
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK__SHIFT                8
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK_PIXEL16       0x00000000
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK_PIXEL32       0x00000100
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK_PIXEL64       0x00000200
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK_PIXEL128      0x00000300
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK_PIXEL256      0x00000400
+#define VIVS_DE_DE_MULTI_SOURCE_HORIZONTAL_BLOCK_PIXEL512      0x00000500
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK__MASK           0x00070000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK__SHIFT          16
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE1           0x00000000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE2           0x00010000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE4           0x00020000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE8           0x00030000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE16          0x00040000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE32          0x00050000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE64          0x00060000
+#define VIVS_DE_DE_MULTI_SOURCE_VERTICAL_BLOCK_LINE128         0x00070000
+
+#define VIVS_DE_DEYUV_CONVERSION                               0x0000130c
+#define VIVS_DE_DEYUV_CONVERSION_ENABLE__MASK                  0x00000003
+#define VIVS_DE_DEYUV_CONVERSION_ENABLE__SHIFT                 0
+#define VIVS_DE_DEYUV_CONVERSION_ENABLE_OFF                    0x00000000
+#define VIVS_DE_DEYUV_CONVERSION_ENABLE_PLANE1                 0x00000001
+#define VIVS_DE_DEYUV_CONVERSION_ENABLE_PLANE2                 0x00000002
+#define VIVS_DE_DEYUV_CONVERSION_ENABLE_PLANE3                 0x00000003
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_COUNT__MASK            0x0000000c
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_COUNT__SHIFT           2
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_COUNT(x)               (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE1_COUNT__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE1_COUNT__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_COUNT__MASK            0x00000030
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_COUNT__SHIFT           4
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_COUNT(x)               (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE2_COUNT__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE2_COUNT__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_COUNT__MASK            0x000000c0
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_COUNT__SHIFT           6
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_COUNT(x)               (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE3_COUNT__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE3_COUNT__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_B__MASK                0x00000300
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_B__SHIFT       8
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_B(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_B__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_B__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_G__MASK                0x00000c00
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_G__SHIFT       10
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_G(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_G__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_G__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_R__MASK                0x00003000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_R__SHIFT       12
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_R(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_R__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_R__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_A__MASK                0x0000c000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_A__SHIFT       14
+#define VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_A(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_A__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE1_SWIZZLE_A__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_B__MASK                0x00030000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_B__SHIFT       16
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_B(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_B__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_B__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_G__MASK                0x000c0000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_G__SHIFT       18
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_G(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_G__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_G__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_R__MASK                0x00300000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_R__SHIFT       20
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_R(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_R__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_R__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_A__MASK                0x00c00000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_A__SHIFT       22
+#define VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_A(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_A__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE2_SWIZZLE_A__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_B__MASK                0x03000000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_B__SHIFT       24
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_B(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_B__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_B__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_G__MASK                0x0c000000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_G__SHIFT       26
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_G(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_G__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_G__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_R__MASK                0x30000000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_R__SHIFT       28
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_R(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_R__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_R__MASK)
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_A__MASK                0xc0000000
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_A__SHIFT       30
+#define VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_A(x)           (((x) << VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_A__SHIFT) & VIVS_DE_DEYUV_CONVERSION_PLANE3_SWIZZLE_A__MASK)
+
+#define VIVS_DE_DE_PLANE2_ADDRESS                              0x00001310
+
+#define VIVS_DE_DE_PLANE2_STRIDE                               0x00001314
+#define VIVS_DE_DE_PLANE2_STRIDE_STRIDE__MASK                  0x0003ffff
+#define VIVS_DE_DE_PLANE2_STRIDE_STRIDE__SHIFT                 0
+#define VIVS_DE_DE_PLANE2_STRIDE_STRIDE(x)                     (((x) << VIVS_DE_DE_PLANE2_STRIDE_STRIDE__SHIFT) & VIVS_DE_DE_PLANE2_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_DE_PLANE3_ADDRESS                              0x00001318
+
+#define VIVS_DE_DE_PLANE3_STRIDE                               0x0000131c
+#define VIVS_DE_DE_PLANE3_STRIDE_STRIDE__MASK                  0x0003ffff
+#define VIVS_DE_DE_PLANE3_STRIDE_STRIDE__SHIFT                 0
+#define VIVS_DE_DE_PLANE3_STRIDE_STRIDE(x)                     (((x) << VIVS_DE_DE_PLANE3_STRIDE_STRIDE__SHIFT) & VIVS_DE_DE_PLANE3_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_DE_STALL_DE                                    0x00001320
+#define VIVS_DE_DE_STALL_DE_ENABLE__MASK                       0x00000001
+#define VIVS_DE_DE_STALL_DE_ENABLE__SHIFT                      0
+#define VIVS_DE_DE_STALL_DE_ENABLE_DISABLE                     0x00000000
+#define VIVS_DE_DE_STALL_DE_ENABLE_ENABLE                      0x00000001
+
+#define VIVS_DE_FILTER_KERNEL(i0)                             (0x00001800 + 0x4*(i0))
+#define VIVS_DE_FILTER_KERNEL__ESIZE                           0x00000004
+#define VIVS_DE_FILTER_KERNEL__LEN                             0x00000080
+#define VIVS_DE_FILTER_KERNEL_COEFFICIENT0__MASK               0x0000ffff
+#define VIVS_DE_FILTER_KERNEL_COEFFICIENT0__SHIFT              0
+#define VIVS_DE_FILTER_KERNEL_COEFFICIENT0(x)                  (((x) << VIVS_DE_FILTER_KERNEL_COEFFICIENT0__SHIFT) & VIVS_DE_FILTER_KERNEL_COEFFICIENT0__MASK)
+#define VIVS_DE_FILTER_KERNEL_COEFFICIENT1__MASK               0xffff0000
+#define VIVS_DE_FILTER_KERNEL_COEFFICIENT1__SHIFT              16
+#define VIVS_DE_FILTER_KERNEL_COEFFICIENT1(x)                  (((x) << VIVS_DE_FILTER_KERNEL_COEFFICIENT1__SHIFT) & VIVS_DE_FILTER_KERNEL_COEFFICIENT1__MASK)
+
+#define VIVS_DE_INDEX_COLOR_TABLE(i0)                         (0x00001c00 + 0x4*(i0))
+#define VIVS_DE_INDEX_COLOR_TABLE__ESIZE                       0x00000004
+#define VIVS_DE_INDEX_COLOR_TABLE__LEN                         0x00000100
+
+#define VIVS_DE_HORI_FILTER_KERNEL(i0)                        (0x00002800 + 0x4*(i0))
+#define VIVS_DE_HORI_FILTER_KERNEL__ESIZE                      0x00000004
+#define VIVS_DE_HORI_FILTER_KERNEL__LEN                                0x00000080
+#define VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT0__MASK          0x0000ffff
+#define VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT0__SHIFT         0
+#define VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT0(x)             (((x) << VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT0__SHIFT) & VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT0__MASK)
+#define VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT1__MASK          0xffff0000
+#define VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT1__SHIFT         16
+#define VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT1(x)             (((x) << VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT1__SHIFT) & VIVS_DE_HORI_FILTER_KERNEL_COEFFICIENT1__MASK)
+
+#define VIVS_DE_VERTI_FILTER_KERNEL(i0)                               (0x00002a00 + 0x4*(i0))
+#define VIVS_DE_VERTI_FILTER_KERNEL__ESIZE                     0x00000004
+#define VIVS_DE_VERTI_FILTER_KERNEL__LEN                       0x00000080
+#define VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT0__MASK         0x0000ffff
+#define VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT0__SHIFT                0
+#define VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT0(x)            (((x) << VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT0__SHIFT) & VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT0__MASK)
+#define VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT1__MASK         0xffff0000
+#define VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT1__SHIFT                16
+#define VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT1(x)            (((x) << VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT1__SHIFT) & VIVS_DE_VERTI_FILTER_KERNEL_COEFFICIENT1__MASK)
+
+#define VIVS_DE_INDEX_COLOR_TABLE32(i0)                               (0x00003400 + 0x4*(i0))
+#define VIVS_DE_INDEX_COLOR_TABLE32__ESIZE                     0x00000004
+#define VIVS_DE_INDEX_COLOR_TABLE32__LEN                       0x00000100
+
+#define VIVS_DE_BLOCK4                                         0x00000000
+
+#define VIVS_DE_BLOCK4_SRC_ADDRESS(i0)                        (0x00012800 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_ADDRESS__ESIZE                      0x00000004
+#define VIVS_DE_BLOCK4_SRC_ADDRESS__LEN                                0x00000004
+
+#define VIVS_DE_BLOCK4_SRC_STRIDE(i0)                         (0x00012810 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_STRIDE__ESIZE                       0x00000004
+#define VIVS_DE_BLOCK4_SRC_STRIDE__LEN                         0x00000004
+#define VIVS_DE_BLOCK4_SRC_STRIDE_STRIDE__MASK                 0x0003ffff
+#define VIVS_DE_BLOCK4_SRC_STRIDE_STRIDE__SHIFT                        0
+#define VIVS_DE_BLOCK4_SRC_STRIDE_STRIDE(x)                    (((x) << VIVS_DE_BLOCK4_SRC_STRIDE_STRIDE__SHIFT) & VIVS_DE_BLOCK4_SRC_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG(i0)                (0x00012820 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG__ESIZE              0x00000004
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG__LEN                        0x00000004
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_WIDTH__MASK         0x0000ffff
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_WIDTH__SHIFT                0
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_WIDTH(x)            (((x) << VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_WIDTH__SHIFT) & VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_WIDTH__MASK)
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_ROTATION__MASK      0x00010000
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_ROTATION__SHIFT     16
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_ROTATION_DISABLE    0x00000000
+#define VIVS_DE_BLOCK4_SRC_ROTATION_CONFIG_ROTATION_ENABLE     0x00010000
+
+#define VIVS_DE_BLOCK4_SRC_CONFIG(i0)                         (0x00012830 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_CONFIG__ESIZE                       0x00000004
+#define VIVS_DE_BLOCK4_SRC_CONFIG__LEN                         0x00000004
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PE10_SOURCE_FORMAT__MASK     0x0000000f
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PE10_SOURCE_FORMAT__SHIFT    0
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PE10_SOURCE_FORMAT(x)                (((x) << VIVS_DE_BLOCK4_SRC_CONFIG_PE10_SOURCE_FORMAT__SHIFT) & VIVS_DE_BLOCK4_SRC_CONFIG_PE10_SOURCE_FORMAT__MASK)
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TRANSPARENCY__MASK           0x00000030
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TRANSPARENCY__SHIFT          4
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TRANSPARENCY(x)              (((x) << VIVS_DE_BLOCK4_SRC_CONFIG_TRANSPARENCY__SHIFT) & VIVS_DE_BLOCK4_SRC_CONFIG_TRANSPARENCY__MASK)
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SRC_RELATIVE__MASK           0x00000040
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SRC_RELATIVE__SHIFT          6
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SRC_RELATIVE_ABSOLUTE                0x00000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SRC_RELATIVE_RELATIVE                0x00000040
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TILED__MASK                  0x00000080
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TILED__SHIFT                 7
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TILED_DISABLE                        0x00000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_TILED_ENABLE                 0x00000080
+#define VIVS_DE_BLOCK4_SRC_CONFIG_LOCATION__MASK               0x00000100
+#define VIVS_DE_BLOCK4_SRC_CONFIG_LOCATION__SHIFT              8
+#define VIVS_DE_BLOCK4_SRC_CONFIG_LOCATION_MEMORY              0x00000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_LOCATION_STREAM              0x00000100
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PACK__MASK                   0x00003000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PACK__SHIFT                  12
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PACK_PACKED8                 0x00000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PACK_PACKED16                        0x00001000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PACK_PACKED32                        0x00002000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_PACK_UNPACKED                        0x00003000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_MONO_TRANSPARENCY__MASK      0x00008000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_MONO_TRANSPARENCY__SHIFT     15
+#define VIVS_DE_BLOCK4_SRC_CONFIG_MONO_TRANSPARENCY_BACKGROUND 0x00000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_MONO_TRANSPARENCY_FOREGROUND 0x00008000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_UNK16                                0x00010000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SWIZZLE__MASK                        0x00300000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SWIZZLE__SHIFT               20
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SWIZZLE(x)                   (((x) << VIVS_DE_BLOCK4_SRC_CONFIG_SWIZZLE__SHIFT) & VIVS_DE_BLOCK4_SRC_CONFIG_SWIZZLE__MASK)
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SOURCE_FORMAT__MASK          0x1f000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SOURCE_FORMAT__SHIFT         24
+#define VIVS_DE_BLOCK4_SRC_CONFIG_SOURCE_FORMAT(x)             (((x) << VIVS_DE_BLOCK4_SRC_CONFIG_SOURCE_FORMAT__SHIFT) & VIVS_DE_BLOCK4_SRC_CONFIG_SOURCE_FORMAT__MASK)
+#define VIVS_DE_BLOCK4_SRC_CONFIG_DISABLE420_L2_CACHE          0x20000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_ENDIAN_CONTROL__MASK         0xc0000000
+#define VIVS_DE_BLOCK4_SRC_CONFIG_ENDIAN_CONTROL__SHIFT                30
+#define VIVS_DE_BLOCK4_SRC_CONFIG_ENDIAN_CONTROL(x)            (((x) << VIVS_DE_BLOCK4_SRC_CONFIG_ENDIAN_CONTROL__SHIFT) & VIVS_DE_BLOCK4_SRC_CONFIG_ENDIAN_CONTROL__MASK)
+
+#define VIVS_DE_BLOCK4_SRC_ORIGIN(i0)                         (0x00012840 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_ORIGIN__ESIZE                       0x00000004
+#define VIVS_DE_BLOCK4_SRC_ORIGIN__LEN                         0x00000004
+#define VIVS_DE_BLOCK4_SRC_ORIGIN_X__MASK                      0x0000ffff
+#define VIVS_DE_BLOCK4_SRC_ORIGIN_X__SHIFT                     0
+#define VIVS_DE_BLOCK4_SRC_ORIGIN_X(x)                         (((x) << VIVS_DE_BLOCK4_SRC_ORIGIN_X__SHIFT) & VIVS_DE_BLOCK4_SRC_ORIGIN_X__MASK)
+#define VIVS_DE_BLOCK4_SRC_ORIGIN_Y__MASK                      0xffff0000
+#define VIVS_DE_BLOCK4_SRC_ORIGIN_Y__SHIFT                     16
+#define VIVS_DE_BLOCK4_SRC_ORIGIN_Y(x)                         (((x) << VIVS_DE_BLOCK4_SRC_ORIGIN_Y__SHIFT) & VIVS_DE_BLOCK4_SRC_ORIGIN_Y__MASK)
+
+#define VIVS_DE_BLOCK4_SRC_SIZE(i0)                           (0x00012850 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_SIZE__ESIZE                         0x00000004
+#define VIVS_DE_BLOCK4_SRC_SIZE__LEN                           0x00000004
+#define VIVS_DE_BLOCK4_SRC_SIZE_X__MASK                                0x0000ffff
+#define VIVS_DE_BLOCK4_SRC_SIZE_X__SHIFT                       0
+#define VIVS_DE_BLOCK4_SRC_SIZE_X(x)                           (((x) << VIVS_DE_BLOCK4_SRC_SIZE_X__SHIFT) & VIVS_DE_BLOCK4_SRC_SIZE_X__MASK)
+#define VIVS_DE_BLOCK4_SRC_SIZE_Y__MASK                                0xffff0000
+#define VIVS_DE_BLOCK4_SRC_SIZE_Y__SHIFT                       16
+#define VIVS_DE_BLOCK4_SRC_SIZE_Y(x)                           (((x) << VIVS_DE_BLOCK4_SRC_SIZE_Y__SHIFT) & VIVS_DE_BLOCK4_SRC_SIZE_Y__MASK)
+
+#define VIVS_DE_BLOCK4_SRC_COLOR_BG(i0)                               (0x00012860 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_COLOR_BG__ESIZE                     0x00000004
+#define VIVS_DE_BLOCK4_SRC_COLOR_BG__LEN                       0x00000004
+
+#define VIVS_DE_BLOCK4_ROP(i0)                                (0x00012870 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_ROP__ESIZE                              0x00000004
+#define VIVS_DE_BLOCK4_ROP__LEN                                        0x00000004
+#define VIVS_DE_BLOCK4_ROP_ROP_FG__MASK                                0x000000ff
+#define VIVS_DE_BLOCK4_ROP_ROP_FG__SHIFT                       0
+#define VIVS_DE_BLOCK4_ROP_ROP_FG(x)                           (((x) << VIVS_DE_BLOCK4_ROP_ROP_FG__SHIFT) & VIVS_DE_BLOCK4_ROP_ROP_FG__MASK)
+#define VIVS_DE_BLOCK4_ROP_ROP_BG__MASK                                0x0000ff00
+#define VIVS_DE_BLOCK4_ROP_ROP_BG__SHIFT                       8
+#define VIVS_DE_BLOCK4_ROP_ROP_BG(x)                           (((x) << VIVS_DE_BLOCK4_ROP_ROP_BG__SHIFT) & VIVS_DE_BLOCK4_ROP_ROP_BG__MASK)
+#define VIVS_DE_BLOCK4_ROP_TYPE__MASK                          0x00300000
+#define VIVS_DE_BLOCK4_ROP_TYPE__SHIFT                         20
+#define VIVS_DE_BLOCK4_ROP_TYPE_ROP2_PATTERN                   0x00000000
+#define VIVS_DE_BLOCK4_ROP_TYPE_ROP2_SOURCE                    0x00100000
+#define VIVS_DE_BLOCK4_ROP_TYPE_ROP3                           0x00200000
+#define VIVS_DE_BLOCK4_ROP_TYPE_ROP4                           0x00300000
+
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL(i0)                      (0x00012880 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL__ESIZE                    0x00000004
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL__LEN                      0x00000004
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_ENABLE__MASK              0x00000001
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_ENABLE__SHIFT             0
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_ENABLE_OFF                        0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_ENABLE_ON                 0x00000001
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__MASK       0x00ff0000
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__SHIFT      16
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA(x)  (((x) << VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__SHIFT) & VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__MASK)
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__MASK       0xff000000
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__SHIFT      24
+#define VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA(x)  (((x) << VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__SHIFT) & VIVS_DE_BLOCK4_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__MASK)
+
+#define VIVS_DE_BLOCK4_ALPHA_MODES(i0)                        (0x00012890 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_ALPHA_MODES__ESIZE                      0x00000004
+#define VIVS_DE_BLOCK4_ALPHA_MODES__LEN                                0x00000004
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_MODE__MASK                0x00000001
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_MODE__SHIFT       0
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_MODE_NORMAL       0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_MODE_INVERSED     0x00000001
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_MODE__MASK                0x00000010
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_MODE__SHIFT       4
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_MODE_NORMAL       0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_MODE_INVERSED     0x00000010
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE__MASK 0x00000300
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE__SHIFT        8
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_NORMAL        0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_GLOBAL        0x00000100
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_SCALED        0x00000200
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE__MASK 0x00003000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE__SHIFT        12
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_NORMAL        0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_GLOBAL        0x00001000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_SCALED        0x00002000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY__MASK       0x00010000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY__SHIFT      16
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY_ENABLE      0x00010000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY__MASK       0x00100000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY__SHIFT      20
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY_ENABLE      0x00100000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_BLENDING_MODE__MASK     0x07000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_BLENDING_MODE__SHIFT    24
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_BLENDING_MODE(x)                (((x) << VIVS_DE_BLOCK4_ALPHA_MODES_SRC_BLENDING_MODE__SHIFT) & VIVS_DE_BLOCK4_ALPHA_MODES_SRC_BLENDING_MODE__MASK)
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_FACTOR__MASK      0x08000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_FACTOR__SHIFT     27
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_FACTOR_DISABLE    0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_SRC_ALPHA_FACTOR_ENABLE     0x08000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_BLENDING_MODE__MASK     0x70000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_BLENDING_MODE__SHIFT    28
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_BLENDING_MODE(x)                (((x) << VIVS_DE_BLOCK4_ALPHA_MODES_DST_BLENDING_MODE__SHIFT) & VIVS_DE_BLOCK4_ALPHA_MODES_DST_BLENDING_MODE__MASK)
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_FACTOR__MASK      0x80000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_FACTOR__SHIFT     31
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_FACTOR_DISABLE    0x00000000
+#define VIVS_DE_BLOCK4_ALPHA_MODES_DST_ALPHA_FACTOR_ENABLE     0x80000000
+
+#define VIVS_DE_BLOCK4_ADDRESS_U(i0)                          (0x000128a0 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_ADDRESS_U__ESIZE                                0x00000004
+#define VIVS_DE_BLOCK4_ADDRESS_U__LEN                          0x00000004
+
+#define VIVS_DE_BLOCK4_STRIDE_U(i0)                           (0x000128b0 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_STRIDE_U__ESIZE                         0x00000004
+#define VIVS_DE_BLOCK4_STRIDE_U__LEN                           0x00000004
+#define VIVS_DE_BLOCK4_STRIDE_U_STRIDE__MASK                   0x0003ffff
+#define VIVS_DE_BLOCK4_STRIDE_U_STRIDE__SHIFT                  0
+#define VIVS_DE_BLOCK4_STRIDE_U_STRIDE(x)                      (((x) << VIVS_DE_BLOCK4_STRIDE_U_STRIDE__SHIFT) & VIVS_DE_BLOCK4_STRIDE_U_STRIDE__MASK)
+
+#define VIVS_DE_BLOCK4_ADDRESS_V(i0)                          (0x000128c0 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_ADDRESS_V__ESIZE                                0x00000004
+#define VIVS_DE_BLOCK4_ADDRESS_V__LEN                          0x00000004
+
+#define VIVS_DE_BLOCK4_STRIDE_V(i0)                           (0x000128d0 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_STRIDE_V__ESIZE                         0x00000004
+#define VIVS_DE_BLOCK4_STRIDE_V__LEN                           0x00000004
+#define VIVS_DE_BLOCK4_STRIDE_V_STRIDE__MASK                   0x0003ffff
+#define VIVS_DE_BLOCK4_STRIDE_V_STRIDE__SHIFT                  0
+#define VIVS_DE_BLOCK4_STRIDE_V_STRIDE(x)                      (((x) << VIVS_DE_BLOCK4_STRIDE_V_STRIDE__SHIFT) & VIVS_DE_BLOCK4_STRIDE_V_STRIDE__MASK)
+
+#define VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT(i0)                (0x000128e0 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT__ESIZE              0x00000004
+#define VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT__LEN                        0x00000004
+#define VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT_HEIGHT__MASK                0x0000ffff
+#define VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT_HEIGHT__SHIFT       0
+#define VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT_HEIGHT(x)           (((x) << VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT_HEIGHT__SHIFT) & VIVS_DE_BLOCK4_SRC_ROTATION_HEIGHT_HEIGHT__MASK)
+
+#define VIVS_DE_BLOCK4_ROT_ANGLE(i0)                          (0x000128f0 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_ROT_ANGLE__ESIZE                                0x00000004
+#define VIVS_DE_BLOCK4_ROT_ANGLE__LEN                          0x00000004
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC__MASK                     0x00000007
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC__SHIFT                    0
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC(x)                                (((x) << VIVS_DE_BLOCK4_ROT_ANGLE_SRC__SHIFT) & VIVS_DE_BLOCK4_ROT_ANGLE_SRC__MASK)
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST__MASK                     0x00000038
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST__SHIFT                    3
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST(x)                                (((x) << VIVS_DE_BLOCK4_ROT_ANGLE_DST__SHIFT) & VIVS_DE_BLOCK4_ROT_ANGLE_DST__MASK)
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MASK                      0x00000100
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST_MASK                      0x00000200
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MIRROR__MASK              0x00003000
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MIRROR__SHIFT             12
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MIRROR(x)                 (((x) << VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MIRROR__SHIFT) & VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MIRROR__MASK)
+#define VIVS_DE_BLOCK4_ROT_ANGLE_SRC_MIRROR_MASK               0x00008000
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST_MIRROR__MASK              0x00030000
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST_MIRROR__SHIFT             16
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST_MIRROR(x)                 (((x) << VIVS_DE_BLOCK4_ROT_ANGLE_DST_MIRROR__SHIFT) & VIVS_DE_BLOCK4_ROT_ANGLE_DST_MIRROR__MASK)
+#define VIVS_DE_BLOCK4_ROT_ANGLE_DST_MIRROR_MASK               0x00080000
+
+#define VIVS_DE_BLOCK4_GLOBAL_SRC_COLOR(i0)                   (0x00012900 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_GLOBAL_SRC_COLOR__ESIZE                 0x00000004
+#define VIVS_DE_BLOCK4_GLOBAL_SRC_COLOR__LEN                   0x00000004
+
+#define VIVS_DE_BLOCK4_GLOBAL_DEST_COLOR(i0)                  (0x00012910 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_GLOBAL_DEST_COLOR__ESIZE                        0x00000004
+#define VIVS_DE_BLOCK4_GLOBAL_DEST_COLOR__LEN                  0x00000004
+
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES(i0)                       (0x00012920 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES__ESIZE             0x00000004
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES__LEN               0x00000004
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY__MASK      0x00000001
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY__SHIFT     0
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY_ENABLE     0x00000001
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY__MASK      0x00000010
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY__SHIFT     4
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY_ENABLE     0x00000010
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY__MASK       0x00000300
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY__SHIFT      8
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_ALPHA       0x00000100
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_COLOR       0x00000200
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY__MASK       0x00100000
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY__SHIFT      20
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK4_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY_ENABLE      0x00100000
+
+#define VIVS_DE_BLOCK4_TRANSPARENCY(i0)                               (0x00012930 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_TRANSPARENCY__ESIZE                     0x00000004
+#define VIVS_DE_BLOCK4_TRANSPARENCY__LEN                       0x00000004
+#define VIVS_DE_BLOCK4_TRANSPARENCY_SOURCE__MASK               0x00000003
+#define VIVS_DE_BLOCK4_TRANSPARENCY_SOURCE__SHIFT              0
+#define VIVS_DE_BLOCK4_TRANSPARENCY_SOURCE_OPAQUE              0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_SOURCE_MASK                        0x00000001
+#define VIVS_DE_BLOCK4_TRANSPARENCY_SOURCE_KEY                 0x00000002
+#define VIVS_DE_BLOCK4_TRANSPARENCY_PATTERN__MASK              0x00000030
+#define VIVS_DE_BLOCK4_TRANSPARENCY_PATTERN__SHIFT             4
+#define VIVS_DE_BLOCK4_TRANSPARENCY_PATTERN_OPAQUE             0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_PATTERN_MASK               0x00000010
+#define VIVS_DE_BLOCK4_TRANSPARENCY_PATTERN_KEY                        0x00000020
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DESTINATION__MASK          0x00000300
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DESTINATION__SHIFT         8
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DESTINATION_OPAQUE         0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DESTINATION_MASK           0x00000100
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DESTINATION_KEY            0x00000200
+#define VIVS_DE_BLOCK4_TRANSPARENCY_TRANSPARENCY_MASK          0x00001000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_SRC_OVERRIDE__MASK     0x00030000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_SRC_OVERRIDE__SHIFT    16
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_SRC_OVERRIDE_DEFAULT   0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_SRC_OVERRIDE_USE_ENABLE        0x00010000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_SRC_OVERRIDE_USE_DISABLE       0x00020000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_PAT_OVERRIDE__MASK     0x00300000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_PAT_OVERRIDE__SHIFT    20
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_PAT_OVERRIDE_DEFAULT   0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_PAT_OVERRIDE_USE_ENABLE        0x00100000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_PAT_OVERRIDE_USE_DISABLE       0x00200000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_DST_OVERRIDE__MASK     0x03000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_DST_OVERRIDE__SHIFT    24
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_DST_OVERRIDE_DEFAULT   0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_DST_OVERRIDE_USE_ENABLE        0x01000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_USE_DST_OVERRIDE_USE_DISABLE       0x02000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_RESOURCE_OVERRIDE_MASK     0x10000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DFB_COLOR_KEY__MASK                0x20000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DFB_COLOR_KEY__SHIFT       29
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DFB_COLOR_KEY_DISABLE      0x00000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DFB_COLOR_KEY_ENABLE       0x20000000
+#define VIVS_DE_BLOCK4_TRANSPARENCY_DFB_COLOR_KEY_MASK         0x80000000
+
+#define VIVS_DE_BLOCK4_CONTROL(i0)                            (0x00012940 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_CONTROL__ESIZE                          0x00000004
+#define VIVS_DE_BLOCK4_CONTROL__LEN                            0x00000004
+#define VIVS_DE_BLOCK4_CONTROL_YUV__MASK                       0x00000001
+#define VIVS_DE_BLOCK4_CONTROL_YUV__SHIFT                      0
+#define VIVS_DE_BLOCK4_CONTROL_YUV_601                         0x00000000
+#define VIVS_DE_BLOCK4_CONTROL_YUV_709                         0x00000001
+#define VIVS_DE_BLOCK4_CONTROL_YUV_MASK                                0x00000008
+#define VIVS_DE_BLOCK4_CONTROL_UV_SWIZZLE__MASK                        0x00000010
+#define VIVS_DE_BLOCK4_CONTROL_UV_SWIZZLE__SHIFT               4
+#define VIVS_DE_BLOCK4_CONTROL_UV_SWIZZLE_UV                   0x00000000
+#define VIVS_DE_BLOCK4_CONTROL_UV_SWIZZLE_VU                   0x00000010
+#define VIVS_DE_BLOCK4_CONTROL_UV_SWIZZLE_MASK                 0x00000080
+#define VIVS_DE_BLOCK4_CONTROL_YUVRGB__MASK                    0x00000100
+#define VIVS_DE_BLOCK4_CONTROL_YUVRGB__SHIFT                   8
+#define VIVS_DE_BLOCK4_CONTROL_YUVRGB_DISABLE                  0x00000000
+#define VIVS_DE_BLOCK4_CONTROL_YUVRGB_ENABLE                   0x00000100
+#define VIVS_DE_BLOCK4_CONTROL_YUVRGB_MASK                     0x00000800
+
+#define VIVS_DE_BLOCK4_SRC_COLOR_KEY_HIGH(i0)                 (0x00012950 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_COLOR_KEY_HIGH__ESIZE               0x00000004
+#define VIVS_DE_BLOCK4_SRC_COLOR_KEY_HIGH__LEN                 0x00000004
+
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG(i0)                      (0x00012960 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG__ESIZE                    0x00000004
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG__LEN                      0x00000004
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MULTI_TILED__MASK         0x00000001
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MULTI_TILED__SHIFT                0
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MULTI_TILED_DISABLE       0x00000000
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MULTI_TILED_ENABLE                0x00000001
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_SUPER_TILED__MASK         0x00000008
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_SUPER_TILED__SHIFT                3
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_SUPER_TILED_DISABLE       0x00000000
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_SUPER_TILED_ENABLE                0x00000008
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MINOR_TILED__MASK         0x00000100
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MINOR_TILED__SHIFT                8
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MINOR_TILED_DISABLE       0x00000000
+#define VIVS_DE_BLOCK4_SRC_EX_CONFIG_MINOR_TILED_ENABLE                0x00000100
+
+#define VIVS_DE_BLOCK4_SRC_EX_ADDRESS(i0)                     (0x00012970 + 0x4*(i0))
+#define VIVS_DE_BLOCK4_SRC_EX_ADDRESS__ESIZE                   0x00000004
+#define VIVS_DE_BLOCK4_SRC_EX_ADDRESS__LEN                     0x00000004
+
+#define VIVS_DE_BLOCK8                                         0x00000000
+
+#define VIVS_DE_BLOCK8_SRC_ADDRESS(i0)                        (0x00012a00 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_ADDRESS__ESIZE                      0x00000004
+#define VIVS_DE_BLOCK8_SRC_ADDRESS__LEN                                0x00000008
+
+#define VIVS_DE_BLOCK8_SRC_STRIDE(i0)                         (0x00012a20 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_STRIDE__ESIZE                       0x00000004
+#define VIVS_DE_BLOCK8_SRC_STRIDE__LEN                         0x00000008
+#define VIVS_DE_BLOCK8_SRC_STRIDE_STRIDE__MASK                 0x0003ffff
+#define VIVS_DE_BLOCK8_SRC_STRIDE_STRIDE__SHIFT                        0
+#define VIVS_DE_BLOCK8_SRC_STRIDE_STRIDE(x)                    (((x) << VIVS_DE_BLOCK8_SRC_STRIDE_STRIDE__SHIFT) & VIVS_DE_BLOCK8_SRC_STRIDE_STRIDE__MASK)
+
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG(i0)                (0x00012a40 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG__ESIZE              0x00000004
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG__LEN                        0x00000008
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_WIDTH__MASK         0x0000ffff
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_WIDTH__SHIFT                0
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_WIDTH(x)            (((x) << VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_WIDTH__SHIFT) & VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_WIDTH__MASK)
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_ROTATION__MASK      0x00010000
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_ROTATION__SHIFT     16
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_ROTATION_DISABLE    0x00000000
+#define VIVS_DE_BLOCK8_SRC_ROTATION_CONFIG_ROTATION_ENABLE     0x00010000
+
+#define VIVS_DE_BLOCK8_SRC_CONFIG(i0)                         (0x00012a60 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_CONFIG__ESIZE                       0x00000004
+#define VIVS_DE_BLOCK8_SRC_CONFIG__LEN                         0x00000008
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PE10_SOURCE_FORMAT__MASK     0x0000000f
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PE10_SOURCE_FORMAT__SHIFT    0
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PE10_SOURCE_FORMAT(x)                (((x) << VIVS_DE_BLOCK8_SRC_CONFIG_PE10_SOURCE_FORMAT__SHIFT) & VIVS_DE_BLOCK8_SRC_CONFIG_PE10_SOURCE_FORMAT__MASK)
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TRANSPARENCY__MASK           0x00000030
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TRANSPARENCY__SHIFT          4
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TRANSPARENCY(x)              (((x) << VIVS_DE_BLOCK8_SRC_CONFIG_TRANSPARENCY__SHIFT) & VIVS_DE_BLOCK8_SRC_CONFIG_TRANSPARENCY__MASK)
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SRC_RELATIVE__MASK           0x00000040
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SRC_RELATIVE__SHIFT          6
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SRC_RELATIVE_ABSOLUTE                0x00000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SRC_RELATIVE_RELATIVE                0x00000040
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TILED__MASK                  0x00000080
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TILED__SHIFT                 7
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TILED_DISABLE                        0x00000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_TILED_ENABLE                 0x00000080
+#define VIVS_DE_BLOCK8_SRC_CONFIG_LOCATION__MASK               0x00000100
+#define VIVS_DE_BLOCK8_SRC_CONFIG_LOCATION__SHIFT              8
+#define VIVS_DE_BLOCK8_SRC_CONFIG_LOCATION_MEMORY              0x00000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_LOCATION_STREAM              0x00000100
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PACK__MASK                   0x00003000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PACK__SHIFT                  12
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PACK_PACKED8                 0x00000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PACK_PACKED16                        0x00001000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PACK_PACKED32                        0x00002000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_PACK_UNPACKED                        0x00003000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_MONO_TRANSPARENCY__MASK      0x00008000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_MONO_TRANSPARENCY__SHIFT     15
+#define VIVS_DE_BLOCK8_SRC_CONFIG_MONO_TRANSPARENCY_BACKGROUND 0x00000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_MONO_TRANSPARENCY_FOREGROUND 0x00008000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_UNK16                                0x00010000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SWIZZLE__MASK                        0x00300000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SWIZZLE__SHIFT               20
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SWIZZLE(x)                   (((x) << VIVS_DE_BLOCK8_SRC_CONFIG_SWIZZLE__SHIFT) & VIVS_DE_BLOCK8_SRC_CONFIG_SWIZZLE__MASK)
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SOURCE_FORMAT__MASK          0x1f000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SOURCE_FORMAT__SHIFT         24
+#define VIVS_DE_BLOCK8_SRC_CONFIG_SOURCE_FORMAT(x)             (((x) << VIVS_DE_BLOCK8_SRC_CONFIG_SOURCE_FORMAT__SHIFT) & VIVS_DE_BLOCK8_SRC_CONFIG_SOURCE_FORMAT__MASK)
+#define VIVS_DE_BLOCK8_SRC_CONFIG_DISABLE420_L2_CACHE          0x20000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_ENDIAN_CONTROL__MASK         0xc0000000
+#define VIVS_DE_BLOCK8_SRC_CONFIG_ENDIAN_CONTROL__SHIFT                30
+#define VIVS_DE_BLOCK8_SRC_CONFIG_ENDIAN_CONTROL(x)            (((x) << VIVS_DE_BLOCK8_SRC_CONFIG_ENDIAN_CONTROL__SHIFT) & VIVS_DE_BLOCK8_SRC_CONFIG_ENDIAN_CONTROL__MASK)
+
+#define VIVS_DE_BLOCK8_SRC_ORIGIN(i0)                         (0x00012a80 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_ORIGIN__ESIZE                       0x00000004
+#define VIVS_DE_BLOCK8_SRC_ORIGIN__LEN                         0x00000008
+#define VIVS_DE_BLOCK8_SRC_ORIGIN_X__MASK                      0x0000ffff
+#define VIVS_DE_BLOCK8_SRC_ORIGIN_X__SHIFT                     0
+#define VIVS_DE_BLOCK8_SRC_ORIGIN_X(x)                         (((x) << VIVS_DE_BLOCK8_SRC_ORIGIN_X__SHIFT) & VIVS_DE_BLOCK8_SRC_ORIGIN_X__MASK)
+#define VIVS_DE_BLOCK8_SRC_ORIGIN_Y__MASK                      0xffff0000
+#define VIVS_DE_BLOCK8_SRC_ORIGIN_Y__SHIFT                     16
+#define VIVS_DE_BLOCK8_SRC_ORIGIN_Y(x)                         (((x) << VIVS_DE_BLOCK8_SRC_ORIGIN_Y__SHIFT) & VIVS_DE_BLOCK8_SRC_ORIGIN_Y__MASK)
+
+#define VIVS_DE_BLOCK8_SRC_SIZE(i0)                           (0x00012aa0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_SIZE__ESIZE                         0x00000004
+#define VIVS_DE_BLOCK8_SRC_SIZE__LEN                           0x00000008
+#define VIVS_DE_BLOCK8_SRC_SIZE_X__MASK                                0x0000ffff
+#define VIVS_DE_BLOCK8_SRC_SIZE_X__SHIFT                       0
+#define VIVS_DE_BLOCK8_SRC_SIZE_X(x)                           (((x) << VIVS_DE_BLOCK8_SRC_SIZE_X__SHIFT) & VIVS_DE_BLOCK8_SRC_SIZE_X__MASK)
+#define VIVS_DE_BLOCK8_SRC_SIZE_Y__MASK                                0xffff0000
+#define VIVS_DE_BLOCK8_SRC_SIZE_Y__SHIFT                       16
+#define VIVS_DE_BLOCK8_SRC_SIZE_Y(x)                           (((x) << VIVS_DE_BLOCK8_SRC_SIZE_Y__SHIFT) & VIVS_DE_BLOCK8_SRC_SIZE_Y__MASK)
+
+#define VIVS_DE_BLOCK8_SRC_COLOR_BG(i0)                               (0x00012ac0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_COLOR_BG__ESIZE                     0x00000004
+#define VIVS_DE_BLOCK8_SRC_COLOR_BG__LEN                       0x00000008
+
+#define VIVS_DE_BLOCK8_ROP(i0)                                (0x00012ae0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_ROP__ESIZE                              0x00000004
+#define VIVS_DE_BLOCK8_ROP__LEN                                        0x00000008
+#define VIVS_DE_BLOCK8_ROP_ROP_FG__MASK                                0x000000ff
+#define VIVS_DE_BLOCK8_ROP_ROP_FG__SHIFT                       0
+#define VIVS_DE_BLOCK8_ROP_ROP_FG(x)                           (((x) << VIVS_DE_BLOCK8_ROP_ROP_FG__SHIFT) & VIVS_DE_BLOCK8_ROP_ROP_FG__MASK)
+#define VIVS_DE_BLOCK8_ROP_ROP_BG__MASK                                0x0000ff00
+#define VIVS_DE_BLOCK8_ROP_ROP_BG__SHIFT                       8
+#define VIVS_DE_BLOCK8_ROP_ROP_BG(x)                           (((x) << VIVS_DE_BLOCK8_ROP_ROP_BG__SHIFT) & VIVS_DE_BLOCK8_ROP_ROP_BG__MASK)
+#define VIVS_DE_BLOCK8_ROP_TYPE__MASK                          0x00300000
+#define VIVS_DE_BLOCK8_ROP_TYPE__SHIFT                         20
+#define VIVS_DE_BLOCK8_ROP_TYPE_ROP2_PATTERN                   0x00000000
+#define VIVS_DE_BLOCK8_ROP_TYPE_ROP2_SOURCE                    0x00100000
+#define VIVS_DE_BLOCK8_ROP_TYPE_ROP3                           0x00200000
+#define VIVS_DE_BLOCK8_ROP_TYPE_ROP4                           0x00300000
+
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL(i0)                      (0x00012b00 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL__ESIZE                    0x00000004
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL__LEN                      0x00000008
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_ENABLE__MASK              0x00000001
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_ENABLE__SHIFT             0
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_ENABLE_OFF                        0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_ENABLE_ON                 0x00000001
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__MASK       0x00ff0000
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__SHIFT      16
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA(x)  (((x) << VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__SHIFT) & VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_SRC_ALPHA__MASK)
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__MASK       0xff000000
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__SHIFT      24
+#define VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA(x)  (((x) << VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__SHIFT) & VIVS_DE_BLOCK8_ALPHA_CONTROL_PE10_GLOBAL_DST_ALPHA__MASK)
+
+#define VIVS_DE_BLOCK8_ALPHA_MODES(i0)                        (0x00012b20 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_ALPHA_MODES__ESIZE                      0x00000004
+#define VIVS_DE_BLOCK8_ALPHA_MODES__LEN                                0x00000008
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_MODE__MASK                0x00000001
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_MODE__SHIFT       0
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_MODE_NORMAL       0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_MODE_INVERSED     0x00000001
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_MODE__MASK                0x00000010
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_MODE__SHIFT       4
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_MODE_NORMAL       0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_MODE_INVERSED     0x00000010
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE__MASK 0x00000300
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE__SHIFT        8
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_NORMAL        0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_GLOBAL        0x00000100
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_SCALED        0x00000200
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE__MASK 0x00003000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE__SHIFT        12
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_NORMAL        0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_GLOBAL        0x00001000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_GLOBAL_DST_ALPHA_MODE_SCALED        0x00002000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY__MASK       0x00010000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY__SHIFT      16
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_SRC_COLOR_MULTIPLY_ENABLE      0x00010000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY__MASK       0x00100000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY__SHIFT      20
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_PE10_DST_COLOR_MULTIPLY_ENABLE      0x00100000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_BLENDING_MODE__MASK     0x07000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_BLENDING_MODE__SHIFT    24
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_BLENDING_MODE(x)                (((x) << VIVS_DE_BLOCK8_ALPHA_MODES_SRC_BLENDING_MODE__SHIFT) & VIVS_DE_BLOCK8_ALPHA_MODES_SRC_BLENDING_MODE__MASK)
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_FACTOR__MASK      0x08000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_FACTOR__SHIFT     27
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_FACTOR_DISABLE    0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_SRC_ALPHA_FACTOR_ENABLE     0x08000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_BLENDING_MODE__MASK     0x70000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_BLENDING_MODE__SHIFT    28
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_BLENDING_MODE(x)                (((x) << VIVS_DE_BLOCK8_ALPHA_MODES_DST_BLENDING_MODE__SHIFT) & VIVS_DE_BLOCK8_ALPHA_MODES_DST_BLENDING_MODE__MASK)
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_FACTOR__MASK      0x80000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_FACTOR__SHIFT     31
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_FACTOR_DISABLE    0x00000000
+#define VIVS_DE_BLOCK8_ALPHA_MODES_DST_ALPHA_FACTOR_ENABLE     0x80000000
+
+#define VIVS_DE_BLOCK8_ADDRESS_U(i0)                          (0x00012b40 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_ADDRESS_U__ESIZE                                0x00000004
+#define VIVS_DE_BLOCK8_ADDRESS_U__LEN                          0x00000008
+
+#define VIVS_DE_BLOCK8_STRIDE_U(i0)                           (0x00012b60 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_STRIDE_U__ESIZE                         0x00000004
+#define VIVS_DE_BLOCK8_STRIDE_U__LEN                           0x00000008
+#define VIVS_DE_BLOCK8_STRIDE_U_STRIDE__MASK                   0x0003ffff
+#define VIVS_DE_BLOCK8_STRIDE_U_STRIDE__SHIFT                  0
+#define VIVS_DE_BLOCK8_STRIDE_U_STRIDE(x)                      (((x) << VIVS_DE_BLOCK8_STRIDE_U_STRIDE__SHIFT) & VIVS_DE_BLOCK8_STRIDE_U_STRIDE__MASK)
+
+#define VIVS_DE_BLOCK8_ADDRESS_V(i0)                          (0x00012b80 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_ADDRESS_V__ESIZE                                0x00000004
+#define VIVS_DE_BLOCK8_ADDRESS_V__LEN                          0x00000008
+
+#define VIVS_DE_BLOCK8_STRIDE_V(i0)                           (0x00012ba0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_STRIDE_V__ESIZE                         0x00000004
+#define VIVS_DE_BLOCK8_STRIDE_V__LEN                           0x00000008
+#define VIVS_DE_BLOCK8_STRIDE_V_STRIDE__MASK                   0x0003ffff
+#define VIVS_DE_BLOCK8_STRIDE_V_STRIDE__SHIFT                  0
+#define VIVS_DE_BLOCK8_STRIDE_V_STRIDE(x)                      (((x) << VIVS_DE_BLOCK8_STRIDE_V_STRIDE__SHIFT) & VIVS_DE_BLOCK8_STRIDE_V_STRIDE__MASK)
+
+#define VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT(i0)                (0x00012bc0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT__ESIZE              0x00000004
+#define VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT__LEN                        0x00000008
+#define VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT_HEIGHT__MASK                0x0000ffff
+#define VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT_HEIGHT__SHIFT       0
+#define VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT_HEIGHT(x)           (((x) << VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT_HEIGHT__SHIFT) & VIVS_DE_BLOCK8_SRC_ROTATION_HEIGHT_HEIGHT__MASK)
+
+#define VIVS_DE_BLOCK8_ROT_ANGLE(i0)                          (0x00012be0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_ROT_ANGLE__ESIZE                                0x00000004
+#define VIVS_DE_BLOCK8_ROT_ANGLE__LEN                          0x00000008
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC__MASK                     0x00000007
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC__SHIFT                    0
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC(x)                                (((x) << VIVS_DE_BLOCK8_ROT_ANGLE_SRC__SHIFT) & VIVS_DE_BLOCK8_ROT_ANGLE_SRC__MASK)
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST__MASK                     0x00000038
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST__SHIFT                    3
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST(x)                                (((x) << VIVS_DE_BLOCK8_ROT_ANGLE_DST__SHIFT) & VIVS_DE_BLOCK8_ROT_ANGLE_DST__MASK)
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MASK                      0x00000100
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST_MASK                      0x00000200
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MIRROR__MASK              0x00003000
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MIRROR__SHIFT             12
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MIRROR(x)                 (((x) << VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MIRROR__SHIFT) & VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MIRROR__MASK)
+#define VIVS_DE_BLOCK8_ROT_ANGLE_SRC_MIRROR_MASK               0x00008000
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST_MIRROR__MASK              0x00030000
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST_MIRROR__SHIFT             16
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST_MIRROR(x)                 (((x) << VIVS_DE_BLOCK8_ROT_ANGLE_DST_MIRROR__SHIFT) & VIVS_DE_BLOCK8_ROT_ANGLE_DST_MIRROR__MASK)
+#define VIVS_DE_BLOCK8_ROT_ANGLE_DST_MIRROR_MASK               0x00080000
+
+#define VIVS_DE_BLOCK8_GLOBAL_SRC_COLOR(i0)                   (0x00012c00 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_GLOBAL_SRC_COLOR__ESIZE                 0x00000004
+#define VIVS_DE_BLOCK8_GLOBAL_SRC_COLOR__LEN                   0x00000008
+
+#define VIVS_DE_BLOCK8_GLOBAL_DEST_COLOR(i0)                  (0x00012c20 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_GLOBAL_DEST_COLOR__ESIZE                        0x00000004
+#define VIVS_DE_BLOCK8_GLOBAL_DEST_COLOR__LEN                  0x00000008
+
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES(i0)                       (0x00012c40 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES__ESIZE             0x00000004
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES__LEN               0x00000008
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY__MASK      0x00000001
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY__SHIFT     0
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_PREMULTIPLY_ENABLE     0x00000001
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY__MASK      0x00000010
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY__SHIFT     4
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY_DISABLE    0x00000000
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_PREMULTIPLY_ENABLE     0x00000010
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY__MASK       0x00000300
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY__SHIFT      8
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_ALPHA       0x00000100
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_SRC_GLOBAL_PREMULTIPLY_COLOR       0x00000200
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY__MASK       0x00100000
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY__SHIFT      20
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY_DISABLE     0x00000000
+#define VIVS_DE_BLOCK8_COLOR_MULTIPLY_MODES_DST_DEMULTIPLY_ENABLE      0x00100000
+
+#define VIVS_DE_BLOCK8_TRANSPARENCY(i0)                               (0x00012c60 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_TRANSPARENCY__ESIZE                     0x00000004
+#define VIVS_DE_BLOCK8_TRANSPARENCY__LEN                       0x00000008
+#define VIVS_DE_BLOCK8_TRANSPARENCY_SOURCE__MASK               0x00000003
+#define VIVS_DE_BLOCK8_TRANSPARENCY_SOURCE__SHIFT              0
+#define VIVS_DE_BLOCK8_TRANSPARENCY_SOURCE_OPAQUE              0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_SOURCE_MASK                        0x00000001
+#define VIVS_DE_BLOCK8_TRANSPARENCY_SOURCE_KEY                 0x00000002
+#define VIVS_DE_BLOCK8_TRANSPARENCY_PATTERN__MASK              0x00000030
+#define VIVS_DE_BLOCK8_TRANSPARENCY_PATTERN__SHIFT             4
+#define VIVS_DE_BLOCK8_TRANSPARENCY_PATTERN_OPAQUE             0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_PATTERN_MASK               0x00000010
+#define VIVS_DE_BLOCK8_TRANSPARENCY_PATTERN_KEY                        0x00000020
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DESTINATION__MASK          0x00000300
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DESTINATION__SHIFT         8
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DESTINATION_OPAQUE         0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DESTINATION_MASK           0x00000100
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DESTINATION_KEY            0x00000200
+#define VIVS_DE_BLOCK8_TRANSPARENCY_TRANSPARENCY_MASK          0x00001000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_SRC_OVERRIDE__MASK     0x00030000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_SRC_OVERRIDE__SHIFT    16
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_SRC_OVERRIDE_DEFAULT   0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_SRC_OVERRIDE_USE_ENABLE        0x00010000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_SRC_OVERRIDE_USE_DISABLE       0x00020000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_PAT_OVERRIDE__MASK     0x00300000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_PAT_OVERRIDE__SHIFT    20
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_PAT_OVERRIDE_DEFAULT   0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_PAT_OVERRIDE_USE_ENABLE        0x00100000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_PAT_OVERRIDE_USE_DISABLE       0x00200000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_DST_OVERRIDE__MASK     0x03000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_DST_OVERRIDE__SHIFT    24
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_DST_OVERRIDE_DEFAULT   0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_DST_OVERRIDE_USE_ENABLE        0x01000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_USE_DST_OVERRIDE_USE_DISABLE       0x02000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_RESOURCE_OVERRIDE_MASK     0x10000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DFB_COLOR_KEY__MASK                0x20000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DFB_COLOR_KEY__SHIFT       29
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DFB_COLOR_KEY_DISABLE      0x00000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DFB_COLOR_KEY_ENABLE       0x20000000
+#define VIVS_DE_BLOCK8_TRANSPARENCY_DFB_COLOR_KEY_MASK         0x80000000
+
+#define VIVS_DE_BLOCK8_CONTROL(i0)                            (0x00012c80 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_CONTROL__ESIZE                          0x00000004
+#define VIVS_DE_BLOCK8_CONTROL__LEN                            0x00000008
+#define VIVS_DE_BLOCK8_CONTROL_YUV__MASK                       0x00000001
+#define VIVS_DE_BLOCK8_CONTROL_YUV__SHIFT                      0
+#define VIVS_DE_BLOCK8_CONTROL_YUV_601                         0x00000000
+#define VIVS_DE_BLOCK8_CONTROL_YUV_709                         0x00000001
+#define VIVS_DE_BLOCK8_CONTROL_YUV_MASK                                0x00000008
+#define VIVS_DE_BLOCK8_CONTROL_UV_SWIZZLE__MASK                        0x00000010
+#define VIVS_DE_BLOCK8_CONTROL_UV_SWIZZLE__SHIFT               4
+#define VIVS_DE_BLOCK8_CONTROL_UV_SWIZZLE_UV                   0x00000000
+#define VIVS_DE_BLOCK8_CONTROL_UV_SWIZZLE_VU                   0x00000010
+#define VIVS_DE_BLOCK8_CONTROL_UV_SWIZZLE_MASK                 0x00000080
+#define VIVS_DE_BLOCK8_CONTROL_YUVRGB__MASK                    0x00000100
+#define VIVS_DE_BLOCK8_CONTROL_YUVRGB__SHIFT                   8
+#define VIVS_DE_BLOCK8_CONTROL_YUVRGB_DISABLE                  0x00000000
+#define VIVS_DE_BLOCK8_CONTROL_YUVRGB_ENABLE                   0x00000100
+#define VIVS_DE_BLOCK8_CONTROL_YUVRGB_MASK                     0x00000800
+
+#define VIVS_DE_BLOCK8_SRC_COLOR_KEY_HIGH(i0)                 (0x00012ca0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_COLOR_KEY_HIGH__ESIZE               0x00000004
+#define VIVS_DE_BLOCK8_SRC_COLOR_KEY_HIGH__LEN                 0x00000008
+
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG(i0)                      (0x00012cc0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG__ESIZE                    0x00000004
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG__LEN                      0x00000008
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MULTI_TILED__MASK         0x00000001
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MULTI_TILED__SHIFT                0
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MULTI_TILED_DISABLE       0x00000000
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MULTI_TILED_ENABLE                0x00000001
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_SUPER_TILED__MASK         0x00000008
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_SUPER_TILED__SHIFT                3
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_SUPER_TILED_DISABLE       0x00000000
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_SUPER_TILED_ENABLE                0x00000008
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MINOR_TILED__MASK         0x00000100
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MINOR_TILED__SHIFT                8
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MINOR_TILED_DISABLE       0x00000000
+#define VIVS_DE_BLOCK8_SRC_EX_CONFIG_MINOR_TILED_ENABLE                0x00000100
+
+#define VIVS_DE_BLOCK8_SRC_EX_ADDRESS(i0)                     (0x00012ce0 + 0x4*(i0))
+#define VIVS_DE_BLOCK8_SRC_EX_ADDRESS__ESIZE                   0x00000004
+#define VIVS_DE_BLOCK8_SRC_EX_ADDRESS__LEN                     0x00000008
+
+
+#endif /* STATE_2D_XML */
diff --git a/tests/etnaviv/write_bmp.c b/tests/etnaviv/write_bmp.c
new file mode 100644 (file)
index 0000000..7ae0646
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2011      Luc Verhaegen <libv@codethink.co.uk>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ */
+/*
+ * Quick 'n Dirty bitmap dumper.
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+
+#include "write_bmp.h"
+
+#define FILENAME_SIZE 1024
+
+struct bmp_header {
+       unsigned short magic;
+       unsigned int size;
+       unsigned int unused;
+       unsigned int start;
+} __attribute__((__packed__));
+
+struct dib_header {
+       unsigned int size;
+       unsigned int width;
+       unsigned int height;
+       unsigned short planes;
+       unsigned short bpp;
+       unsigned int compression;
+       unsigned int data_size;
+       unsigned int h_res;
+       unsigned int v_res;
+       unsigned int colours;
+       unsigned int important_colours;
+       unsigned int red_mask;
+       unsigned int green_mask;
+       unsigned int blue_mask;
+       unsigned int alpha_mask;
+       unsigned int colour_space;
+       unsigned int unused[12];
+} __attribute__((__packed__));
+
+static int
+bmp_header_write(int fd, int width, int height, int bgra, int noflip, int alpha)
+{
+       struct bmp_header bmp_header = {
+               .magic = 0x4d42,
+               .size = (width * height * 4) +
+               sizeof(struct bmp_header) + sizeof(struct dib_header),
+               .start = sizeof(struct bmp_header) + sizeof(struct dib_header),
+       };
+       struct dib_header dib_header = {
+               .size = sizeof(struct dib_header),
+               .width = width,
+               .height = noflip ? -height : height,
+               .planes = 1,
+               .bpp = 32,
+               .compression = 3,
+               .data_size = 4 * width * height,
+               .h_res = 0xB13,
+               .v_res = 0xB13,
+               .colours = 0,
+               .important_colours = 0,
+               .red_mask = 0x000000FF,
+               .green_mask = 0x0000FF00,
+               .blue_mask = 0x00FF0000,
+               .alpha_mask = alpha ? 0xFF000000 : 0x00000000,
+               .colour_space = 0x57696E20,
+       };
+
+       if (bgra) {
+               dib_header.red_mask = 0x00FF0000;
+               dib_header.blue_mask = 0x000000FF;
+       }
+
+       write(fd, &bmp_header, sizeof(struct bmp_header));
+       write(fd, &dib_header, sizeof(struct dib_header));
+
+       return 0;
+}
+
+void
+bmp_dump32(char *buffer, unsigned width, unsigned height, bool bgra, const char *filename)
+{
+       int fd;
+
+       fd = open(filename, O_WRONLY| O_TRUNC | O_CREAT, 0666);
+       if (fd == -1) {
+               printf("Failed to open %s: %s\n", filename, strerror(errno));
+               return;
+       }
+
+       bmp_header_write(fd, width, height, bgra, false, true);
+
+       write(fd, buffer, width * height * 4);
+}
+
+void
+bmp_dump32_noflip(char *buffer, unsigned width, unsigned height, bool bgra, const char *filename)
+{
+       int fd;
+
+       fd = open(filename, O_WRONLY| O_TRUNC | O_CREAT, 0666);
+       if (fd == -1) {
+               printf("Failed to open %s: %s\n", filename, strerror(errno));
+               return;
+       }
+
+       bmp_header_write(fd, width, height, bgra, true, true);
+
+       write(fd, buffer, width * height * 4);
+}
+
+void
+bmp_dump32_ex(char *buffer, unsigned width, unsigned height, bool flip, bool bgra, bool alpha, const char *filename)
+{
+       int fd;
+
+       fd = open(filename, O_WRONLY| O_TRUNC | O_CREAT, 0666);
+       if (fd == -1) {
+               printf("Failed to open %s: %s\n", filename, strerror(errno));
+               return;
+       }
+
+       bmp_header_write(fd, width, height, bgra, flip, alpha);
+
+       write(fd, buffer, width * height * 4);
+}
diff --git a/tests/etnaviv/write_bmp.h b/tests/etnaviv/write_bmp.h
new file mode 100644 (file)
index 0000000..667fa87
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2011      Luc Verhaegen <libv@codethink.co.uk>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ */
+#ifndef BMP_DUMP_H
+#define BMP_DUMP_H 1
+#include <stdbool.h>
+/* write 32-bit image (y axis upwards) */
+void bmp_dump32(char *buffer, unsigned width, unsigned height, bool bgra, const char *filename);
+/* write 32-bit image (y axis downwards) */
+void bmp_dump32_noflip(char *buffer, unsigned width, unsigned height, bool bgra, const char *filename);
+/* write 32-bit image */
+void bmp_dump32_ex(char *buffer, unsigned width, unsigned height, bool flip, bool bgra, bool alpha, const char *filename);
+
+#endif /* BMP_DUMP_H */