diff mbox

[2/2] libdrm: add etnaviv tests

Message ID 1472541291-8770-3-git-send-email-christian.gmeiner@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Christian Gmeiner Aug. 30, 2016, 7:14 a.m. UTC
From: The etnaviv authors <dri-devel@lists.freedesktop.org>

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>
---
 .gitignore                              |    3 +
 configure.ac                            |    1 +
 tests/Makefile.am                       |    4 +
 tests/etnaviv/Makefile.am               |   41 +
 tests/etnaviv/cmdstream.xml.h           |  218 +++++
 tests/etnaviv/etnaviv_2d_test.c         |  238 +++++
 tests/etnaviv/etnaviv_bo_cache_test.c   |  122 +++
 tests/etnaviv/etnaviv_cmd_stream_test.c |  123 +++
 tests/etnaviv/state.xml.h               |  348 ++++++++
 tests/etnaviv/state_2d.xml.h            | 1473 +++++++++++++++++++++++++++++++
 tests/etnaviv/write_bmp.c               |  152 ++++
 tests/etnaviv/write_bmp.h               |   34 +
 12 files changed, 2757 insertions(+)
 create mode 100644 tests/etnaviv/Makefile.am
 create mode 100644 tests/etnaviv/cmdstream.xml.h
 create mode 100644 tests/etnaviv/etnaviv_2d_test.c
 create mode 100644 tests/etnaviv/etnaviv_bo_cache_test.c
 create mode 100644 tests/etnaviv/etnaviv_cmd_stream_test.c
 create mode 100644 tests/etnaviv/state.xml.h
 create mode 100644 tests/etnaviv/state_2d.xml.h
 create mode 100644 tests/etnaviv/write_bmp.c
 create mode 100644 tests/etnaviv/write_bmp.h

Comments

Daniel Vetter Aug. 30, 2016, 9:08 a.m. UTC | #1
On Tue, Aug 30, 2016 at 09:14:51AM +0200, Christian Gmeiner wrote:
> From: The etnaviv authors <dri-devel@lists.freedesktop.org>
> 
> 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.

igt (now at a new location at
https://cgit.freedesktop.org/drm/igt-gpu-tools/) would be a nice place for
these I think, if you want to participate there. vc4 has tests in there,
and collabora is porting a lot of the kms tests to be generic (so that
they can be run on any kms driver). Then you could just run those tests on
any driver and have a reasonable assurance you didn't break the world.

But up to you really.
-Daniel
> 
> Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> ---
>  .gitignore                              |    3 +
>  configure.ac                            |    1 +
>  tests/Makefile.am                       |    4 +
>  tests/etnaviv/Makefile.am               |   41 +
>  tests/etnaviv/cmdstream.xml.h           |  218 +++++
>  tests/etnaviv/etnaviv_2d_test.c         |  238 +++++
>  tests/etnaviv/etnaviv_bo_cache_test.c   |  122 +++
>  tests/etnaviv/etnaviv_cmd_stream_test.c |  123 +++
>  tests/etnaviv/state.xml.h               |  348 ++++++++
>  tests/etnaviv/state_2d.xml.h            | 1473 +++++++++++++++++++++++++++++++
>  tests/etnaviv/write_bmp.c               |  152 ++++
>  tests/etnaviv/write_bmp.h               |   34 +
>  12 files changed, 2757 insertions(+)
>  create mode 100644 tests/etnaviv/Makefile.am
>  create mode 100644 tests/etnaviv/cmdstream.xml.h
>  create mode 100644 tests/etnaviv/etnaviv_2d_test.c
>  create mode 100644 tests/etnaviv/etnaviv_bo_cache_test.c
>  create mode 100644 tests/etnaviv/etnaviv_cmd_stream_test.c
>  create mode 100644 tests/etnaviv/state.xml.h
>  create mode 100644 tests/etnaviv/state_2d.xml.h
>  create mode 100644 tests/etnaviv/write_bmp.c
>  create mode 100644 tests/etnaviv/write_bmp.h
> 
> diff --git a/.gitignore b/.gitignore
> index 3226b3a..d51e619 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -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
> diff --git a/configure.ac b/configure.ac
> index 64f3e6c..330358a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -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])
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 58feb12..4a499e4 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -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
> index 0000000..0631864
> --- /dev/null
> +++ b/tests/etnaviv/Makefile.am
> @@ -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
> index 0000000..844f829
> --- /dev/null
> +++ b/tests/etnaviv/cmdstream.xml.h
> @@ -0,0 +1,218 @@
> +#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:
> +- /home/orion/projects/etna_viv/rnndb/cmdstream.xml (  12589 bytes, from 2013-09-01 10:53:22)
> +- /home/orion/projects/etna_viv/rnndb/common.xml    (  18379 bytes, from 2014-01-27 15:58:05)
> +
> +Copyright (C) 2013
> +*/
> +
> +
> +#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
> index 0000000..f18c289
> --- /dev/null
> +++ b/tests/etnaviv/etnaviv_2d_test.c
> @@ -0,0 +1,238 @@
> +/*
> + * 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 fail;
> +	}
> +
> +	/* TODO: we assume that core 0 is a 2D capable one */
> +	gpu = etna_gpu_new(dev, 0);
> +	if (!gpu) {
> +		ret = 3;
> +		goto fail;
> +	}
> +
> +	pipe = etna_pipe_new(gpu, ETNA_PIPE_2D);
> +	if (!pipe) {
> +		ret = 4;
> +		goto fail;
> +	}
> +
> +	bmp = etna_bo_new(dev, bmp_size, ETNA_BO_UNCACHED);
> +	if (!bmp) {
> +		ret = 5;
> +		goto fail;
> +	}
> +	memset(etna_bo_map(bmp), 0, bmp_size);
> +
> +	stream = etna_cmd_stream_new(pipe, 0x300, NULL, NULL);
> +	if (!stream) {
> +		ret = 6;
> +		goto fail;
> +	}
> +
> +	/* 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");
> +
> +fail:
> +	if (stream)
> +		etna_cmd_stream_del(stream);
> +
> +	if (pipe)
> +		etna_pipe_del(pipe);
> +
> +	if (gpu)
> +		etna_gpu_del(gpu);
> +
> +	if (dev)
> +		etna_device_del(dev);
> +
> +	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
> index 0000000..1f18573
> --- /dev/null
> +++ b/tests/etnaviv/etnaviv_bo_cache_test.c
> @@ -0,0 +1,122 @@
> +/*
> + * 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 fail;
> +	}
> +
> +	test_cache(dev);
> +	test_size_rounding(dev);
> +
> +fail:
> +	if (dev)
> +		etna_device_del(dev);
> +
> +	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
> index 0000000..4188eff
> --- /dev/null
> +++ b/tests/etnaviv/etnaviv_cmd_stream_test.c
> @@ -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
> index 0000000..e7b36df
> --- /dev/null
> +++ b/tests/etnaviv/state.xml.h
> @@ -0,0 +1,348 @@
> +#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:
> +- /home/orion/projects/etna_viv/rnndb/state.xml    (  18526 bytes, from 2013-09-11 16:52:32)
> +- /home/orion/projects/etna_viv/rnndb/common.xml   (  18379 bytes, from 2014-01-27 15:58:05)
> +- /home/orion/projects/etna_viv/rnndb/state_hi.xml (  22236 bytes, from 2014-01-27 15:56:46)
> +- /home/orion/projects/etna_viv/rnndb/state_2d.xml (  51191 bytes, from 2013-10-04 06:36:55)
> +- /home/orion/projects/etna_viv/rnndb/state_3d.xml (  54570 bytes, from 2013-10-12 15:25:03)
> +- /home/orion/projects/etna_viv/rnndb/state_vg.xml (   5942 bytes, from 2013-09-01 10:53:22)
> +
> +Copyright (C) 2013
> +*/
> +
> +
> +#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_PEMMU				0x00000002
> +
> +#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
> index 0000000..fb22cfa
> --- /dev/null
> +++ b/tests/etnaviv/state_2d.xml.h
> @@ -0,0 +1,1473 @@
> +#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:
> +- /home/orion/projects/etna_viv/rnndb/state.xml    (  18526 bytes, from 2013-09-11 16:52:32)
> +- /home/orion/projects/etna_viv/rnndb/common.xml   (  18379 bytes, from 2014-01-27 15:58:05)
> +- /home/orion/projects/etna_viv/rnndb/state_hi.xml (  22236 bytes, from 2014-01-27 15:56:46)
> +- /home/orion/projects/etna_viv/rnndb/state_2d.xml (  51191 bytes, from 2013-10-04 06:36:55)
> +- /home/orion/projects/etna_viv/rnndb/state_3d.xml (  54570 bytes, from 2013-10-12 15:25:03)
> +- /home/orion/projects/etna_viv/rnndb/state_vg.xml (   5942 bytes, from 2013-09-01 10:53:22)
> +
> +Copyright (C) 2013
> +*/
> +
> +
> +#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
> index 0000000..40de84e
> --- /dev/null
> +++ b/tests/etnaviv/write_bmp.c
> @@ -0,0 +1,152 @@
> +/*
> + * 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
> index 0000000..667fa87
> --- /dev/null
> +++ b/tests/etnaviv/write_bmp.h
> @@ -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 */
> -- 
> 2.7.4
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Emil Velikov Aug. 30, 2016, 1:15 p.m. UTC | #2
On 30 August 2016 at 10:08, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Tue, Aug 30, 2016 at 09:14:51AM +0200, Christian Gmeiner wrote:
>> From: The etnaviv authors <dri-devel@lists.freedesktop.org>
>>
>> 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.
>
> igt (now at a new location at
> https://cgit.freedesktop.org/drm/igt-gpu-tools/) would be a nice place for
> these I think, if you want to participate there. vc4 has tests in there,
> and collabora is porting a lot of the kms tests to be generic (so that
> they can be run on any kms driver). Then you could just run those tests on
> any driver and have a reasonable assurance you didn't break the world.
>
Having things in IGT might be better indeed. For the moment it might
be better to land this as-is and move things in due time while add new
tests directly in IGT ?

Other than that - a couple of trivial questions/suggestions. Similar
to the patch 1/2 ones - can be done as follow-up if needed.

>> --- /dev/null
>> +++ b/tests/etnaviv/cmdstream.xml.h

>> +The rules-ng-ng source files this header was generated from are:
>> +- /home/orion/projects/etna_viv/rnndb/cmdstream.xml (  12589 bytes, from 2013-09-01 10:53:22)
>> +- /home/orion/projects/etna_viv/rnndb/common.xml    (  18379 bytes, from 2014-01-27 15:58:05)
Always wondered about this - can we fix rnn to not print the full path
but just files or rnndb/filename.xml ?

>> +Copyright (C) 2013
There is something funny here - currently we're not 2013 and the
copyright holders are missing. Guess something went bonkers in rnn ?

>> +int main(int argc, char *argv[])
>> +{

>> +fail:
>> +     if (stream)
>> +             etna_cmd_stream_del(stream);
>> +
>> +     if (pipe)
>> +             etna_pipe_del(pipe);
>> +
>> +     if (gpu)
>> +             etna_gpu_del(gpu);
>> +
>> +     if (dev)
>> +             etna_device_del(dev);
>> +
>> +     close(fd);
>> +
Feel free to ignore: you can use separate labels and drop all the if
checks. Also s/fail/out/ since this is not an error path.
Same comment goes the whole patch.

Thanks
Emil
Rob Clark Aug. 30, 2016, 2:40 p.m. UTC | #3
On Tue, Aug 30, 2016 at 5:08 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Tue, Aug 30, 2016 at 09:14:51AM +0200, Christian Gmeiner wrote:
>> From: The etnaviv authors <dri-devel@lists.freedesktop.org>
>>
>> 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.
>
> igt (now at a new location at
> https://cgit.freedesktop.org/drm/igt-gpu-tools/) would be a nice place for
> these I think, if you want to participate there. vc4 has tests in there,
> and collabora is porting a lot of the kms tests to be generic (so that
> they can be run on any kms driver). Then you could just run those tests on
> any driver and have a reasonable assurance you didn't break the world.

well, I guess you wouldn't run these tests on, for example radeon hw ;-)

but using common framework isn't a horrible idea..  one of these days
I'd like to move my few msmtest's to igt.. but, $bigger_fires ;-)

BR,
-R

> But up to you really.
> -Daniel
>>
>> Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
>> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
>> ---
>>  .gitignore                              |    3 +
>>  configure.ac                            |    1 +
>>  tests/Makefile.am                       |    4 +
>>  tests/etnaviv/Makefile.am               |   41 +
>>  tests/etnaviv/cmdstream.xml.h           |  218 +++++
>>  tests/etnaviv/etnaviv_2d_test.c         |  238 +++++
>>  tests/etnaviv/etnaviv_bo_cache_test.c   |  122 +++
>>  tests/etnaviv/etnaviv_cmd_stream_test.c |  123 +++
>>  tests/etnaviv/state.xml.h               |  348 ++++++++
>>  tests/etnaviv/state_2d.xml.h            | 1473 +++++++++++++++++++++++++++++++
>>  tests/etnaviv/write_bmp.c               |  152 ++++
>>  tests/etnaviv/write_bmp.h               |   34 +
>>  12 files changed, 2757 insertions(+)
>>  create mode 100644 tests/etnaviv/Makefile.am
>>  create mode 100644 tests/etnaviv/cmdstream.xml.h
>>  create mode 100644 tests/etnaviv/etnaviv_2d_test.c
>>  create mode 100644 tests/etnaviv/etnaviv_bo_cache_test.c
>>  create mode 100644 tests/etnaviv/etnaviv_cmd_stream_test.c
>>  create mode 100644 tests/etnaviv/state.xml.h
>>  create mode 100644 tests/etnaviv/state_2d.xml.h
>>  create mode 100644 tests/etnaviv/write_bmp.c
>>  create mode 100644 tests/etnaviv/write_bmp.h
>>
>> diff --git a/.gitignore b/.gitignore
>> index 3226b3a..d51e619 100644
>> --- a/.gitignore
>> +++ b/.gitignore
>> @@ -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
>> diff --git a/configure.ac b/configure.ac
>> index 64f3e6c..330358a 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -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])
>> diff --git a/tests/Makefile.am b/tests/Makefile.am
>> index 58feb12..4a499e4 100644
>> --- a/tests/Makefile.am
>> +++ b/tests/Makefile.am
>> @@ -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
>> index 0000000..0631864
>> --- /dev/null
>> +++ b/tests/etnaviv/Makefile.am
>> @@ -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
>> index 0000000..844f829
>> --- /dev/null
>> +++ b/tests/etnaviv/cmdstream.xml.h
>> @@ -0,0 +1,218 @@
>> +#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:
>> +- /home/orion/projects/etna_viv/rnndb/cmdstream.xml (  12589 bytes, from 2013-09-01 10:53:22)
>> +- /home/orion/projects/etna_viv/rnndb/common.xml    (  18379 bytes, from 2014-01-27 15:58:05)
>> +
>> +Copyright (C) 2013
>> +*/
>> +
>> +
>> +#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
>> index 0000000..f18c289
>> --- /dev/null
>> +++ b/tests/etnaviv/etnaviv_2d_test.c
>> @@ -0,0 +1,238 @@
>> +/*
>> + * 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 fail;
>> +     }
>> +
>> +     /* TODO: we assume that core 0 is a 2D capable one */
>> +     gpu = etna_gpu_new(dev, 0);
>> +     if (!gpu) {
>> +             ret = 3;
>> +             goto fail;
>> +     }
>> +
>> +     pipe = etna_pipe_new(gpu, ETNA_PIPE_2D);
>> +     if (!pipe) {
>> +             ret = 4;
>> +             goto fail;
>> +     }
>> +
>> +     bmp = etna_bo_new(dev, bmp_size, ETNA_BO_UNCACHED);
>> +     if (!bmp) {
>> +             ret = 5;
>> +             goto fail;
>> +     }
>> +     memset(etna_bo_map(bmp), 0, bmp_size);
>> +
>> +     stream = etna_cmd_stream_new(pipe, 0x300, NULL, NULL);
>> +     if (!stream) {
>> +             ret = 6;
>> +             goto fail;
>> +     }
>> +
>> +     /* 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");
>> +
>> +fail:
>> +     if (stream)
>> +             etna_cmd_stream_del(stream);
>> +
>> +     if (pipe)
>> +             etna_pipe_del(pipe);
>> +
>> +     if (gpu)
>> +             etna_gpu_del(gpu);
>> +
>> +     if (dev)
>> +             etna_device_del(dev);
>> +
>> +     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
>> index 0000000..1f18573
>> --- /dev/null
>> +++ b/tests/etnaviv/etnaviv_bo_cache_test.c
>> @@ -0,0 +1,122 @@
>> +/*
>> + * 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 fail;
>> +     }
>> +
>> +     test_cache(dev);
>> +     test_size_rounding(dev);
>> +
>> +fail:
>> +     if (dev)
>> +             etna_device_del(dev);
>> +
>> +     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
>> index 0000000..4188eff
>> --- /dev/null
>> +++ b/tests/etnaviv/etnaviv_cmd_stream_test.c
>> @@ -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
>> index 0000000..e7b36df
>> --- /dev/null
>> +++ b/tests/etnaviv/state.xml.h
>> @@ -0,0 +1,348 @@
>> +#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:
>> +- /home/orion/projects/etna_viv/rnndb/state.xml    (  18526 bytes, from 2013-09-11 16:52:32)
>> +- /home/orion/projects/etna_viv/rnndb/common.xml   (  18379 bytes, from 2014-01-27 15:58:05)
>> +- /home/orion/projects/etna_viv/rnndb/state_hi.xml (  22236 bytes, from 2014-01-27 15:56:46)
>> +- /home/orion/projects/etna_viv/rnndb/state_2d.xml (  51191 bytes, from 2013-10-04 06:36:55)
>> +- /home/orion/projects/etna_viv/rnndb/state_3d.xml (  54570 bytes, from 2013-10-12 15:25:03)
>> +- /home/orion/projects/etna_viv/rnndb/state_vg.xml (   5942 bytes, from 2013-09-01 10:53:22)
>> +
>> +Copyright (C) 2013
>> +*/
>> +
>> +
>> +#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_PEMMU                                0x00000002
>> +
>> +#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
>> index 0000000..fb22cfa
>> --- /dev/null
>> +++ b/tests/etnaviv/state_2d.xml.h
>> @@ -0,0 +1,1473 @@
>> +#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:
>> +- /home/orion/projects/etna_viv/rnndb/state.xml    (  18526 bytes, from 2013-09-11 16:52:32)
>> +- /home/orion/projects/etna_viv/rnndb/common.xml   (  18379 bytes, from 2014-01-27 15:58:05)
>> +- /home/orion/projects/etna_viv/rnndb/state_hi.xml (  22236 bytes, from 2014-01-27 15:56:46)
>> +- /home/orion/projects/etna_viv/rnndb/state_2d.xml (  51191 bytes, from 2013-10-04 06:36:55)
>> +- /home/orion/projects/etna_viv/rnndb/state_3d.xml (  54570 bytes, from 2013-10-12 15:25:03)
>> +- /home/orion/projects/etna_viv/rnndb/state_vg.xml (   5942 bytes, from 2013-09-01 10:53:22)
>> +
>> +Copyright (C) 2013
>> +*/
>> +
>> +
>> +#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
>> index 0000000..40de84e
>> --- /dev/null
>> +++ b/tests/etnaviv/write_bmp.c
>> @@ -0,0 +1,152 @@
>> +/*
>> + * 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
>> index 0000000..667fa87
>> --- /dev/null
>> +++ b/tests/etnaviv/write_bmp.h
>> @@ -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 */
>> --
>> 2.7.4
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Daniel Vetter Aug. 30, 2016, 3:53 p.m. UTC | #4
On Tue, Aug 30, 2016 at 4:40 PM, Rob Clark <robdclark@gmail.com> wrote:
> On Tue, Aug 30, 2016 at 5:08 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Tue, Aug 30, 2016 at 09:14:51AM +0200, Christian Gmeiner wrote:
>>> From: The etnaviv authors <dri-devel@lists.freedesktop.org>
>>>
>>> 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.
>>
>> igt (now at a new location at
>> https://cgit.freedesktop.org/drm/igt-gpu-tools/) would be a nice place for
>> these I think, if you want to participate there. vc4 has tests in there,
>> and collabora is porting a lot of the kms tests to be generic (so that
>> they can be run on any kms driver). Then you could just run those tests on
>> any driver and have a reasonable assurance you didn't break the world.
>
> well, I guess you wouldn't run these tests on, for example radeon hw ;-)

The generic kms tests in igt should run perfectly fine on radeon. Not
that I've tried yet (I dont have a radeon throw-away box for testing).
-Daniel
Christian Gmeiner Sept. 6, 2016, 4:01 p.m. UTC | #5
Hi Daniel,


2016-08-30 11:08 GMT+02:00 Daniel Vetter <daniel@ffwll.ch>:
> On Tue, Aug 30, 2016 at 09:14:51AM +0200, Christian Gmeiner wrote:
>> From: The etnaviv authors <dri-devel@lists.freedesktop.org>
>>
>> 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.
>
> igt (now at a new location at
> https://cgit.freedesktop.org/drm/igt-gpu-tools/) would be a nice place for
> these I think, if you want to participate there. vc4 has tests in there,
> and collabora is porting a lot of the kms tests to be generic (so that
> they can be run on any kms driver). Then you could just run those tests on
> any driver and have a reasonable assurance you didn't break the world.
>
> But up to you really.

I will have a look at igt and see what can be done for etnaviv but for the
the moment I want to land the libdrm changes.

greets
--
Christian Gmeiner, MSc

https://soundcloud.com/christian-gmeiner
Christian Gmeiner Sept. 6, 2016, 4:03 p.m. UTC | #6
Hi Emil,

again thanks for the review.


2016-08-30 15:15 GMT+02:00 Emil Velikov <emil.l.velikov@gmail.com>:
> On 30 August 2016 at 10:08, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Tue, Aug 30, 2016 at 09:14:51AM +0200, Christian Gmeiner wrote:
>>> From: The etnaviv authors <dri-devel@lists.freedesktop.org>
>>>
>>> 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.
>>
>> igt (now at a new location at
>> https://cgit.freedesktop.org/drm/igt-gpu-tools/) would be a nice place for
>> these I think, if you want to participate there. vc4 has tests in there,
>> and collabora is porting a lot of the kms tests to be generic (so that
>> they can be run on any kms driver). Then you could just run those tests on
>> any driver and have a reasonable assurance you didn't break the world.
>>
> Having things in IGT might be better indeed. For the moment it might
> be better to land this as-is and move things in due time while add new
> tests directly in IGT ?
>
> Other than that - a couple of trivial questions/suggestions. Similar
> to the patch 1/2 ones - can be done as follow-up if needed.
>

Will send a v2 soon.

>>> --- /dev/null
>>> +++ b/tests/etnaviv/cmdstream.xml.h
>
>>> +The rules-ng-ng source files this header was generated from are:
>>> +- /home/orion/projects/etna_viv/rnndb/cmdstream.xml (  12589 bytes, from 2013-09-01 10:53:22)
>>> +- /home/orion/projects/etna_viv/rnndb/common.xml    (  18379 bytes, from 2014-01-27 15:58:05)
> Always wondered about this - can we fix rnn to not print the full path
> but just files or rnndb/filename.xml ?
>
>>> +Copyright (C) 2013
> There is something funny here - currently we're not 2013 and the
> copyright holders are missing. Guess something went bonkers in rnn ?
>

Good catch - fixed in the source repo and will be corrected in v2.

>>> +int main(int argc, char *argv[])
>>> +{
>
>>> +fail:
>>> +     if (stream)
>>> +             etna_cmd_stream_del(stream);
>>> +
>>> +     if (pipe)
>>> +             etna_pipe_del(pipe);
>>> +
>>> +     if (gpu)
>>> +             etna_gpu_del(gpu);
>>> +
>>> +     if (dev)
>>> +             etna_device_del(dev);
>>> +
>>> +     close(fd);
>>> +
> Feel free to ignore: you can use separate labels and drop all the if
> checks. Also s/fail/out/ since this is not an error path.
> Same comment goes the whole patch.
>

Sure why not.

thanks
--
Christian Gmeiner, MSc

https://soundcloud.com/christian-gmeiner
diff mbox

Patch

diff --git a/.gitignore b/.gitignore
index 3226b3a..d51e619 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/configure.ac b/configure.ac
index 64f3e6c..330358a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 58feb12..4a499e4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
index 0000000..0631864
--- /dev/null
+++ b/tests/etnaviv/Makefile.am
@@ -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
index 0000000..844f829
--- /dev/null
+++ b/tests/etnaviv/cmdstream.xml.h
@@ -0,0 +1,218 @@ 
+#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:
+- /home/orion/projects/etna_viv/rnndb/cmdstream.xml (  12589 bytes, from 2013-09-01 10:53:22)
+- /home/orion/projects/etna_viv/rnndb/common.xml    (  18379 bytes, from 2014-01-27 15:58:05)
+
+Copyright (C) 2013
+*/
+
+
+#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
index 0000000..f18c289
--- /dev/null
+++ b/tests/etnaviv/etnaviv_2d_test.c
@@ -0,0 +1,238 @@ 
+/*
+ * 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 fail;
+	}
+
+	/* TODO: we assume that core 0 is a 2D capable one */
+	gpu = etna_gpu_new(dev, 0);
+	if (!gpu) {
+		ret = 3;
+		goto fail;
+	}
+
+	pipe = etna_pipe_new(gpu, ETNA_PIPE_2D);
+	if (!pipe) {
+		ret = 4;
+		goto fail;
+	}
+
+	bmp = etna_bo_new(dev, bmp_size, ETNA_BO_UNCACHED);
+	if (!bmp) {
+		ret = 5;
+		goto fail;
+	}
+	memset(etna_bo_map(bmp), 0, bmp_size);
+
+	stream = etna_cmd_stream_new(pipe, 0x300, NULL, NULL);
+	if (!stream) {
+		ret = 6;
+		goto fail;
+	}
+
+	/* 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");
+
+fail:
+	if (stream)
+		etna_cmd_stream_del(stream);
+
+	if (pipe)
+		etna_pipe_del(pipe);
+
+	if (gpu)
+		etna_gpu_del(gpu);
+
+	if (dev)
+		etna_device_del(dev);
+
+	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
index 0000000..1f18573
--- /dev/null
+++ b/tests/etnaviv/etnaviv_bo_cache_test.c
@@ -0,0 +1,122 @@ 
+/*
+ * 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 fail;
+	}
+
+	test_cache(dev);
+	test_size_rounding(dev);
+
+fail:
+	if (dev)
+		etna_device_del(dev);
+
+	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
index 0000000..4188eff
--- /dev/null
+++ b/tests/etnaviv/etnaviv_cmd_stream_test.c
@@ -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
index 0000000..e7b36df
--- /dev/null
+++ b/tests/etnaviv/state.xml.h
@@ -0,0 +1,348 @@ 
+#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:
+- /home/orion/projects/etna_viv/rnndb/state.xml    (  18526 bytes, from 2013-09-11 16:52:32)
+- /home/orion/projects/etna_viv/rnndb/common.xml   (  18379 bytes, from 2014-01-27 15:58:05)
+- /home/orion/projects/etna_viv/rnndb/state_hi.xml (  22236 bytes, from 2014-01-27 15:56:46)
+- /home/orion/projects/etna_viv/rnndb/state_2d.xml (  51191 bytes, from 2013-10-04 06:36:55)
+- /home/orion/projects/etna_viv/rnndb/state_3d.xml (  54570 bytes, from 2013-10-12 15:25:03)
+- /home/orion/projects/etna_viv/rnndb/state_vg.xml (   5942 bytes, from 2013-09-01 10:53:22)
+
+Copyright (C) 2013
+*/
+
+
+#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_PEMMU				0x00000002
+
+#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
index 0000000..fb22cfa
--- /dev/null
+++ b/tests/etnaviv/state_2d.xml.h
@@ -0,0 +1,1473 @@ 
+#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:
+- /home/orion/projects/etna_viv/rnndb/state.xml    (  18526 bytes, from 2013-09-11 16:52:32)
+- /home/orion/projects/etna_viv/rnndb/common.xml   (  18379 bytes, from 2014-01-27 15:58:05)
+- /home/orion/projects/etna_viv/rnndb/state_hi.xml (  22236 bytes, from 2014-01-27 15:56:46)
+- /home/orion/projects/etna_viv/rnndb/state_2d.xml (  51191 bytes, from 2013-10-04 06:36:55)
+- /home/orion/projects/etna_viv/rnndb/state_3d.xml (  54570 bytes, from 2013-10-12 15:25:03)
+- /home/orion/projects/etna_viv/rnndb/state_vg.xml (   5942 bytes, from 2013-09-01 10:53:22)
+
+Copyright (C) 2013
+*/
+
+
+#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
index 0000000..40de84e
--- /dev/null
+++ b/tests/etnaviv/write_bmp.c
@@ -0,0 +1,152 @@ 
+/*
+ * 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
index 0000000..667fa87
--- /dev/null
+++ b/tests/etnaviv/write_bmp.h
@@ -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 */