summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-01-26 19:14:40 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2013-01-26 19:31:12 +0100
commiteee4bc8dd953afc4fb92f81c35c684245e628ce4 (patch)
tree6ca1cb68f4284c5bb46742dd779a7a582250016b
parent27f6235e8020c511c5cfa931370e7ad8d02c7058 (diff)
collect feature bits to compare the various GPUs
-rw-r--r--README.md4
-rw-r--r--doc/gpus_comparison.html196
-rw-r--r--doc/hardware.md3
-rw-r--r--tools/data/gpus.json96
-rwxr-xr-xtools/dump_cmdstream.py4
-rwxr-xr-xtools/make_feature_comparison.py184
-rwxr-xr-xtools/show_egl2_log.sh2
7 files changed, 483 insertions, 6 deletions
diff --git a/README.md b/README.md
index 260a597..55e28de 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,9 @@ ARM-based:
MIPS-based:
- Devices based on Ingenic JZ4770 MIPS SoC (GC860), JZ4760 (GC200, 2D only) such as the GCW zero.
-See also https://en.wikipedia.org/wiki/Vivante_Corporation
+See also https://en.wikipedia.org/wiki/Vivante_Corporation.
+
+For the Vivante GPUs on some platforms the detailed features and specs are known, these can be found in `doc/gpus_comparison.html`.
Contents
==========
diff --git a/doc/gpus_comparison.html b/doc/gpus_comparison.html
new file mode 100644
index 0000000..fee76c6
--- /dev/null
+++ b/doc/gpus_comparison.html
@@ -0,0 +1,196 @@
+<html>
+<head><!-- Auto-generated by make_feature_comparison.py from gpus.json -->
+<title>Vivante GPU feature bits comparison</title>
+<style>
+body { background-color: white; }
+table.gpu-comparison { table-layout: fixed; word-wrap:break-all; }
+table.gpu-comparison td { width: 80px; text-align: center; fixed; word-wrap:break-word; word-break:break-all; }
+table.gpu-comparison tr:nth-child(odd) td {
+ background-color: #e0e0ff;
+}
+table.gpu-comparison tr:nth-child(even) td {
+ background-color: #d0d0ff;
+}
+table.gpu-comparison td.header { text-align: left; width: 15em; }
+table.gpu-comparison td.subheader { text-align: left; padding-left: 20px; }
+table.gpu-comparison td.category { text-align: left; font-style: italic; }
+table.gpu-comparison td.minus { color: #808080; }
+table.gpu-comparison td.plus { }
+</style>
+</head>
+<body>
+<table class="gpu-comparison">
+<tr><td class="header">Platform</td><td>Rockchip 2918</td><td>Marvell Armada 510 (88AP510)</td><td colspan="2">Marvell Armada 620 (88AP2128-B0)</td><td>Marvell Armada XXX (OLPC XO-1.75, model: 1C2)</td><td>Marvell 88SV331x</td></tr>
+<tr><td class="header">Type</td><td>GC800</td><td>GC600</td><td>GC2000</td><td>GC300</td><td>GC860</td><td>GC530</td></tr>
+<tr><td class="header">Revision</td><td>0x4604</td><td>0x0019</td><td>0x5026</td><td>0x4634</td><td>0x4603</td><td>0x4303</td></tr>
+<tr><td colspan="7" class="category">Specs</td></tr>
+<tr><td class="subheader">streamCount</td><td>1</td><td>1</td><td>?</td><td>?</td><td>1</td><td>1</td></tr>
+<tr><td class="subheader">registerMax</td><td>64</td><td>64</td><td>?</td><td>?</td><td>64</td><td>64</td></tr>
+<tr><td class="subheader">threadCount</td><td>256</td><td>256</td><td>?</td><td>?</td><td>256</td><td>128</td></tr>
+<tr><td class="subheader">shaderCoreCount</td><td>1</td><td>1</td><td>?</td><td>?</td><td>1</td><td>1</td></tr>
+<tr><td class="subheader">vertexCacheSize</td><td>8</td><td>8</td><td>?</td><td>?</td><td>8</td><td>8</td></tr>
+<tr><td class="subheader">vertexOutputBufferSize</td><td>512</td><td>512</td><td>?</td><td>?</td><td>512</td><td>128</td></tr>
+<tr><td colspan="7" class="category">Features</td></tr>
+<tr><td class="subheader">FAST_CLEAR</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">SPECIAL_ANTI_ALIASING</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">PIPE_3D</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">DXT_TEXTURE_COMPRESSION</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">DEBUG_MODE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">Z_COMPRESSION</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">YUV420_SCALER</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">MSAA</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">DC</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">PIPE_2D</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">ETC1_TEXTURE_COMPRESSION</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">FAST_SCALER</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HIGH_DYNAMIC_RANGE</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">YUV420_TILER</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">MODULE_CG</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">MIN_AREA</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NO_EARLY_Z</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NO_422_TEXTURE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUFFER_INTERLEAVING</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">BYTE_WRITE_2D</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">NO_SCALER</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">YUY2_AVERAGING</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">HALF_PE_CACHE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HALF_TX_CACHE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">YUY2_RENDER_TARGET</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td></tr>
+<tr><td class="subheader">MEM32</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">PIPE_VG</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">VGTS</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">FE20</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BYTE_WRITE_3D</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">RS_YUV_TARGET</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">32_BIT_INDICES</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">FLIP_Y</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">DUAL_RETURN_BUS</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">ENDIANNESS_CONFIG</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">TEXTURE_8K</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">CORRECT_TEXTURE_CONVERTER</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">SPECIAL_MSAA_LOD</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">FAST_CLEAR_FLUSH</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">2DPE20</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">CORRECT_AUTO_DISABLE</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td></tr>
+<tr><td class="subheader">RENDERTARGET_8K</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2BITPERTILE</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">SEPARATE_TILE_STATUS_WHEN_INTERLEAVED</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">SUPER_TILED</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">VG_20</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">TS_EXTENDED_COMMANDS</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">COMPRESSION_FIFO_FIXED</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HAS_SIGN_FLOOR_CEIL</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">VG_FILTER</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">VG_21</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">SHADER_HAS_W</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HAS_SQRT_TRIG</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">MORE_MINOR_FEATURES</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">MC20</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">MSAA_SIDEBAND</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUG_FIXES0</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">VAA</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BYPASS_IN_MSAA</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HZ</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NEW_TEXTURE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_A8_TARGET</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">CORRECT_STENCIL</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">ENHANCE_VR</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td></tr>
+<tr><td class="subheader">RSUV_SWIZZLE</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">V2_COMPRESSION</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">VG_DOUBLE_BUFFER</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">EXTRA_EVENT_STATES</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NO_STRIPING_NEEDED</td><td class="plus">+</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">TEXTURE_STRIDE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUG_FIXES3</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">AUTO_DISABLE</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">AUTO_RESTART_TS</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">DISABLE_PE_GATING</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">L2_WINDOWING</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HALF_FLOAT</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">PIXEL_DITHER</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">TWO_STENCIL_REFERENCE</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">EXTENDED_PIXEL_FORMAT</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">CORRECT_MIN_MAX_DEPTH</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_DITHER</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUG_FIXES5</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NEW_2D</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NEW_FP</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">TEXTURE_ALIGN_4</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NON_POWER_OF_TWO</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">LINEAR_TEXTURE_SUPPORT</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">HALTI0</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">CORRECT_OVERFLOW_VG</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">NEGATIVE_LOG_FIX</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">RESOLVE_OFFSET</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">OK_TO_GATE_AXI_CLOCK</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">MMU_VERSION</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">WIDE_LINE</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUG_FIXES6</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">FC_FLUSH_STALL</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">LINE_LOOP</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">LOGIC_OP</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK2</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">SUPERTILED_TEXTURE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK4</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">RECT_PRIMITIVE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">COMPOSITION</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">CORRECT_AUTO_DISABLE_COUNT</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK8</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK9</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK10</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">SAMPLERBASE_16</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK12</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK13</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK14</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">EXTRA_TEXTURE_STATE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">FULL_DIRECTFB</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_TILING</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">THREAD_WALKER_IN_PS</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">TILE_FILLER</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK20</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_MULTI_SOURCE_BLIT</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK22</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK23</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK24</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">MIXED_STREAMS</td><td class="minus">-</td><td class="minus">-</td><td class="plus">+</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_420_L2CACHE</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK27</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_NO_INDEX8_BRUSH</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">TEXTURE_TILED_READ</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK30</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK31</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">ROTATION_STALL_FIX</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK1</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">2D_MULTI_SOURCE_BLT_EX</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK3</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK4</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK5</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK6</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK7</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK8</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK9</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUG_FIXES10</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK11</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">BUG_FIXES11</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK13</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK14</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK15</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK16</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK17</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK18</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK19</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK20</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK21</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK22</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK23</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK24</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK25</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK26</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK27</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK28</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK29</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK30</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+<tr><td class="subheader">UNK31</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td><td class="minus">-</td></tr>
+</table>
+</body>
+</html>
diff --git a/doc/hardware.md b/doc/hardware.md
index ba1fdbc..f6f11d7 100644
--- a/doc/hardware.md
+++ b/doc/hardware.md
@@ -26,6 +26,9 @@ and revision. Unlike NV, which parametrizes everything on the model and revision
For an overview of the feature bits see the enumerations in `state.xml`.
+For the Vivante GPUs on some platforms the detailed features and specs are known, these can be found in `doc/gpus_comparison.html`
+(`tools/data/gpus.json` for the raw source data).
+
Modules
==============
(from Vivante SoCIP 2011 presentation [1])
diff --git a/tools/data/gpus.json b/tools/data/gpus.json
new file mode 100644
index 0000000..bfd43bf
--- /dev/null
+++ b/tools/data/gpus.json
@@ -0,0 +1,96 @@
+[
+ {
+ "platform": "Rockchip 2918",
+ "chips": [{
+ "type": "GC800",
+ "chipModel": "0x0800",
+ "chipRevision": "0x4604",
+ "chipFeatures": "0xa02c6eed",
+ "chipMinorFeatures": "0xe1399fff",
+ "chipMinorFeatures1": "0x19",
+ "chipMinorFeatures2": "0x0",
+ "chipMinorFeatures3": "0x0",
+ "streamCount": "0x1",
+ "registerMax": "0x40",
+ "threadCount": "0x100",
+ "shaderCoreCount": "0x1",
+ "vertexCacheSize": "0x8",
+ "vertexOutputBufferSize": "0x200"
+ }]
+ },
+ {
+ "platform": "Marvell Armada 510 (88AP510)",
+ "chips": [{
+ "type": "GC600",
+ "chipModel": "0x0600",
+ "chipRevision": "0x19",
+ "chipFeatures": "0x87ecd",
+ "chipMinorFeatures": "0x7",
+ "chipMinorFeatures1": "0x0",
+ "chipMinorFeatures2": "0x0",
+ "chipMinorFeatures3": "0x0",
+ "streamCount": "0x1",
+ "registerMax": "0x40",
+ "threadCount": "0x100",
+ "shaderCoreCount": "0x1",
+ "vertexCacheSize": "0x8",
+ "vertexOutputBufferSize": "0x200"
+ }]
+ },
+ {
+ "platform": "Marvell Armada 620 (88AP2128-B0)",
+ "chips": [{
+ "type": "GC2000",
+ "chipModel": "0x00002000",
+ "chipRevision": "0x00005026",
+ "chipFeatures": "0xE0286CAD",
+ "chipMinorFeatures": "0xC3799EFF",
+ "chipMinorFeatures1": "0x2E13B2D9",
+ "chipMinorFeatures2": "0x02000000",
+ "chipMinorFeatures3": "0x00000000"
+ }, {
+ "type": "GC300",
+ "chipModel": "0x00000300",
+ "chipRevision": "0x00004634",
+ "chipFeatures": "0xE02C7ECA",
+ "chipMinorFeatures": "0xE1399FFF",
+ "chipMinorFeatures1": "0x2E13B219",
+ "chipMinorFeatures2": "0x00010000",
+ "chipMinorFeatures3": "0x00000000"
+ }]
+ },
+ {
+ "platform": "Marvell Armada XXX (OLPC XO-1.75, model: 1C2)",
+ "chips": [{
+ "type": "GC860",
+ "chipModel": "0x860",
+ "chipRevision": "0x4603",
+ "chipFeatures": "0xe02c6eed",
+ "chipMinorFeatures": "0xcbf99fff",
+ "streamCount": "1",
+ "registerMax": "64",
+ "threadCount": "256",
+ "shaderCoreCount": "1",
+ "vertexCacheSize": "8",
+ "vertexOutputBufferSize": "512"
+ }]
+ },
+ {
+ "platform": "Marvell 88SV331x",
+ "chips": [{
+ "type": "GC530",
+ "chipModel": "0x530",
+ "chipRevision": "0x4303",
+ "chipFeatures": "0x212c66ed",
+ "chipMinorFeatures": "0x17f",
+ "streamCount": "1",
+ "registerMax": "64",
+ "threadCount": "128",
+ "shaderCoreCount": "1",
+ "vertexCacheSize": "8",
+ "vertexOutputBufferSize": "128"
+ }]
+ }
+]
+
+
diff --git a/tools/dump_cmdstream.py b/tools/dump_cmdstream.py
index 5fe15e0..84fdb79 100755
--- a/tools/dump_cmdstream.py
+++ b/tools/dump_cmdstream.py
@@ -335,8 +335,6 @@ def parse_arguments():
help='Structures definition file')
parser.add_argument('rules_file', metavar='RULESFILE', type=str,
help='State map definition file (rules-ng-ng)')
- parser.add_argument('isa_file', metavar='ISAFILE', type=str,
- help='Shader ISA definition file (rules-ng-ng)')
parser.add_argument('-l', '--hide-load-state', dest='hide_load_state',
default=False, action='store_const', const=True,
help='Hide "LOAD_STATE" entries, this can make command stream a bit easier to read')
@@ -384,8 +382,6 @@ def main():
fdr = FDRLoader(args.input)
global options
options = args
- global isa
- isa = parse_rng_file(args.isa_file)
def handle_comment(f, val, depth):
'''Annotate value with a comment'''
diff --git a/tools/make_feature_comparison.py b/tools/make_feature_comparison.py
new file mode 100755
index 0000000..073ecac
--- /dev/null
+++ b/tools/make_feature_comparison.py
@@ -0,0 +1,184 @@
+#!/usr/bin/python
+'''
+Create overview comparison table beween different GCxxx chips on different platforms.
+
+The input data is specified in JSON format, the output is in HTML.
+'''
+# Copyright (c) 2012-2013 Wladimir J. van der Laan
+#
+# 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.
+from __future__ import print_function, division, unicode_literals
+import argparse
+import json, cgi
+from etnaviv.parse_rng import parse_rng_file, format_path, BitSet, Domain
+import sys
+
+GPUS_FILE = 'data/gpus.json'
+STATE_MAP = '../rnndb/state.xml'
+
+class Cell(object):
+ def __init__(self, row, column, value, rowspan=1, colspan=1, cls=None):
+ self.row = row
+ self.column = column
+ self.rowspan = rowspan
+ self.colspan = colspan
+ self.value = value
+ self.cls = cls
+
+def main():
+ parser = argparse.ArgumentParser(description='Compare GCxxx chips.')
+ parser.add_argument('-i', dest='gpus_file', metavar='GPUSFILE', type=str,
+ help='gpus.json file', default=GPUS_FILE)
+ parser.add_argument('-s', dest='state_xml_file', metavar='STATEXML', type=str,
+ help='State map definition file (rules-ng-ng)', default=STATE_MAP)
+ args = parser.parse_args()
+
+ with open(args.gpus_file, 'r') as f:
+ gpus = json.load(f)
+ state_xml = parse_rng_file(args.state_xml_file)
+ state_map = state_xml.lookup_domain('VIVS')
+
+ feature_fields = ["chipFeatures", "chipMinorFeatures", "chipMinorFeatures1", "chipMinorFeatures2", "chipMinorFeatures3"]
+ all_features = []
+ for field in feature_fields:
+ if field == 'chipMinorFeatures':
+ set_desc = state_xml.types['chipMinorFeatures0']
+ else:
+ set_desc = state_xml.types[field]
+ all_features.extend([(field,bit) for bit in set_desc.bitfields])
+
+ table = []
+
+ cur_row = 0
+ table.append(Cell(cur_row, 0, 'Platform', cls='header'))
+ cur_col = 1
+ for platform in gpus:
+ table.append(Cell(cur_row, cur_col, platform['platform'], colspan=len(platform['chips'])))
+ cur_col += len(platform['chips'])
+ full_width = cur_col
+
+ cur_row += 1
+ table.append(Cell(cur_row, 0, 'Type', cls='header'))
+ cur_col = 1
+ for platform in gpus:
+ for idx,chip in enumerate(platform['chips']):
+ table.append(Cell(cur_row, cur_col, chip['type']))
+ cur_col += 1
+
+ cur_row += 1
+ table.append(Cell(cur_row, 0, 'Revision', cls='header'))
+ cur_col = 1
+ for platform in gpus:
+ for idx,chip in enumerate(platform['chips']):
+ if 'chipRevision' in chip:
+ revision_str = '0x%04x' % int(chip['chipRevision'],0)
+ else:
+ revision_str = '?'
+ table.append(Cell(cur_row, cur_col, revision_str))
+ cur_col += 1
+
+ cur_row += 1
+ table.append(Cell(cur_row, 0, 'Specs', colspan=full_width, cls='category'))
+ spec_fields = ["streamCount", "registerMax", "threadCount", "shaderCoreCount", "vertexCacheSize", "vertexOutputBufferSize"]
+ for (field) in spec_fields:
+ cur_row += 1
+ table.append(Cell(cur_row, 0, field, cls='subheader'))
+ cur_col = 1
+ for platform in gpus:
+ for chip in platform['chips']:
+ if field in chip:
+ value = int(chip[field], 0)
+ else:
+ value = '?'
+ table.append(Cell(cur_row, cur_col, value))
+ cur_col += 1
+
+ cur_row += 1
+ table.append(Cell(cur_row, 0, 'Features', colspan=full_width, cls='category'))
+ for (field, bit) in all_features:
+ cur_row += 1
+ table.append(Cell(cur_row, 0, bit.name, cls='subheader'))
+ cur_col = 1
+ for platform in gpus:
+ for chip in platform['chips']:
+ value = int(chip.get(field,'0'), 0)
+ active_feat = bit.extract(value)
+ if active_feat:
+ active_feat = '+'
+ cls = 'plus'
+ else:
+ active_feat = '-'
+ cls = 'minus'
+ table.append(Cell(cur_row, cur_col, active_feat, cls=cls))
+ cur_col += 1
+
+ layout = {}
+ rows = 0
+ columns = 0
+ for cell in table:
+ layout[cell.row,cell.column] = cell
+ rows = max(cell.row+1, rows)
+ columns = max(cell.column+1, columns)
+
+ out = sys.stdout
+ out.write('<html>\n')
+ out.write('<head><!-- Auto-generated by make_feature_comparison.py from gpus.json -->\n')
+ out.write('<title>Vivante GPU feature bits comparison</title>\n')
+ out.write("""<style>
+body { background-color: white; }
+table.gpu-comparison { table-layout: fixed; word-wrap:break-all; }
+table.gpu-comparison td { width: 80px; text-align: center; fixed; word-wrap:break-word; word-break:break-all; }
+table.gpu-comparison tr:nth-child(odd) td {
+ background-color: #e0e0ff;
+}
+table.gpu-comparison tr:nth-child(even) td {
+ background-color: #d0d0ff;
+}
+table.gpu-comparison td.header { text-align: left; width: 15em; }
+table.gpu-comparison td.subheader { text-align: left; padding-left: 20px; }
+table.gpu-comparison td.category { text-align: left; font-style: italic; }
+table.gpu-comparison td.minus { color: #808080; }
+table.gpu-comparison td.plus { }
+</style>
+""")
+ out.write('</head>\n')
+ out.write('<body>\n')
+ out.write('<table class="gpu-comparison">\n')
+ for row in xrange(rows):
+ out.write('<tr>')
+ for column in xrange(columns):
+ try:
+ cell = layout[row, column]
+ except KeyError:
+ pass #out.write('<td></td>')
+ else:
+ args = ''
+ if cell.colspan != 1:
+ args += ' colspan="%i"' % cell.colspan
+ if cell.cls is not None:
+ args += ' class="%s"' % cell.cls
+ out.write('<td%s>%s</td>' %(args,cgi.escape(str(cell.value))))
+ out.write('</tr>\n')
+ out.write('</table>\n')
+ out.write('</body>\n')
+ out.write('</html>\n')
+
+if __name__ == '__main__':
+ main()
diff --git a/tools/show_egl2_log.sh b/tools/show_egl2_log.sh
index e7008f4..9dc11a8 100755
--- a/tools/show_egl2_log.sh
+++ b/tools/show_egl2_log.sh
@@ -20,4 +20,4 @@ if [ -z "$1" ]; then
echo "Usage: show_egl2_log.sh ../native/egl2/cube.fdr <flags>"
echo
fi
-python dump_cmdstream.py $* ${DIR}/data/gcs_hal_interface_v2.json ${DIR}/../rnndb/state.xml ${DIR}/../rnndb/isa.xml
+python dump_cmdstream.py $* ${DIR}/data/gcs_hal_interface_v2.json ${DIR}/../rnndb/state.xml