mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-20 07:00:11 +01:00
libdrm: add etnaviv tests
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>
This commit is contained in:
parent
95e2cc6a80
commit
0659558f64
12 changed files with 2832 additions and 0 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -102,4 +102,7 @@ tests/radeon/radeon_ttm
|
||||||
tests/exynos/exynos_fimg2d_event
|
tests/exynos/exynos_fimg2d_event
|
||||||
tests/exynos/exynos_fimg2d_perf
|
tests/exynos/exynos_fimg2d_perf
|
||||||
tests/exynos/exynos_fimg2d_test
|
tests/exynos/exynos_fimg2d_test
|
||||||
|
tests/etnaviv/etnaviv_2d_test
|
||||||
|
tests/etnaviv/etnaviv_cmd_stream_test
|
||||||
|
tests/etnaviv/etnaviv_bo_cache_test
|
||||||
man/*.3
|
man/*.3
|
||||||
|
|
|
||||||
|
|
@ -551,6 +551,7 @@ AC_CONFIG_FILES([
|
||||||
tests/exynos/Makefile
|
tests/exynos/Makefile
|
||||||
tests/tegra/Makefile
|
tests/tegra/Makefile
|
||||||
tests/nouveau/Makefile
|
tests/nouveau/Makefile
|
||||||
|
tests/etnaviv/Makefile
|
||||||
tests/util/Makefile
|
tests/util/Makefile
|
||||||
man/Makefile
|
man/Makefile
|
||||||
libdrm.pc])
|
libdrm.pc])
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,10 @@ if HAVE_TEGRA
|
||||||
SUBDIRS += tegra
|
SUBDIRS += tegra
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if HAVE_ETNAVIV
|
||||||
|
SUBDIRS += etnaviv
|
||||||
|
endif
|
||||||
|
|
||||||
AM_CFLAGS = \
|
AM_CFLAGS = \
|
||||||
$(WARN_CFLAGS)\
|
$(WARN_CFLAGS)\
|
||||||
-I $(top_srcdir)/include/drm \
|
-I $(top_srcdir)/include/drm \
|
||||||
|
|
|
||||||
41
tests/etnaviv/Makefile.am
Normal file
41
tests/etnaviv/Makefile.am
Normal file
|
|
@ -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
|
||||||
242
tests/etnaviv/cmdstream.xml.h
Normal file
242
tests/etnaviv/cmdstream.xml.h
Normal file
|
|
@ -0,0 +1,242 @@
|
||||||
|
#ifndef CMDSTREAM_XML
|
||||||
|
#define CMDSTREAM_XML
|
||||||
|
|
||||||
|
/* Autogenerated file, DO NOT EDIT manually!
|
||||||
|
|
||||||
|
This file was generated by the rules-ng-ng headergen tool in this git repository:
|
||||||
|
http://0x04.net/cgit/index.cgi/rules-ng-ng
|
||||||
|
git clone git://0x04.net/rules-ng-ng
|
||||||
|
|
||||||
|
The rules-ng-ng source files this header was generated from are:
|
||||||
|
- cmdstream.xml ( 12621 bytes, from 2016-09-06 14:44:16)
|
||||||
|
- copyright.xml ( 1597 bytes, from 2016-09-06 14:44:16)
|
||||||
|
- common.xml ( 20583 bytes, from 2016-09-06 14:14:12)
|
||||||
|
|
||||||
|
Copyright (C) 2012-2016 by the following authors:
|
||||||
|
- Wladimir J. van der Laan <laanwj@gmail.com>
|
||||||
|
- Christian Gmeiner <christian.gmeiner@gmail.com>
|
||||||
|
- Lucas Stach <l.stach@pengutronix.de>
|
||||||
|
- Russell King <rmk@arm.linux.org.uk>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sub license,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice (including the
|
||||||
|
next paragraph) shall be included in all copies or substantial portions
|
||||||
|
of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FE_OPCODE_LOAD_STATE 0x00000001
|
||||||
|
#define FE_OPCODE_END 0x00000002
|
||||||
|
#define FE_OPCODE_NOP 0x00000003
|
||||||
|
#define FE_OPCODE_DRAW_2D 0x00000004
|
||||||
|
#define FE_OPCODE_DRAW_PRIMITIVES 0x00000005
|
||||||
|
#define FE_OPCODE_DRAW_INDEXED_PRIMITIVES 0x00000006
|
||||||
|
#define FE_OPCODE_WAIT 0x00000007
|
||||||
|
#define FE_OPCODE_LINK 0x00000008
|
||||||
|
#define FE_OPCODE_STALL 0x00000009
|
||||||
|
#define FE_OPCODE_CALL 0x0000000a
|
||||||
|
#define FE_OPCODE_RETURN 0x0000000b
|
||||||
|
#define FE_OPCODE_CHIP_SELECT 0x0000000d
|
||||||
|
#define PRIMITIVE_TYPE_POINTS 0x00000001
|
||||||
|
#define PRIMITIVE_TYPE_LINES 0x00000002
|
||||||
|
#define PRIMITIVE_TYPE_LINE_STRIP 0x00000003
|
||||||
|
#define PRIMITIVE_TYPE_TRIANGLES 0x00000004
|
||||||
|
#define PRIMITIVE_TYPE_TRIANGLE_STRIP 0x00000005
|
||||||
|
#define PRIMITIVE_TYPE_TRIANGLE_FAN 0x00000006
|
||||||
|
#define PRIMITIVE_TYPE_LINE_LOOP 0x00000007
|
||||||
|
#define PRIMITIVE_TYPE_QUADS 0x00000008
|
||||||
|
#define VIV_FE_LOAD_STATE 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER 0x00000000
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE 0x08000000
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_FIXP 0x04000000
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_COUNT__MASK 0x03ff0000
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT 16
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_COUNT(x) (((x) << VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT) & VIV_FE_LOAD_STATE_HEADER_COUNT__MASK)
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK 0x0000ffff
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT 0
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OFFSET(x) (((x) << VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT) & VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK)
|
||||||
|
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHR 2
|
||||||
|
|
||||||
|
#define VIV_FE_END 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_END_HEADER 0x00000000
|
||||||
|
#define VIV_FE_END_HEADER_EVENT_ID__MASK 0x0000001f
|
||||||
|
#define VIV_FE_END_HEADER_EVENT_ID__SHIFT 0
|
||||||
|
#define VIV_FE_END_HEADER_EVENT_ID(x) (((x) << VIV_FE_END_HEADER_EVENT_ID__SHIFT) & VIV_FE_END_HEADER_EVENT_ID__MASK)
|
||||||
|
#define VIV_FE_END_HEADER_EVENT_ENABLE 0x00000100
|
||||||
|
#define VIV_FE_END_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_END_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_END_HEADER_OP_END 0x10000000
|
||||||
|
|
||||||
|
#define VIV_FE_NOP 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_NOP_HEADER 0x00000000
|
||||||
|
#define VIV_FE_NOP_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_NOP_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_NOP_HEADER_OP_NOP 0x18000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_2D 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER 0x00000000
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_COUNT__MASK 0x0000ff00
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT 8
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_COUNT(x) (((x) << VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_COUNT__MASK)
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK 0x07ff0000
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT 16
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT(x) (((x) << VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK)
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_DRAW_2D_HEADER_OP_DRAW_2D 0x20000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT 0x00000008
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT_X__MASK 0x0000ffff
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT 0
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT_X(x) (((x) << VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT) & VIV_FE_DRAW_2D_TOP_LEFT_X__MASK)
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK 0xffff0000
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT 16
|
||||||
|
#define VIV_FE_DRAW_2D_TOP_LEFT_Y(x) (((x) << VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT) & VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK)
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT 0x0000000c
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK 0x0000ffff
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT 0
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X(x) (((x) << VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT) & VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK)
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK 0xffff0000
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT 16
|
||||||
|
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y(x) (((x) << VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT) & VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK)
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_HEADER 0x00000000
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES 0x28000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_COMMAND 0x00000004
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK 0x000000ff
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT 0
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE(x) (((x) << VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK)
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_START 0x00000008
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_PRIMITIVES_COUNT 0x0000000c
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER 0x00000000
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP_DRAW_INDEXED_PRIMITIVES 0x30000000
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND 0x00000004
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK 0x000000ff
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT 0
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE(x) (((x) << VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK)
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_START 0x00000008
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COUNT 0x0000000c
|
||||||
|
|
||||||
|
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_OFFSET 0x00000010
|
||||||
|
|
||||||
|
#define VIV_FE_WAIT 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_WAIT_HEADER 0x00000000
|
||||||
|
#define VIV_FE_WAIT_HEADER_DELAY__MASK 0x0000ffff
|
||||||
|
#define VIV_FE_WAIT_HEADER_DELAY__SHIFT 0
|
||||||
|
#define VIV_FE_WAIT_HEADER_DELAY(x) (((x) << VIV_FE_WAIT_HEADER_DELAY__SHIFT) & VIV_FE_WAIT_HEADER_DELAY__MASK)
|
||||||
|
#define VIV_FE_WAIT_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_WAIT_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_WAIT_HEADER_OP_WAIT 0x38000000
|
||||||
|
|
||||||
|
#define VIV_FE_LINK 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_LINK_HEADER 0x00000000
|
||||||
|
#define VIV_FE_LINK_HEADER_PREFETCH__MASK 0x0000ffff
|
||||||
|
#define VIV_FE_LINK_HEADER_PREFETCH__SHIFT 0
|
||||||
|
#define VIV_FE_LINK_HEADER_PREFETCH(x) (((x) << VIV_FE_LINK_HEADER_PREFETCH__SHIFT) & VIV_FE_LINK_HEADER_PREFETCH__MASK)
|
||||||
|
#define VIV_FE_LINK_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_LINK_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_LINK_HEADER_OP_LINK 0x40000000
|
||||||
|
|
||||||
|
#define VIV_FE_LINK_ADDRESS 0x00000004
|
||||||
|
|
||||||
|
#define VIV_FE_STALL 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_STALL_HEADER 0x00000000
|
||||||
|
#define VIV_FE_STALL_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_STALL_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_STALL_HEADER_OP_STALL 0x48000000
|
||||||
|
|
||||||
|
#define VIV_FE_STALL_TOKEN 0x00000004
|
||||||
|
#define VIV_FE_STALL_TOKEN_FROM__MASK 0x0000001f
|
||||||
|
#define VIV_FE_STALL_TOKEN_FROM__SHIFT 0
|
||||||
|
#define VIV_FE_STALL_TOKEN_FROM(x) (((x) << VIV_FE_STALL_TOKEN_FROM__SHIFT) & VIV_FE_STALL_TOKEN_FROM__MASK)
|
||||||
|
#define VIV_FE_STALL_TOKEN_TO__MASK 0x00001f00
|
||||||
|
#define VIV_FE_STALL_TOKEN_TO__SHIFT 8
|
||||||
|
#define VIV_FE_STALL_TOKEN_TO(x) (((x) << VIV_FE_STALL_TOKEN_TO__SHIFT) & VIV_FE_STALL_TOKEN_TO__MASK)
|
||||||
|
|
||||||
|
#define VIV_FE_CALL 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_CALL_HEADER 0x00000000
|
||||||
|
#define VIV_FE_CALL_HEADER_PREFETCH__MASK 0x0000ffff
|
||||||
|
#define VIV_FE_CALL_HEADER_PREFETCH__SHIFT 0
|
||||||
|
#define VIV_FE_CALL_HEADER_PREFETCH(x) (((x) << VIV_FE_CALL_HEADER_PREFETCH__SHIFT) & VIV_FE_CALL_HEADER_PREFETCH__MASK)
|
||||||
|
#define VIV_FE_CALL_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_CALL_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_CALL_HEADER_OP_CALL 0x50000000
|
||||||
|
|
||||||
|
#define VIV_FE_CALL_ADDRESS 0x00000004
|
||||||
|
|
||||||
|
#define VIV_FE_CALL_RETURN_PREFETCH 0x00000008
|
||||||
|
|
||||||
|
#define VIV_FE_CALL_RETURN_ADDRESS 0x0000000c
|
||||||
|
|
||||||
|
#define VIV_FE_RETURN 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_RETURN_HEADER 0x00000000
|
||||||
|
#define VIV_FE_RETURN_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_RETURN_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_RETURN_HEADER_OP_RETURN 0x58000000
|
||||||
|
|
||||||
|
#define VIV_FE_CHIP_SELECT 0x00000000
|
||||||
|
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER 0x00000000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_OP__MASK 0xf8000000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_OP__SHIFT 27
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_OP_CHIP_SELECT 0x68000000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP15 0x00008000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP14 0x00004000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP13 0x00002000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP12 0x00001000
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP11 0x00000800
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP10 0x00000400
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP9 0x00000200
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP8 0x00000100
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP7 0x00000080
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP6 0x00000040
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP5 0x00000020
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP4 0x00000010
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP3 0x00000008
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP2 0x00000004
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP1 0x00000002
|
||||||
|
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP0 0x00000001
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* CMDSTREAM_XML */
|
||||||
240
tests/etnaviv/etnaviv_2d_test.c
Normal file
240
tests/etnaviv/etnaviv_2d_test.c
Normal file
|
|
@ -0,0 +1,240 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014-2015 Etnaviv Project
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Christian Gmeiner <christian.gmeiner@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "xf86drm.h"
|
||||||
|
#include "etnaviv_drmif.h"
|
||||||
|
#include "etnaviv_drm.h"
|
||||||
|
|
||||||
|
#include "state.xml.h"
|
||||||
|
#include "state_2d.xml.h"
|
||||||
|
#include "cmdstream.xml.h"
|
||||||
|
|
||||||
|
#include "write_bmp.h"
|
||||||
|
|
||||||
|
static inline void etna_emit_load_state(struct etna_cmd_stream *stream,
|
||||||
|
const uint16_t offset, const uint16_t count)
|
||||||
|
{
|
||||||
|
uint32_t v;
|
||||||
|
|
||||||
|
v = (VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | VIV_FE_LOAD_STATE_HEADER_OFFSET(offset) |
|
||||||
|
(VIV_FE_LOAD_STATE_HEADER_COUNT(count) & VIV_FE_LOAD_STATE_HEADER_COUNT__MASK));
|
||||||
|
|
||||||
|
etna_cmd_stream_emit(stream, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void etna_set_state(struct etna_cmd_stream *stream, uint32_t address, uint32_t value)
|
||||||
|
{
|
||||||
|
etna_cmd_stream_reserve(stream, 2);
|
||||||
|
etna_emit_load_state(stream, address >> 2, 1);
|
||||||
|
etna_cmd_stream_emit(stream, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void etna_set_state_from_bo(struct etna_cmd_stream *stream,
|
||||||
|
uint32_t address, struct etna_bo *bo)
|
||||||
|
{
|
||||||
|
etna_cmd_stream_reserve(stream, 2);
|
||||||
|
etna_emit_load_state(stream, address >> 2, 1);
|
||||||
|
|
||||||
|
etna_cmd_stream_reloc(stream, &(struct etna_reloc){
|
||||||
|
.bo = bo,
|
||||||
|
.flags = ETNA_RELOC_READ,
|
||||||
|
.offset = 0,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gen_cmd_stream(struct etna_cmd_stream *stream, struct etna_bo *bmp, const int width, const int height)
|
||||||
|
{
|
||||||
|
int rec;
|
||||||
|
static int num_rects = 256;
|
||||||
|
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_STRIDE, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_ROTATION_CONFIG, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_CONFIG, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_ORIGIN, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_SIZE, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_COLOR_BG, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_COLOR_FG, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_STRETCH_FACTOR_LOW, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_STRETCH_FACTOR_HIGH, 0);
|
||||||
|
etna_set_state_from_bo(stream, VIVS_DE_DEST_ADDRESS, bmp);
|
||||||
|
etna_set_state(stream, VIVS_DE_DEST_STRIDE, width*4);
|
||||||
|
etna_set_state(stream, VIVS_DE_DEST_ROTATION_CONFIG, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_DEST_CONFIG,
|
||||||
|
VIVS_DE_DEST_CONFIG_FORMAT(DE_FORMAT_A8R8G8B8) |
|
||||||
|
VIVS_DE_DEST_CONFIG_COMMAND_CLEAR |
|
||||||
|
VIVS_DE_DEST_CONFIG_SWIZZLE(DE_SWIZZLE_ARGB) |
|
||||||
|
VIVS_DE_DEST_CONFIG_TILED_DISABLE |
|
||||||
|
VIVS_DE_DEST_CONFIG_MINOR_TILED_DISABLE
|
||||||
|
);
|
||||||
|
etna_set_state(stream, VIVS_DE_ROP,
|
||||||
|
VIVS_DE_ROP_ROP_FG(0xcc) | VIVS_DE_ROP_ROP_BG(0xcc) | VIVS_DE_ROP_TYPE_ROP4);
|
||||||
|
etna_set_state(stream, VIVS_DE_CLIP_TOP_LEFT,
|
||||||
|
VIVS_DE_CLIP_TOP_LEFT_X(0) |
|
||||||
|
VIVS_DE_CLIP_TOP_LEFT_Y(0)
|
||||||
|
);
|
||||||
|
etna_set_state(stream, VIVS_DE_CLIP_BOTTOM_RIGHT,
|
||||||
|
VIVS_DE_CLIP_BOTTOM_RIGHT_X(width) |
|
||||||
|
VIVS_DE_CLIP_BOTTOM_RIGHT_Y(height)
|
||||||
|
);
|
||||||
|
etna_set_state(stream, VIVS_DE_CONFIG, 0); /* TODO */
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_ORIGIN_FRACTION, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_ALPHA_CONTROL, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_ALPHA_MODES, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_DEST_ROTATION_HEIGHT, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_SRC_ROTATION_HEIGHT, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_ROT_ANGLE, 0);
|
||||||
|
|
||||||
|
/* Clear color PE20 */
|
||||||
|
etna_set_state(stream, VIVS_DE_CLEAR_PIXEL_VALUE32, 0xff40ff40);
|
||||||
|
/* Clear color PE10 */
|
||||||
|
etna_set_state(stream, VIVS_DE_CLEAR_BYTE_MASK, 0xff);
|
||||||
|
etna_set_state(stream, VIVS_DE_CLEAR_PIXEL_VALUE_LOW, 0xff40ff40);
|
||||||
|
etna_set_state(stream, VIVS_DE_CLEAR_PIXEL_VALUE_HIGH, 0xff40ff40);
|
||||||
|
|
||||||
|
etna_set_state(stream, VIVS_DE_DEST_COLOR_KEY, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_GLOBAL_SRC_COLOR, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_GLOBAL_DEST_COLOR, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_COLOR_MULTIPLY_MODES, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_PE_TRANSPARENCY, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_PE_CONTROL, 0);
|
||||||
|
etna_set_state(stream, VIVS_DE_PE_DITHER_LOW, 0xffffffff);
|
||||||
|
etna_set_state(stream, VIVS_DE_PE_DITHER_HIGH, 0xffffffff);
|
||||||
|
|
||||||
|
/* Queue DE command */
|
||||||
|
etna_cmd_stream_emit(stream,
|
||||||
|
VIV_FE_DRAW_2D_HEADER_OP_DRAW_2D | VIV_FE_DRAW_2D_HEADER_COUNT(num_rects) /* render one rectangle */
|
||||||
|
);
|
||||||
|
etna_cmd_stream_emit(stream, 0x0); /* rectangles start aligned */
|
||||||
|
|
||||||
|
for(rec=0; rec < num_rects; ++rec) {
|
||||||
|
int x = rec%16;
|
||||||
|
int y = rec/16;
|
||||||
|
etna_cmd_stream_emit(stream, VIV_FE_DRAW_2D_TOP_LEFT_X(x*8) | VIV_FE_DRAW_2D_TOP_LEFT_Y(y*8));
|
||||||
|
etna_cmd_stream_emit(stream, VIV_FE_DRAW_2D_BOTTOM_RIGHT_X(x*8+4) | VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y(y*8+4));
|
||||||
|
}
|
||||||
|
etna_set_state(stream, 1, 0);
|
||||||
|
etna_set_state(stream, 1, 0);
|
||||||
|
etna_set_state(stream, 1, 0);
|
||||||
|
|
||||||
|
etna_set_state(stream, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_PE2D);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
const int width = 256;
|
||||||
|
const int height = 256;
|
||||||
|
const size_t bmp_size = width * height * 4;
|
||||||
|
|
||||||
|
struct etna_device *dev;
|
||||||
|
struct etna_gpu *gpu;
|
||||||
|
struct etna_pipe *pipe;
|
||||||
|
struct etna_bo *bmp;
|
||||||
|
struct etna_cmd_stream *stream;
|
||||||
|
|
||||||
|
drmVersionPtr version;
|
||||||
|
int fd, ret = 0;
|
||||||
|
|
||||||
|
fd = open(argv[1], O_RDWR);
|
||||||
|
if (fd < 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
version = drmGetVersion(fd);
|
||||||
|
if (version) {
|
||||||
|
printf("Version: %d.%d.%d\n", version->version_major,
|
||||||
|
version->version_minor, version->version_patchlevel);
|
||||||
|
printf(" Name: %s\n", version->name);
|
||||||
|
printf(" Date: %s\n", version->date);
|
||||||
|
printf(" Description: %s\n", version->desc);
|
||||||
|
drmFreeVersion(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
dev = etna_device_new(fd);
|
||||||
|
if (!dev) {
|
||||||
|
ret = 2;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: we assume that core 0 is a 2D capable one */
|
||||||
|
gpu = etna_gpu_new(dev, 0);
|
||||||
|
if (!gpu) {
|
||||||
|
ret = 3;
|
||||||
|
goto out_device;
|
||||||
|
}
|
||||||
|
|
||||||
|
pipe = etna_pipe_new(gpu, ETNA_PIPE_2D);
|
||||||
|
if (!pipe) {
|
||||||
|
ret = 4;
|
||||||
|
goto out_gpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
bmp = etna_bo_new(dev, bmp_size, ETNA_BO_UNCACHED);
|
||||||
|
if (!bmp) {
|
||||||
|
ret = 5;
|
||||||
|
goto out_pipe;
|
||||||
|
}
|
||||||
|
memset(etna_bo_map(bmp), 0, bmp_size);
|
||||||
|
|
||||||
|
stream = etna_cmd_stream_new(pipe, 0x300, NULL, NULL);
|
||||||
|
if (!stream) {
|
||||||
|
ret = 6;
|
||||||
|
goto out_bo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* generate command sequence */
|
||||||
|
gen_cmd_stream(stream, bmp, width, height);
|
||||||
|
|
||||||
|
etna_cmd_stream_finish(stream);
|
||||||
|
|
||||||
|
bmp_dump32(etna_bo_map(bmp), width, height, false, "/tmp/etna.bmp");
|
||||||
|
|
||||||
|
etna_cmd_stream_del(stream);
|
||||||
|
|
||||||
|
out_bo:
|
||||||
|
etna_bo_del(bmp);
|
||||||
|
|
||||||
|
out_pipe:
|
||||||
|
etna_pipe_del(pipe);
|
||||||
|
|
||||||
|
out_gpu:
|
||||||
|
etna_gpu_del(gpu);
|
||||||
|
|
||||||
|
out_device:
|
||||||
|
etna_device_del(dev);
|
||||||
|
|
||||||
|
out:
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
121
tests/etnaviv/etnaviv_bo_cache_test.c
Normal file
121
tests/etnaviv/etnaviv_bo_cache_test.c
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Etnaviv Project
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Christian Gmeiner <christian.gmeiner@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef NDEBUG
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "xf86drm.h"
|
||||||
|
#include "etnaviv_drmif.h"
|
||||||
|
#include "etnaviv_drm.h"
|
||||||
|
|
||||||
|
static void test_cache(struct etna_device *dev)
|
||||||
|
{
|
||||||
|
struct etna_bo *bo, *tmp;
|
||||||
|
|
||||||
|
/* allocate and free some bo's with same size - we must
|
||||||
|
* get the same bo over and over. */
|
||||||
|
printf("testing bo cache ... ");
|
||||||
|
|
||||||
|
bo = tmp = etna_bo_new(dev, 0x100, ETNA_BO_UNCACHED);
|
||||||
|
assert(bo);
|
||||||
|
etna_bo_del(bo);
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < 100; i++) {
|
||||||
|
tmp = etna_bo_new(dev, 0x100, ETNA_BO_UNCACHED);
|
||||||
|
etna_bo_del(tmp);
|
||||||
|
assert(tmp == bo);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("ok\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_size_rounding(struct etna_device *dev)
|
||||||
|
{
|
||||||
|
struct etna_bo *bo;
|
||||||
|
|
||||||
|
printf("testing size rounding ... ");
|
||||||
|
|
||||||
|
bo = etna_bo_new(dev, 15, ETNA_BO_UNCACHED);
|
||||||
|
assert(etna_bo_size(bo) == 4096);
|
||||||
|
etna_bo_del(bo);
|
||||||
|
|
||||||
|
bo = etna_bo_new(dev, 4096, ETNA_BO_UNCACHED);
|
||||||
|
assert(etna_bo_size(bo) == 4096);
|
||||||
|
etna_bo_del(bo);
|
||||||
|
|
||||||
|
bo = etna_bo_new(dev, 4100, ETNA_BO_UNCACHED);
|
||||||
|
assert(etna_bo_size(bo) == 8192);
|
||||||
|
etna_bo_del(bo);
|
||||||
|
|
||||||
|
printf("ok\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct etna_device *dev;
|
||||||
|
|
||||||
|
drmVersionPtr version;
|
||||||
|
int fd, ret = 0;
|
||||||
|
|
||||||
|
fd = open(argv[1], O_RDWR);
|
||||||
|
if (fd < 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
version = drmGetVersion(fd);
|
||||||
|
if (version) {
|
||||||
|
printf("Version: %d.%d.%d\n", version->version_major,
|
||||||
|
version->version_minor, version->version_patchlevel);
|
||||||
|
printf(" Name: %s\n", version->name);
|
||||||
|
printf(" Date: %s\n", version->date);
|
||||||
|
printf(" Description: %s\n", version->desc);
|
||||||
|
drmFreeVersion(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
dev = etna_device_new(fd);
|
||||||
|
if (!dev) {
|
||||||
|
ret = 2;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
test_cache(dev);
|
||||||
|
test_size_rounding(dev);
|
||||||
|
|
||||||
|
etna_device_del(dev);
|
||||||
|
|
||||||
|
out:
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
123
tests/etnaviv/etnaviv_cmd_stream_test.c
Normal file
123
tests/etnaviv/etnaviv_cmd_stream_test.c
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
375
tests/etnaviv/state.xml.h
Normal file
375
tests/etnaviv/state.xml.h
Normal file
|
|
@ -0,0 +1,375 @@
|
||||||
|
#ifndef STATE_XML
|
||||||
|
#define STATE_XML
|
||||||
|
|
||||||
|
/* Autogenerated file, DO NOT EDIT manually!
|
||||||
|
|
||||||
|
This file was generated by the rules-ng-ng headergen tool in this git repository:
|
||||||
|
http://0x04.net/cgit/index.cgi/rules-ng-ng
|
||||||
|
git clone git://0x04.net/rules-ng-ng
|
||||||
|
|
||||||
|
The rules-ng-ng source files this header was generated from are:
|
||||||
|
- state.xml ( 18940 bytes, from 2016-09-06 14:14:12)
|
||||||
|
- common.xml ( 20583 bytes, from 2016-09-06 14:14:12)
|
||||||
|
- state_hi.xml ( 25653 bytes, from 2016-09-06 14:45:17)
|
||||||
|
- copyright.xml ( 1597 bytes, from 2016-09-06 14:44:16)
|
||||||
|
- state_2d.xml ( 51552 bytes, from 2016-09-06 14:44:16)
|
||||||
|
- state_3d.xml ( 54603 bytes, from 2016-09-06 14:44:16)
|
||||||
|
- state_vg.xml ( 5975 bytes, from 2016-09-06 14:44:16)
|
||||||
|
|
||||||
|
Copyright (C) 2012-2016 by the following authors:
|
||||||
|
- Wladimir J. van der Laan <laanwj@gmail.com>
|
||||||
|
- Christian Gmeiner <christian.gmeiner@gmail.com>
|
||||||
|
- Lucas Stach <l.stach@pengutronix.de>
|
||||||
|
- Russell King <rmk@arm.linux.org.uk>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sub license,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice (including the
|
||||||
|
next paragraph) shall be included in all copies or substantial portions
|
||||||
|
of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define VARYING_COMPONENT_USE_UNUSED 0x00000000
|
||||||
|
#define VARYING_COMPONENT_USE_USED 0x00000001
|
||||||
|
#define VARYING_COMPONENT_USE_POINTCOORD_X 0x00000002
|
||||||
|
#define VARYING_COMPONENT_USE_POINTCOORD_Y 0x00000003
|
||||||
|
#define FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__MASK 0x000000ff
|
||||||
|
#define FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__SHIFT 0
|
||||||
|
#define FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE(x) (((x) << FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__SHIFT) & FE_VERTEX_STREAM_CONTROL_VERTEX_STRIDE__MASK)
|
||||||
|
#define VIVS_FE 0x00000000
|
||||||
|
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG(i0) (0x00000600 + 0x4*(i0))
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG__ESIZE 0x00000004
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG__LEN 0x00000010
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE__MASK 0x0000000f
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE__SHIFT 0
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_BYTE 0x00000000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_BYTE 0x00000001
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_SHORT 0x00000002
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_SHORT 0x00000003
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_INT 0x00000004
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_INT 0x00000005
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_FLOAT 0x00000008
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_HALF_FLOAT 0x00000009
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_FIXED 0x0000000b
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_INT_10_10_10_2 0x0000000c
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_UNSIGNED_INT_10_10_10_2 0x0000000d
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__MASK 0x00000030
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__SHIFT 4
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN(x) (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_ENDIAN__MASK)
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NONCONSECUTIVE 0x00000080
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__MASK 0x00000700
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__SHIFT 8
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM(x) (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM__MASK)
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__MASK 0x00003000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__SHIFT 12
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM(x) (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_NUM__MASK)
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE__MASK 0x0000c000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE__SHIFT 14
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE_OFF 0x00000000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_NORMALIZE_ON 0x00008000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_START__MASK 0x00ff0000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_START__SHIFT 16
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_START(x) (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_START__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_START__MASK)
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_END__MASK 0xff000000
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_END__SHIFT 24
|
||||||
|
#define VIVS_FE_VERTEX_ELEMENT_CONFIG_END(x) (((x) << VIVS_FE_VERTEX_ELEMENT_CONFIG_END__SHIFT) & VIVS_FE_VERTEX_ELEMENT_CONFIG_END__MASK)
|
||||||
|
|
||||||
|
#define VIVS_FE_CMD_STREAM_BASE_ADDR 0x00000640
|
||||||
|
|
||||||
|
#define VIVS_FE_INDEX_STREAM_BASE_ADDR 0x00000644
|
||||||
|
|
||||||
|
#define VIVS_FE_INDEX_STREAM_CONTROL 0x00000648
|
||||||
|
#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE__MASK 0x00000003
|
||||||
|
#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE__SHIFT 0
|
||||||
|
#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE_UNSIGNED_CHAR 0x00000000
|
||||||
|
#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE_UNSIGNED_SHORT 0x00000001
|
||||||
|
#define VIVS_FE_INDEX_STREAM_CONTROL_TYPE_UNSIGNED_INT 0x00000002
|
||||||
|
|
||||||
|
#define VIVS_FE_VERTEX_STREAM_BASE_ADDR 0x0000064c
|
||||||
|
|
||||||
|
#define VIVS_FE_VERTEX_STREAM_CONTROL 0x00000650
|
||||||
|
|
||||||
|
#define VIVS_FE_COMMAND_ADDRESS 0x00000654
|
||||||
|
|
||||||
|
#define VIVS_FE_COMMAND_CONTROL 0x00000658
|
||||||
|
#define VIVS_FE_COMMAND_CONTROL_PREFETCH__MASK 0x0000ffff
|
||||||
|
#define VIVS_FE_COMMAND_CONTROL_PREFETCH__SHIFT 0
|
||||||
|
#define VIVS_FE_COMMAND_CONTROL_PREFETCH(x) (((x) << VIVS_FE_COMMAND_CONTROL_PREFETCH__SHIFT) & VIVS_FE_COMMAND_CONTROL_PREFETCH__MASK)
|
||||||
|
#define VIVS_FE_COMMAND_CONTROL_ENABLE 0x00010000
|
||||||
|
|
||||||
|
#define VIVS_FE_DMA_STATUS 0x0000065c
|
||||||
|
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE 0x00000660
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE__MASK 0x0000001f
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE__SHIFT 0
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_IDLE 0x00000000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_DEC 0x00000001
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_ADR0 0x00000002
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_LOAD0 0x00000003
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_ADR1 0x00000004
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_LOAD1 0x00000005
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DADR 0x00000006
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DCMD 0x00000007
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DCNTL 0x00000008
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_3DIDXCNTL 0x00000009
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_INITREQDMA 0x0000000a
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_DRAWIDX 0x0000000b
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_DRAW 0x0000000c
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DRECT0 0x0000000d
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DRECT1 0x0000000e
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DDATA0 0x0000000f
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_2DDATA1 0x00000010
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_WAITFIFO 0x00000011
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_WAIT 0x00000012
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_LINK 0x00000013
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_END 0x00000014
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_STATE_STALL 0x00000015
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE__MASK 0x00000300
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE__SHIFT 8
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_IDLE 0x00000000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_START 0x00000100
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_REQ 0x00000200
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_DMA_STATE_END 0x00000300
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE__MASK 0x00000c00
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE__SHIFT 10
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE_IDLE 0x00000000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE_RAMVALID 0x00000400
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CMD_FETCH_STATE_VALID 0x00000800
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE__MASK 0x00003000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE__SHIFT 12
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE_IDLE 0x00000000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE_WAITIDX 0x00001000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_REQ_DMA_STATE_CAL 0x00002000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE__MASK 0x0000c000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE__SHIFT 14
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE_IDLE 0x00000000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE_LDADR 0x00004000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_CAL_STATE_IDXCALC 0x00008000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE__MASK 0x00030000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE__SHIFT 16
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE_IDLE 0x00000000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE_CKCACHE 0x00010000
|
||||||
|
#define VIVS_FE_DMA_DEBUG_STATE_VE_REQ_STATE_MISS 0x00020000
|
||||||
|
|
||||||
|
#define VIVS_FE_DMA_ADDRESS 0x00000664
|
||||||
|
|
||||||
|
#define VIVS_FE_DMA_LOW 0x00000668
|
||||||
|
|
||||||
|
#define VIVS_FE_DMA_HIGH 0x0000066c
|
||||||
|
|
||||||
|
#define VIVS_FE_AUTO_FLUSH 0x00000670
|
||||||
|
|
||||||
|
#define VIVS_FE_UNK00678 0x00000678
|
||||||
|
|
||||||
|
#define VIVS_FE_UNK0067C 0x0000067c
|
||||||
|
|
||||||
|
#define VIVS_FE_VERTEX_STREAMS(i0) (0x00000000 + 0x4*(i0))
|
||||||
|
#define VIVS_FE_VERTEX_STREAMS__ESIZE 0x00000004
|
||||||
|
#define VIVS_FE_VERTEX_STREAMS__LEN 0x00000008
|
||||||
|
|
||||||
|
#define VIVS_FE_VERTEX_STREAMS_BASE_ADDR(i0) (0x00000680 + 0x4*(i0))
|
||||||
|
|
||||||
|
#define VIVS_FE_VERTEX_STREAMS_CONTROL(i0) (0x000006a0 + 0x4*(i0))
|
||||||
|
|
||||||
|
#define VIVS_FE_UNK00700(i0) (0x00000700 + 0x4*(i0))
|
||||||
|
#define VIVS_FE_UNK00700__ESIZE 0x00000004
|
||||||
|
#define VIVS_FE_UNK00700__LEN 0x00000010
|
||||||
|
|
||||||
|
#define VIVS_FE_UNK00740(i0) (0x00000740 + 0x4*(i0))
|
||||||
|
#define VIVS_FE_UNK00740__ESIZE 0x00000004
|
||||||
|
#define VIVS_FE_UNK00740__LEN 0x00000010
|
||||||
|
|
||||||
|
#define VIVS_FE_UNK00780(i0) (0x00000780 + 0x4*(i0))
|
||||||
|
#define VIVS_FE_UNK00780__ESIZE 0x00000004
|
||||||
|
#define VIVS_FE_UNK00780__LEN 0x00000010
|
||||||
|
|
||||||
|
#define VIVS_GL 0x00000000
|
||||||
|
|
||||||
|
#define VIVS_GL_PIPE_SELECT 0x00003800
|
||||||
|
#define VIVS_GL_PIPE_SELECT_PIPE__MASK 0x00000001
|
||||||
|
#define VIVS_GL_PIPE_SELECT_PIPE__SHIFT 0
|
||||||
|
#define VIVS_GL_PIPE_SELECT_PIPE(x) (((x) << VIVS_GL_PIPE_SELECT_PIPE__SHIFT) & VIVS_GL_PIPE_SELECT_PIPE__MASK)
|
||||||
|
|
||||||
|
#define VIVS_GL_EVENT 0x00003804
|
||||||
|
#define VIVS_GL_EVENT_EVENT_ID__MASK 0x0000001f
|
||||||
|
#define VIVS_GL_EVENT_EVENT_ID__SHIFT 0
|
||||||
|
#define VIVS_GL_EVENT_EVENT_ID(x) (((x) << VIVS_GL_EVENT_EVENT_ID__SHIFT) & VIVS_GL_EVENT_EVENT_ID__MASK)
|
||||||
|
#define VIVS_GL_EVENT_FROM_FE 0x00000020
|
||||||
|
#define VIVS_GL_EVENT_FROM_PE 0x00000040
|
||||||
|
#define VIVS_GL_EVENT_SOURCE__MASK 0x00001f00
|
||||||
|
#define VIVS_GL_EVENT_SOURCE__SHIFT 8
|
||||||
|
#define VIVS_GL_EVENT_SOURCE(x) (((x) << VIVS_GL_EVENT_SOURCE__SHIFT) & VIVS_GL_EVENT_SOURCE__MASK)
|
||||||
|
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN 0x00003808
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN_FROM__MASK 0x0000001f
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN_FROM__SHIFT 0
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN_FROM(x) (((x) << VIVS_GL_SEMAPHORE_TOKEN_FROM__SHIFT) & VIVS_GL_SEMAPHORE_TOKEN_FROM__MASK)
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN_TO__MASK 0x00001f00
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN_TO__SHIFT 8
|
||||||
|
#define VIVS_GL_SEMAPHORE_TOKEN_TO(x) (((x) << VIVS_GL_SEMAPHORE_TOKEN_TO__SHIFT) & VIVS_GL_SEMAPHORE_TOKEN_TO__MASK)
|
||||||
|
|
||||||
|
#define VIVS_GL_FLUSH_CACHE 0x0000380c
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_DEPTH 0x00000001
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_COLOR 0x00000002
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_TEXTURE 0x00000004
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_PE2D 0x00000008
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_TEXTUREVS 0x00000010
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_SHADER_L1 0x00000020
|
||||||
|
#define VIVS_GL_FLUSH_CACHE_SHADER_L2 0x00000040
|
||||||
|
|
||||||
|
#define VIVS_GL_FLUSH_MMU 0x00003810
|
||||||
|
#define VIVS_GL_FLUSH_MMU_FLUSH_FEMMU 0x00000001
|
||||||
|
#define VIVS_GL_FLUSH_MMU_FLUSH_UNK1 0x00000002
|
||||||
|
#define VIVS_GL_FLUSH_MMU_FLUSH_UNK2 0x00000004
|
||||||
|
#define VIVS_GL_FLUSH_MMU_FLUSH_PEMMU 0x00000008
|
||||||
|
#define VIVS_GL_FLUSH_MMU_FLUSH_UNK4 0x00000010
|
||||||
|
|
||||||
|
#define VIVS_GL_VERTEX_ELEMENT_CONFIG 0x00003814
|
||||||
|
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG 0x00003818
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES__MASK 0x00000003
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES__SHIFT 0
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_NONE 0x00000000
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_2X 0x00000001
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_4X 0x00000002
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_SAMPLES_MASK 0x00000008
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__MASK 0x000000f0
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__SHIFT 4
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES(x) (((x) << VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__SHIFT) & VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES__MASK)
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_MSAA_ENABLES_MASK 0x00000100
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__MASK 0x00007000
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__SHIFT 12
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12(x) (((x) << VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__SHIFT) & VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12__MASK)
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK12_MASK 0x00008000
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__MASK 0x00030000
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__SHIFT 16
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16(x) (((x) << VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__SHIFT) & VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16__MASK)
|
||||||
|
#define VIVS_GL_MULTI_SAMPLE_CONFIG_UNK16_MASK 0x00080000
|
||||||
|
|
||||||
|
#define VIVS_GL_VARYING_TOTAL_COMPONENTS 0x0000381c
|
||||||
|
#define VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__MASK 0x000000ff
|
||||||
|
#define VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__SHIFT 0
|
||||||
|
#define VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM(x) (((x) << VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__SHIFT) & VIVS_GL_VARYING_TOTAL_COMPONENTS_NUM__MASK)
|
||||||
|
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS 0x00003820
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__MASK 0x00000007
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__SHIFT 0
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR0(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR0__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__MASK 0x00000070
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__SHIFT 4
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR1(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR1__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__MASK 0x00000700
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__SHIFT 8
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR2(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR2__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__MASK 0x00007000
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__SHIFT 12
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR3(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR3__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__MASK 0x00070000
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__SHIFT 16
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR4(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR4__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__MASK 0x00700000
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__SHIFT 20
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR5(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR5__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__MASK 0x07000000
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__SHIFT 24
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR6(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR6__MASK)
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__MASK 0x70000000
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__SHIFT 28
|
||||||
|
#define VIVS_GL_VARYING_NUM_COMPONENTS_VAR7(x) (((x) << VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__SHIFT) & VIVS_GL_VARYING_NUM_COMPONENTS_VAR7__MASK)
|
||||||
|
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE(i0) (0x00003828 + 0x4*(i0))
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE__ESIZE 0x00000004
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE__LEN 0x00000002
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP0__MASK 0x00000003
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP0__SHIFT 0
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP0(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP0__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP0__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP1__MASK 0x0000000c
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP1__SHIFT 2
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP1(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP1__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP1__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP2__MASK 0x00000030
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP2__SHIFT 4
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP2(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP2__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP2__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP3__MASK 0x000000c0
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP3__SHIFT 6
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP3(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP3__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP3__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP4__MASK 0x00000300
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP4__SHIFT 8
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP4(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP4__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP4__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP5__MASK 0x00000c00
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP5__SHIFT 10
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP5(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP5__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP5__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP6__MASK 0x00003000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP6__SHIFT 12
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP6(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP6__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP6__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP7__MASK 0x0000c000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP7__SHIFT 14
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP7(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP7__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP7__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP8__MASK 0x00030000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP8__SHIFT 16
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP8(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP8__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP8__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP9__MASK 0x000c0000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP9__SHIFT 18
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP9(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP9__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP9__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP10__MASK 0x00300000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP10__SHIFT 20
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP10(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP10__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP10__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP11__MASK 0x00c00000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP11__SHIFT 22
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP11(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP11__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP11__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP12__MASK 0x03000000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP12__SHIFT 24
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP12(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP12__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP12__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP13__MASK 0x0c000000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP13__SHIFT 26
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP13(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP13__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP13__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP14__MASK 0x30000000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP14__SHIFT 28
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP14(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP14__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP14__MASK)
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP15__MASK 0xc0000000
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP15__SHIFT 30
|
||||||
|
#define VIVS_GL_VARYING_COMPONENT_USE_COMP15(x) (((x) << VIVS_GL_VARYING_COMPONENT_USE_COMP15__SHIFT) & VIVS_GL_VARYING_COMPONENT_USE_COMP15__MASK)
|
||||||
|
|
||||||
|
#define VIVS_GL_UNK03834 0x00003834
|
||||||
|
|
||||||
|
#define VIVS_GL_UNK03838 0x00003838
|
||||||
|
|
||||||
|
#define VIVS_GL_API_MODE 0x0000384c
|
||||||
|
#define VIVS_GL_API_MODE_OPENGL 0x00000000
|
||||||
|
#define VIVS_GL_API_MODE_OPENVG 0x00000001
|
||||||
|
#define VIVS_GL_API_MODE_OPENCL 0x00000002
|
||||||
|
|
||||||
|
#define VIVS_GL_CONTEXT_POINTER 0x00003850
|
||||||
|
|
||||||
|
#define VIVS_GL_UNK03A00 0x00003a00
|
||||||
|
|
||||||
|
#define VIVS_GL_STALL_TOKEN 0x00003c00
|
||||||
|
#define VIVS_GL_STALL_TOKEN_FROM__MASK 0x0000001f
|
||||||
|
#define VIVS_GL_STALL_TOKEN_FROM__SHIFT 0
|
||||||
|
#define VIVS_GL_STALL_TOKEN_FROM(x) (((x) << VIVS_GL_STALL_TOKEN_FROM__SHIFT) & VIVS_GL_STALL_TOKEN_FROM__MASK)
|
||||||
|
#define VIVS_GL_STALL_TOKEN_TO__MASK 0x00001f00
|
||||||
|
#define VIVS_GL_STALL_TOKEN_TO__SHIFT 8
|
||||||
|
#define VIVS_GL_STALL_TOKEN_TO(x) (((x) << VIVS_GL_STALL_TOKEN_TO__SHIFT) & VIVS_GL_STALL_TOKEN_TO__MASK)
|
||||||
|
#define VIVS_GL_STALL_TOKEN_FLIP0 0x40000000
|
||||||
|
#define VIVS_GL_STALL_TOKEN_FLIP1 0x80000000
|
||||||
|
|
||||||
|
#define VIVS_DUMMY 0x00000000
|
||||||
|
|
||||||
|
#define VIVS_DUMMY_DUMMY 0x0003fffc
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* STATE_XML */
|
||||||
1497
tests/etnaviv/state_2d.xml.h
Normal file
1497
tests/etnaviv/state_2d.xml.h
Normal file
File diff suppressed because it is too large
Load diff
151
tests/etnaviv/write_bmp.c
Normal file
151
tests/etnaviv/write_bmp.c
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Luc Verhaegen <libv@codethink.co.uk>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sub license,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the
|
||||||
|
* next paragraph) shall be included in all copies or substantial portions
|
||||||
|
* of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Quick 'n Dirty bitmap dumper.
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include "write_bmp.h"
|
||||||
|
|
||||||
|
#define FILENAME_SIZE 1024
|
||||||
|
|
||||||
|
struct bmp_header {
|
||||||
|
unsigned short magic;
|
||||||
|
unsigned int size;
|
||||||
|
unsigned int unused;
|
||||||
|
unsigned int start;
|
||||||
|
} __attribute__((__packed__));
|
||||||
|
|
||||||
|
struct dib_header {
|
||||||
|
unsigned int size;
|
||||||
|
unsigned int width;
|
||||||
|
unsigned int height;
|
||||||
|
unsigned short planes;
|
||||||
|
unsigned short bpp;
|
||||||
|
unsigned int compression;
|
||||||
|
unsigned int data_size;
|
||||||
|
unsigned int h_res;
|
||||||
|
unsigned int v_res;
|
||||||
|
unsigned int colours;
|
||||||
|
unsigned int important_colours;
|
||||||
|
unsigned int red_mask;
|
||||||
|
unsigned int green_mask;
|
||||||
|
unsigned int blue_mask;
|
||||||
|
unsigned int alpha_mask;
|
||||||
|
unsigned int colour_space;
|
||||||
|
unsigned int unused[12];
|
||||||
|
} __attribute__((__packed__));
|
||||||
|
|
||||||
|
static int
|
||||||
|
bmp_header_write(int fd, int width, int height, int bgra, int noflip, int alpha)
|
||||||
|
{
|
||||||
|
struct bmp_header bmp_header = {
|
||||||
|
.magic = 0x4d42,
|
||||||
|
.size = (width * height * 4) +
|
||||||
|
sizeof(struct bmp_header) + sizeof(struct dib_header),
|
||||||
|
.start = sizeof(struct bmp_header) + sizeof(struct dib_header),
|
||||||
|
};
|
||||||
|
struct dib_header dib_header = {
|
||||||
|
.size = sizeof(struct dib_header),
|
||||||
|
.width = width,
|
||||||
|
.height = noflip ? -height : height,
|
||||||
|
.planes = 1,
|
||||||
|
.bpp = 32,
|
||||||
|
.compression = 3,
|
||||||
|
.data_size = 4 * width * height,
|
||||||
|
.h_res = 0xB13,
|
||||||
|
.v_res = 0xB13,
|
||||||
|
.colours = 0,
|
||||||
|
.important_colours = 0,
|
||||||
|
.red_mask = 0x000000FF,
|
||||||
|
.green_mask = 0x0000FF00,
|
||||||
|
.blue_mask = 0x00FF0000,
|
||||||
|
.alpha_mask = alpha ? 0xFF000000 : 0x00000000,
|
||||||
|
.colour_space = 0x57696E20,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (bgra) {
|
||||||
|
dib_header.red_mask = 0x00FF0000;
|
||||||
|
dib_header.blue_mask = 0x000000FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
write(fd, &bmp_header, sizeof(struct bmp_header));
|
||||||
|
write(fd, &dib_header, sizeof(struct dib_header));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bmp_dump32(char *buffer, unsigned width, unsigned height, bool bgra, const char *filename)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = open(filename, O_WRONLY| O_TRUNC | O_CREAT, 0666);
|
||||||
|
if (fd == -1) {
|
||||||
|
printf("Failed to open %s: %s\n", filename, strerror(errno));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bmp_header_write(fd, width, height, bgra, false, true);
|
||||||
|
|
||||||
|
write(fd, buffer, width * height * 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bmp_dump32_noflip(char *buffer, unsigned width, unsigned height, bool bgra, const char *filename)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = open(filename, O_WRONLY| O_TRUNC | O_CREAT, 0666);
|
||||||
|
if (fd == -1) {
|
||||||
|
printf("Failed to open %s: %s\n", filename, strerror(errno));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bmp_header_write(fd, width, height, bgra, true, true);
|
||||||
|
|
||||||
|
write(fd, buffer, width * height * 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bmp_dump32_ex(char *buffer, unsigned width, unsigned height, bool flip, bool bgra, bool alpha, const char *filename)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = open(filename, O_WRONLY| O_TRUNC | O_CREAT, 0666);
|
||||||
|
if (fd == -1) {
|
||||||
|
printf("Failed to open %s: %s\n", filename, strerror(errno));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bmp_header_write(fd, width, height, bgra, flip, alpha);
|
||||||
|
|
||||||
|
write(fd, buffer, width * height * 4);
|
||||||
|
}
|
||||||
34
tests/etnaviv/write_bmp.h
Normal file
34
tests/etnaviv/write_bmp.h
Normal file
|
|
@ -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 */
|
||||||
Loading…
Add table
Reference in a new issue