• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

hardware/intel/intel-driver


Commit MetaInfo

修订版6a4cb72bf6ba65789c72015c06657f4e0ce530fe (tree)
时间2016-05-27 14:24:35
作者Zhao Yakui <yakui.zhao@inte...>
CommiterXiang, Haihao

Log Message

Add the low-level implementation of VP9 encoding

The following are includes:
a. The definition of data structure related with VP9 encoding
b. VME/PAK pipeline related with VP9 encoding
c. The required helper function

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Reviewed-by: Sean V Kelley <sean.v.kelley@intel.com>

更改概述

差异

--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -98,6 +98,9 @@ source_c = \
9898 object_heap.c \
9999 intel_media_common.c \
100100 vp9_probs.c \
101+ gen9_vp9_encoder_kernels.c \
102+ gen9_vp9_const_def.c \
103+ gen9_vp9_encoder.c \
101104 $(NULL)
102105
103106 source_h = \
@@ -146,6 +149,10 @@ source_h = \
146149 sysdeps.h \
147150 va_backend_compat.h \
148151 i965_fourcc.h \
152+ gen9_vp9_encoder.h \
153+ gen9_vp9_encapi.h \
154+ gen9_vp9_const_def.h \
155+ gen9_vp9_encoder_kernels.h \
149156 $(NULL)
150157
151158 i965_drv_video_la_LTLIBRARIES = i965_drv_video.la
--- /dev/null
+++ b/src/gen9_vp9_const_def.c
@@ -0,0 +1,1716 @@
1+/*
2+ * * Copyright (c) 2016, Intel Corporation
3+ *
4+ * All rights reserved.
5+ * Redistribution. Redistribution and use in binary form, without modification, are
6+ * permitted provided that the following conditions are met:
7+ * Redistributions must reproduce the above copyright notice and the following
8+ * disclaimer in the documentation and/or other materials provided with the
9+ * distribution.
10+ * Neither the name of Intel Corporation nor the names of its suppliers may be used
11+ * to endorse or promote products derived from this software without specific prior
12+ * written permission.
13+ * No reverse engineering, decompilation, or disassembly of this software is permitted.
14+ * Limited patent license. Intel Corporation grants a world-wide, royalty-free,
15+ * nonexclusive license under patents it now or hereafter owns or controls to make, have made,
16+ * use, import, offer to sell and sell (.Utilize.) this software, but solely to the extent that any
17+ * such patent is necessary to Utilize the software alone. The patent license shall not apply
18+ * to any combinations which include this software. No hardware per se is licensed here under.
19+
20+ * DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
21+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
22+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
25+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
30+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
32+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33+ */
34+
35+#include <stdio.h>
36+#include <stdlib.h>
37+#include <stdint.h>
38+
39+const unsigned int vp9_fullspiral_ime_search_path_delta[14] = {
40+ 0x0101F00F, 0x0F0F1010, 0xF0F0F00F, 0x01010101, 0x10101010, 0x0F0F0F0F, 0xF0F0F00F, 0x0101F0F0, 0x01010101, 0x10101010, 0x0F0F1010, 0x0F0F0F0F, 0xF0F0F00F, 0xF0F0F0F0
41+};
42+
43+const unsigned int vp9_diamond_ime_search_path_delta[14] = {
44+ 0x120FF10F, 0x1E22E20D, 0x20E2FF10, 0x2EDD06FC, 0x11D33FF1, 0xEB1FF33D, 0x4EF1F1F1, 0xF1F21211, 0x0DFFFFE0, 0x11201F1F, 0x1105F1CF, 0x00000000, 0x00000000, 0x00000000
45+};
46+
47+const unsigned int vp9_brc_const_data_i_g9[4448] = {
48+ 0x0032000A, 0x00960064, 0x67614B28, 0xFCFAA07D, 0x040200FE, 0x03010106, 0x05280102, 0x04010305,
49+ 0x78503C1E, 0x04FFC88C, 0x78503C1E, 0x28FFC88C, 0x02B47850, 0x120E0A06, 0x0A060402, 0x0200000E,
50+ 0x00000804, 0xFE040200, 0x02000000, 0x00FEFCFA, 0xFCF8F600, 0xF4F200FE, 0xEEFEFCF8, 0xFEFCF6F2,
51+ 0x100A0402, 0x08040214, 0x0200100C, 0x000C0804, 0x04020000, 0x000000FE, 0xFEFEFC02, 0xFCFA0000,
52+ 0xF600FEFE, 0x00FEFCFA, 0xFCF8F4F2, 0x000000FE, 0x0C080000, 0x00001410, 0x06000000, 0xFE120E0A,
53+ 0x00000000, 0x0E0C0806, 0x0000FEFC, 0x06040200, 0xFEFCFA0A, 0x02000000, 0xFCF80A06, 0x000000FE,
54+ 0xF60A0602, 0x00FEFCFA, 0x0A060200, 0xFEFCF8F4, 0x06020000, 0xFCF8F40A, 0x020000FE, 0x00000A06,
55+ 0x06000000, 0x00120E0A, 0x00000000, 0x100C0A06, 0x000000FE, 0x0E0A0600, 0x00FEFC10, 0x08040000,
56+ 0xFCFA0C0A, 0x000000FE, 0xF80A0802, 0x0000FEFC, 0x0A080200, 0xFEFEFCF8, 0x08000000, 0xFCFAF80A,
57+ 0x000000FE, 0xF8F60A02, 0x0000FEFC, 0x00080200, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
58+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
59+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
60+ 0x02061200, 0x00000036, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
61+ 0x00000000, 0x00000000, 0x28190702, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010002,
62+ 0x050D2501, 0x0000006D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
63+ 0x00000000, 0x00000000, 0x38290E03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020004,
64+ 0x050D2502, 0x0000006D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
65+ 0x00000000, 0x00000000, 0x38290E03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020004,
66+ 0x050D2503, 0x0000006D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
67+ 0x00000000, 0x00000000, 0x38290E03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020004,
68+ 0x06102E04, 0x00000088, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
69+ 0x00000000, 0x00000000, 0x3A2B1904, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020005,
70+ 0x06102E05, 0x00000088, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
71+ 0x00000000, 0x00000000, 0x3A2B1904, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020005,
72+ 0x07133706, 0x000000A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
73+ 0x00000000, 0x00000000, 0x3C2E1B05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030006,
74+ 0x07133707, 0x000000A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
75+ 0x00000000, 0x00000000, 0x3C2E1B05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030006,
76+ 0x07133708, 0x000000A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
77+ 0x00000000, 0x00000000, 0x3C2E1B05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030006,
78+ 0x08164009, 0x000000BE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
79+ 0x00000000, 0x00000000, 0x3E381D05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030007,
80+ 0x0816400A, 0x000000BE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
81+ 0x00000000, 0x00000000, 0x3E381D05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030007,
82+ 0x0A1A4A0B, 0x000000DA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
83+ 0x00000000, 0x00000000, 0x48391E06, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040008,
84+ 0x0A1A4A0C, 0x000000DA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
85+ 0x00000000, 0x00000000, 0x48391E06, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040008,
86+ 0x0B1D530D, 0x000000F5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
87+ 0x00000000, 0x00000000, 0x493A2807, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040009,
88+ 0x0B1D530E, 0x000000F5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
89+ 0x00000000, 0x00000000, 0x493A2807, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040009,
90+ 0x0B1D530F, 0x000000F5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
91+ 0x00000000, 0x00000000, 0x493A2807, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040009,
92+ 0x0C205C10, 0x00000110, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
93+ 0x00000000, 0x00000000, 0x4A3B2908, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000A,
94+ 0x0C205C11, 0x00000110, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
95+ 0x00000000, 0x00000000, 0x4A3B2908, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000A,
96+ 0x0D236512, 0x0000012B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
97+ 0x00000000, 0x00000000, 0x4B3C2A09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000B,
98+ 0x0D236513, 0x0000012B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
99+ 0x00000000, 0x00000000, 0x4B3C2A09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000B,
100+ 0x0E266E14, 0x00000146, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
101+ 0x00000000, 0x00000000, 0x4C3E2B09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000C,
102+ 0x0E266E15, 0x00000146, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
103+ 0x00000000, 0x00000000, 0x4C3E2B09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000C,
104+ 0x102A7816, 0x00000162, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
105+ 0x00000000, 0x00000000, 0x4D3F2C0A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000D,
106+ 0x102A7817, 0x00000162, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
107+ 0x00000000, 0x00000000, 0x4D3F2C0A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000D,
108+ 0x102A7818, 0x00000162, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
109+ 0x00000000, 0x00000000, 0x4D3F2C0A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000D,
110+ 0x112D8119, 0x0000017D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
111+ 0x00000000, 0x00000000, 0x4E482C0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000E,
112+ 0x112D811A, 0x0000017D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
113+ 0x00000000, 0x00000000, 0x4E482C0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000E,
114+ 0x12308A1B, 0x00000198, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
115+ 0x00000000, 0x00000000, 0x4F482D0C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000F,
116+ 0x12308A1C, 0x00000198, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
117+ 0x00000000, 0x00000000, 0x4F482D0C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000F,
118+ 0x1333931D, 0x000001B3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
119+ 0x00000000, 0x00000000, 0x58492E0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080010,
120+ 0x1333931E, 0x000001B3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
121+ 0x00000000, 0x00000000, 0x58492E0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080010,
122+ 0x1333931F, 0x000001B3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
123+ 0x00000000, 0x00000000, 0x58492E0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080010,
124+ 0x14369C20, 0x000001CE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
125+ 0x00000000, 0x00000000, 0x594A2F0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080011,
126+ 0x14369C21, 0x000001CE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
127+ 0x00000000, 0x00000000, 0x594A2F0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080011,
128+ 0x163AA622, 0x000001EA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
129+ 0x00000000, 0x00000000, 0x594A380E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090012,
130+ 0x163AA623, 0x000001EA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
131+ 0x00000000, 0x00000000, 0x594A380E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090012,
132+ 0x173DAF24, 0x00000205, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
133+ 0x00000000, 0x00000000, 0x5A4B380F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090013,
134+ 0x173DAF25, 0x00000205, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
135+ 0x00000000, 0x00000000, 0x5A4B380F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090013,
136+ 0x173DAF26, 0x00000205, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
137+ 0x00000000, 0x00000000, 0x5A4B380F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090013,
138+ 0x1840B827, 0x00000220, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
139+ 0x00000000, 0x00000000, 0x5A4B3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0014,
140+ 0x1840B828, 0x00000220, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
141+ 0x00000000, 0x00000000, 0x5A4B3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0014,
142+ 0x1943C129, 0x0000023B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
143+ 0x00000000, 0x00000000, 0x5B4C3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0015,
144+ 0x1943C12A, 0x0000023B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
145+ 0x00000000, 0x00000000, 0x5B4C3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0015,
146+ 0x1943C12B, 0x0000023B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
147+ 0x00000000, 0x00000000, 0x5B4C3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0015,
148+ 0x1A46CA2C, 0x00000256, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
149+ 0x00000000, 0x00000000, 0x5B4C3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0016,
150+ 0x1A46CA2D, 0x00000256, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
151+ 0x00000000, 0x00000000, 0x5B4C3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0016,
152+ 0x1B49D32E, 0x00000271, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
153+ 0x00000000, 0x00000000, 0x5C4D3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0017,
154+ 0x1B49D32F, 0x00000271, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
155+ 0x00000000, 0x00000000, 0x5C4D3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0017,
156+ 0x1D4DDD30, 0x0000028D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
157+ 0x00000000, 0x00000000, 0x5C4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0018,
158+ 0x1D4DDD31, 0x0000028D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
159+ 0x00000000, 0x00000000, 0x5C4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0018,
160+ 0x1D4DDD32, 0x0000028D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
161+ 0x00000000, 0x00000000, 0x5C4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0018,
162+ 0x1E50E633, 0x000002A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
163+ 0x00000000, 0x00000000, 0x5D4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0019,
164+ 0x1E50E634, 0x000002A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
165+ 0x00000000, 0x00000000, 0x5D4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0019,
166+ 0x1F53EF35, 0x000002C3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
167+ 0x00000000, 0x00000000, 0x5D4F3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001A,
168+ 0x1F53EF36, 0x000002C3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
169+ 0x00000000, 0x00000000, 0x5D4F3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001A,
170+ 0x1F53EF37, 0x000002C3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
171+ 0x00000000, 0x00000000, 0x5D4F3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001A,
172+ 0x2056F838, 0x000002DE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
173+ 0x00000000, 0x00000000, 0x5E4F3C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001B,
174+ 0x2056F839, 0x000002DE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
175+ 0x00000000, 0x00000000, 0x5E4F3C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001B,
176+ 0x2159FF3A, 0x000002F9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
177+ 0x00000000, 0x00000000, 0x5E583C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001C,
178+ 0x2159FF3B, 0x000002F9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
179+ 0x00000000, 0x00000000, 0x5E583C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001C,
180+ 0x2159FF3C, 0x000002F9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
181+ 0x00000000, 0x00000000, 0x5E583C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001C,
182+ 0x235DFF3D, 0x00000315, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
183+ 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001D,
184+ 0x235DFF3E, 0x00000315, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
185+ 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001D,
186+ 0x2460FF3F, 0x00000330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
187+ 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001E,
188+ 0x2460FF40, 0x00000330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
189+ 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001E,
190+ 0x2563FF41, 0x0000034B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
191+ 0x00000000, 0x00000000, 0x68593E1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001F,
192+ 0x2563FF42, 0x0000034B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
193+ 0x00000000, 0x00000000, 0x68593E1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001F,
194+ 0x2563FF43, 0x0000034B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
195+ 0x00000000, 0x00000000, 0x68593E1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001F,
196+ 0x2666FF44, 0x00000366, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
197+ 0x00000000, 0x00000000, 0x68593E1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100020,
198+ 0x2666FF45, 0x00000366, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
199+ 0x00000000, 0x00000000, 0x68593E1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100020,
200+ 0x2769FF46, 0x00000381, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
201+ 0x00000000, 0x00000000, 0x68593F1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100021,
202+ 0x2769FF47, 0x00000381, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
203+ 0x00000000, 0x00000000, 0x68593F1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100021,
204+ 0x2769FF48, 0x00000381, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
205+ 0x00000000, 0x00000000, 0x68593F1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100021,
206+ 0x296DFF49, 0x0000039D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
207+ 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110022,
208+ 0x296DFF4A, 0x0000039D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
209+ 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110022,
210+ 0x2A70FF4B, 0x000003B8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
211+ 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110023,
212+ 0x2A70FF4C, 0x000003B8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
213+ 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110023,
214+ 0x2A70FF4D, 0x000003B8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
215+ 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110023,
216+ 0x2B73FF4E, 0x000003D3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
217+ 0x00000000, 0x00000000, 0x695A481E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120024,
218+ 0x2B73FF4F, 0x000003D3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
219+ 0x00000000, 0x00000000, 0x695A481E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120024,
220+ 0x2C76FF50, 0x000003EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
221+ 0x00000000, 0x00000000, 0x695A481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120025,
222+ 0x2C76FF51, 0x000003EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
223+ 0x00000000, 0x00000000, 0x695A481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120025,
224+ 0x2C76FF52, 0x000003EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
225+ 0x00000000, 0x00000000, 0x695A481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120025,
226+ 0x2D79FF53, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
227+ 0x00000000, 0x00000000, 0x6A5B481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130026,
228+ 0x2D79FF54, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
229+ 0x00000000, 0x00000000, 0x6A5B481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130026,
230+ 0x2F7DFF55, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
231+ 0x00000000, 0x00000000, 0x6A5B491F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130027,
232+ 0x2F7DFF56, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
233+ 0x00000000, 0x00000000, 0x6A5B491F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130027,
234+ 0x2F7DFF57, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
235+ 0x00000000, 0x00000000, 0x6A5B491F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130027,
236+ 0x3080FF58, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
237+ 0x00000000, 0x00000000, 0x6A5B4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140028,
238+ 0x3080FF59, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
239+ 0x00000000, 0x00000000, 0x6A5B4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140028,
240+ 0x3080FF5A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
241+ 0x00000000, 0x00000000, 0x6A5B4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140028,
242+ 0x3183FF5B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
243+ 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140029,
244+ 0x3183FF5C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
245+ 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140029,
246+ 0x3286FF5D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
247+ 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002A,
248+ 0x3286FF5E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
249+ 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002A,
250+ 0x3286FF5F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
251+ 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002A,
252+ 0x3389FF60, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
253+ 0x00000000, 0x00000000, 0x6B5C4929, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002B,
254+ 0x358DFF61, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
255+ 0x00000000, 0x00000000, 0x6B5C4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0016002C,
256+ 0x3690FF62, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
257+ 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0016002D,
258+ 0x3793FF63, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
259+ 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017002E,
260+ 0x3793FF64, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
261+ 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017002E,
262+ 0x3896FF65, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
263+ 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017002F,
264+ 0x3999FF66, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
265+ 0x00000000, 0x00000000, 0x6C5D4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180030,
266+ 0x3B9DFF67, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
267+ 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180031,
268+ 0x3B9DFF68, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
269+ 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180031,
270+ 0x3CA0FF69, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
271+ 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00190032,
272+ 0x3DA3FF6A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
273+ 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00190033,
274+ 0x3EA6FF6B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
275+ 0x00000000, 0x00000000, 0x6D5F4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001A0034,
276+ 0x3EA6FF6C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
277+ 0x00000000, 0x00000000, 0x6D5F4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001A0034,
278+ 0x3FA9FF6D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
279+ 0x00000000, 0x00000000, 0x6E5F4C2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001A0035,
280+ 0x41ADFF6E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
281+ 0x00000000, 0x00000000, 0x6E5F4C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001B0036,
282+ 0x42B0FF6F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
283+ 0x00000000, 0x00000000, 0x6E5F4C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001B0037,
284+ 0x42B0FF70, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
285+ 0x00000000, 0x00000000, 0x6E5F4C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001B0037,
286+ 0x43B3FF71, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
287+ 0x00000000, 0x00000000, 0x6E684C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0038,
288+ 0x44B6FF72, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
289+ 0x00000000, 0x00000000, 0x6F684D2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0039,
290+ 0x45B9FF73, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
291+ 0x00000000, 0x00000000, 0x6F684D2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001D003A,
292+ 0x45B9FF74, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
293+ 0x00000000, 0x00000000, 0x6F684D2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001D003A,
294+ 0x47BDFF75, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
295+ 0x00000000, 0x00000000, 0x6F684D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001D003B,
296+ 0x48C0FF76, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
297+ 0x00000000, 0x00000000, 0x6F684D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001E003C,
298+ 0x48C0FF77, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
299+ 0x00000000, 0x00000000, 0x6F684D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001E003C,
300+ 0x49C3FF78, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
301+ 0x00000000, 0x00000000, 0x78694D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001E003D,
302+ 0x4AC6FF79, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
303+ 0x00000000, 0x00000000, 0x78694E2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F003E,
304+ 0x4BC9FF7A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
305+ 0x00000000, 0x00000000, 0x78694E2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F003F,
306+ 0x4DCDFF7B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
307+ 0x00000000, 0x00000000, 0x78694E2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200040,
308+ 0x4ED0FF7C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
309+ 0x00000000, 0x00000000, 0x78694E2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200041,
310+ 0x50D6FF7D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
311+ 0x00000000, 0x00000000, 0x79694F2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00210043,
312+ 0x51D9FF7E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
313+ 0x00000000, 0x00000000, 0x796A4F2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00220044,
314+ 0x52DCFF7F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
315+ 0x00000000, 0x00000000, 0x796A4F2E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00220045,
316+ 0x54E0FF80, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
317+ 0x00000000, 0x00000000, 0x796A4F2E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00230046,
318+ 0x55E3FF81, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
319+ 0x00000000, 0x00000000, 0x796A582E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00230047,
320+ 0x56E6FF82, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
321+ 0x00000000, 0x00000000, 0x796A582E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00240048,
322+ 0x57E9FF83, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
323+ 0x00000000, 0x00000000, 0x796A582E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00240049,
324+ 0x58ECFF84, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
325+ 0x00000000, 0x00000000, 0x796A582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0025004A,
326+ 0x5AF0FF85, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
327+ 0x00000000, 0x00000000, 0x7A6B582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0025004B,
328+ 0x5BF3FF86, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
329+ 0x00000000, 0x00000000, 0x7A6B582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0026004C,
330+ 0x5CF6FF87, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
331+ 0x00000000, 0x00000000, 0x7A6B582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0026004D,
332+ 0x5DF9FF88, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
333+ 0x00000000, 0x00000000, 0x7A6B592F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0027004E,
334+ 0x5EFCFF89, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
335+ 0x00000000, 0x00000000, 0x7A6B5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0027004F,
336+ 0x60FFFF8A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
337+ 0x00000000, 0x00000000, 0x7A6B5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280050,
338+ 0x62FFFF8B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
339+ 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00290052,
340+ 0x63FFFF8C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
341+ 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00290053,
342+ 0x64FFFF8D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
343+ 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002A0054,
344+ 0x67FFFF8E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
345+ 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002B0056,
346+ 0x68FFFF8F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
347+ 0x00000000, 0x00000000, 0x7B6C5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002B0057,
348+ 0x69FFFF90, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
349+ 0x00000000, 0x00000000, 0x7B6C5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002C0058,
350+ 0x6CFFFF91, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
351+ 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002D005A,
352+ 0x6DFFFF92, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
353+ 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002D005B,
354+ 0x6EFFFF93, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
355+ 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002E005C,
356+ 0x6FFFFF94, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
357+ 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002E005D,
358+ 0x72FFFF95, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
359+ 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002F005F,
360+ 0x73FFFF96, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
361+ 0x00000000, 0x00000000, 0x7C6D5B39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300060,
362+ 0x74FFFF97, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
363+ 0x00000000, 0x00000000, 0x7C6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300061,
364+ 0x76FFFF98, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
365+ 0x00000000, 0x00000000, 0x7D6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00310063,
366+ 0x79FFFF99, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
367+ 0x00000000, 0x00000000, 0x7D6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00320065,
368+ 0x7AFFFF9A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
369+ 0x00000000, 0x00000000, 0x7D6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00330066,
370+ 0x7CFFFF9B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
371+ 0x00000000, 0x00000000, 0x7D6F5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00340068,
372+ 0x7EFFFF9C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
373+ 0x00000000, 0x00000000, 0x7D6F5C3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00340069,
374+ 0x80FFFF9D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
375+ 0x00000000, 0x00000000, 0x7E6F5C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0035006B,
376+ 0x81FFFF9E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
377+ 0x00000000, 0x00000000, 0x7E6F5C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0036006C,
378+ 0x83FFFF9F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
379+ 0x00000000, 0x00000000, 0x7E6F5C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0037006E,
380+ 0x85FFFFA0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
381+ 0x00000000, 0x00000000, 0x7E785C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0037006F,
382+ 0x87FFFFA1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
383+ 0x00000000, 0x00000000, 0x7E785C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00380071,
384+ 0x89FFFFA2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
385+ 0x00000000, 0x00000000, 0x7F785D3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00390073,
386+ 0x8BFFFFA3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
387+ 0x00000000, 0x00000000, 0x7F785D3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003A0074,
388+ 0x8DFFFFA4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
389+ 0x00000000, 0x00000000, 0x7F785D3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003B0076,
390+ 0x8FFFFFA5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
391+ 0x00000000, 0x00000000, 0x7F785D3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0078,
392+ 0x91FFFFA6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
393+ 0x00000000, 0x00000000, 0x88785D3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0079,
394+ 0x93FFFFA7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
395+ 0x00000000, 0x00000000, 0x88795E3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003D007B,
396+ 0x95FFFFA8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
397+ 0x00000000, 0x00000000, 0x88795E3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003E007D,
398+ 0x97FFFFA9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
399+ 0x00000000, 0x00000000, 0x88795E3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F007E,
400+ 0x99FFFFAA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
401+ 0x00000000, 0x00000000, 0x88795E3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400080,
402+ 0x9BFFFFAB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
403+ 0x00000000, 0x00000000, 0x88795E3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00410082,
404+ 0x9EFFFFAC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
405+ 0x00000000, 0x00000000, 0x88795F3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00420084,
406+ 0xA0FFFFAD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
407+ 0x00000000, 0x00000000, 0x89795F3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00430086,
408+ 0xA3FFFFAE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
409+ 0x00000000, 0x00000000, 0x897A5F3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00440088,
410+ 0xA5FFFFAF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
411+ 0x00000000, 0x00000000, 0x897A5F3E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0045008A,
412+ 0xA7FFFFB0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
413+ 0x00000000, 0x00000000, 0x897A5F3E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0046008C,
414+ 0xAAFFFFB1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
415+ 0x00000000, 0x00000000, 0x897A683E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0047008E,
416+ 0xACFFFFB2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
417+ 0x00000000, 0x00000000, 0x897A683E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00480090,
418+ 0xAFFFFFB3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
419+ 0x00000000, 0x00000000, 0x897A683E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00490092,
420+ 0xB1FFFFB4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
421+ 0x00000000, 0x00000000, 0x897A683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004A0094,
422+ 0xB3FFFFB5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
423+ 0x00000000, 0x00000000, 0x8A7B683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004B0096,
424+ 0xB6FFFFB6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
425+ 0x00000000, 0x00000000, 0x8A7B683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004C0098,
426+ 0xB8FFFFB7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
427+ 0x00000000, 0x00000000, 0x8A7B683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004D009A,
428+ 0xBAFFFFB8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
429+ 0x00000000, 0x00000000, 0x8A7B693F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004E009C,
430+ 0xBDFFFFB9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
431+ 0x00000000, 0x00000000, 0x8A7B693F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004F009E,
432+ 0xC0FFFFBA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
433+ 0x00000000, 0x00000000, 0x8A7B6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005000A1,
434+ 0xC3FFFFBB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
435+ 0x00000000, 0x00000000, 0x8A7B6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005100A3,
436+ 0xC5FFFFBC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
437+ 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005200A5,
438+ 0xC8FFFFBD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
439+ 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005300A7,
440+ 0xCBFFFFBE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
441+ 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005500AA,
442+ 0xCEFFFFBF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
443+ 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005600AC,
444+ 0xD0FFFFC0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
445+ 0x00000000, 0x00000000, 0x8B7C6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005700AE,
446+ 0xD4FFFFC1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
447+ 0x00000000, 0x00000000, 0x8B7C6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005800B1,
448+ 0xD6FFFFC2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
449+ 0x00000000, 0x00000000, 0x8B7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005900B3,
450+ 0xDAFFFFC3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
451+ 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005B00B6,
452+ 0xDCFFFFC4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
453+ 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005C00B8,
454+ 0xE0FFFFC5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
455+ 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005D00BB,
456+ 0xE2FFFFC6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
457+ 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005E00BD,
458+ 0xE6FFFFC7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
459+ 0x00000000, 0x00000000, 0x8C7D6B49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006000C0,
460+ 0xE8FFFFC8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
461+ 0x00000000, 0x00000000, 0x8C7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006100C2,
462+ 0xEBFFFFC9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
463+ 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006200C5,
464+ 0xEFFFFFCA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
465+ 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006400C8,
466+ 0xF3FFFFCB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
467+ 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006500CB,
468+ 0xF5FFFFCC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
469+ 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006600CD,
470+ 0xF9FFFFCD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
471+ 0x00000000, 0x00000000, 0x8D7F6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006800D0,
472+ 0xFCFFFFCE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
473+ 0x00000000, 0x00000000, 0x8E7F6C4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006900D3,
474+ 0xFFFFFFCF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
475+ 0x00000000, 0x00000000, 0x8E7F6C4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006B00D6,
476+ 0xFFFFFFD0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
477+ 0x00000000, 0x00000000, 0x8E7F6C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006C00D9,
478+ 0xFFFFFFD1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
479+ 0x00000000, 0x00000000, 0x8E7F6C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006E00DC,
480+ 0xFFFFFFD2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
481+ 0x00000000, 0x00000000, 0x8E886C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006F00DF,
482+ 0xFFFFFFD3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
483+ 0x00000000, 0x00000000, 0x8F886C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007100E3,
484+ 0xFFFFFFD4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
485+ 0x00000000, 0x00000000, 0x8F886D4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007300E6,
486+ 0xFFFFFFD5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
487+ 0x00000000, 0x00000000, 0x8F886D4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007400E9,
488+ 0xFFFFFFD6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
489+ 0x00000000, 0x00000000, 0x8F886D4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007600ED,
490+ 0xFFFFFFD7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
491+ 0x00000000, 0x00000000, 0x8F886D4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007800F1,
492+ 0xFFFFFFD8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
493+ 0x00000000, 0x00000000, 0x8F896D4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007A00F4,
494+ 0xFFFFFFD9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
495+ 0x00000000, 0x00000000, 0x8F896E4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007C00F8,
496+ 0xFFFFFFDA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
497+ 0x00000000, 0x00000000, 0x8F896E4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007E00FC,
498+ 0xFFFFFFDB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
499+ 0x00000000, 0x00000000, 0x8F896E4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800100,
500+ 0xFFFFFFDC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
501+ 0x00000000, 0x00000000, 0x8F896E4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00820105,
502+ 0xFFFFFFDD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
503+ 0x00000000, 0x00000000, 0x8F896F4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00840109,
504+ 0xFFFFFFDE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
505+ 0x00000000, 0x00000000, 0x8F896F4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0086010D,
506+ 0xFFFFFFDF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
507+ 0x00000000, 0x00000000, 0x8F8A6F4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00890112,
508+ 0xFFFFFFE0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
509+ 0x00000000, 0x00000000, 0x8F8A6F4E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x008B0117,
510+ 0xFFFFFFE1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
511+ 0x00000000, 0x00000000, 0x8F8A784E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x008E011C,
512+ 0xFFFFFFE2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
513+ 0x00000000, 0x00000000, 0x8F8A784E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00900121,
514+ 0xFFFFFFE3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
515+ 0x00000000, 0x00000000, 0x8F8A784E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00930127,
516+ 0xFFFFFFE4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
517+ 0x00000000, 0x00000000, 0x8F8B784F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0096012D,
518+ 0xFFFFFFE5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
519+ 0x00000000, 0x00000000, 0x8F8B784F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00990133,
520+ 0xFFFFFFE6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
521+ 0x00000000, 0x00000000, 0x8F8B794F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x009C0139,
522+ 0xFFFFFFE7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
523+ 0x00000000, 0x00000000, 0x8F8B7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A00140,
524+ 0xFFFFFFE8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
525+ 0x00000000, 0x00000000, 0x8F8B7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A30147,
526+ 0xFFFFFFE9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
527+ 0x00000000, 0x00000000, 0x8F8C7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A7014E,
528+ 0xFFFFFFEA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
529+ 0x00000000, 0x00000000, 0x8F8C7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00AB0156,
530+ 0xFFFFFFEB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
531+ 0x00000000, 0x00000000, 0x8F8C7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00AF015E,
532+ 0xFFFFFFEC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
533+ 0x00000000, 0x00000000, 0x8F8D7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00B30166,
534+ 0xFFFFFFED, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
535+ 0x00000000, 0x00000000, 0x8F8D7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00B80170,
536+ 0xFFFFFFEE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
537+ 0x00000000, 0x00000000, 0x8F8D7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00BC0179,
538+ 0xFFFFFFEF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
539+ 0x00000000, 0x00000000, 0x8F8E7B59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C10183,
540+ 0xFFFFFFF0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
541+ 0x00000000, 0x00000000, 0x8F8E7B5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C7018E,
542+ 0xFFFFFFF1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
543+ 0x00000000, 0x00000000, 0x8F8E7B5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00CC0199,
544+ 0xFFFFFFF2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
545+ 0x00000000, 0x00000000, 0x8F8F7C5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00D201A5,
546+ 0xFFFFFFF3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
547+ 0x00000000, 0x00000000, 0x8F8F7C5B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00D901B2,
548+ 0xFFFFFFF4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
549+ 0x00000000, 0x00000000, 0x8F8F7C5B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00E001C0,
550+ 0xFFFFFFF5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
551+ 0x00000000, 0x00000000, 0x8F8F7D5B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00E701CE,
552+ 0xFFFFFFF6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
553+ 0x00000000, 0x00000000, 0x8F8F7D5C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00EE01DD,
554+ 0xFFFFFFF7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
555+ 0x00000000, 0x00000000, 0x8F8F7E5C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F701EE,
556+ 0xFFFFFFF8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
557+ 0x00000000, 0x00000000, 0x8F8F7E5C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF01FF,
558+ 0xFFFFFFF9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
559+ 0x00000000, 0x00000000, 0x8F8F7F5D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01080211,
560+ 0xFFFFFFFA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
561+ 0x00000000, 0x00000000, 0x8F8F7F5D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01120225,
562+ 0xFFFFFFFB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
563+ 0x00000000, 0x00000000, 0x8F8F885E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x011C0239,
564+ 0xFFFFFFFC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
565+ 0x00000000, 0x00000000, 0x8F8F885E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01280250,
566+ 0xFFFFFFFD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
567+ 0x00000000, 0x00000000, 0x8F8F885F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01340268,
568+ 0xFFFFFFFE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
569+ 0x00000000, 0x00000000, 0x8F8F8968, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01400281,
570+ 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
571+ 0x00000000, 0x00000000, 0x8F8F8968, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x014E029C,
572+ 0x00080004, 0x00090008, 0x000B000A, 0x000C000C, 0x000E000D, 0x0010000F, 0x00120011, 0x00130013,
573+ 0x00150014, 0x00170016, 0x00190018, 0x001A001A, 0x001C001B, 0x001E001D, 0x0020001F, 0x00210020,
574+ 0x00230022, 0x00250024, 0x00260026, 0x00280027, 0x002A0029, 0x002B002B, 0x002D002C, 0x002F002E,
575+ 0x00300030, 0x00320031, 0x00340033, 0x00350035, 0x00370036, 0x00390038, 0x003A0039, 0x003C003B,
576+ 0x003E003D, 0x003F003E, 0x00410040, 0x00420042, 0x00440043, 0x00460045, 0x00470046, 0x00490048,
577+ 0x004A004A, 0x004C004B, 0x004E004D, 0x004F004E, 0x00510050, 0x00520051, 0x00540053, 0x00550055,
578+ 0x00580057, 0x005C005A, 0x005F005D, 0x00620060, 0x00650063, 0x00680066, 0x006B0069, 0x006E006C,
579+ 0x0071006F, 0x00740072, 0x00760075, 0x00790078, 0x007D007B, 0x0081007F, 0x00860083, 0x008A0088,
580+ 0x008E008C, 0x00920090, 0x00960094, 0x009A0098, 0x009E009C, 0x00A400A1, 0x00A900A6, 0x00AE00AC,
581+ 0x00B400B1, 0x00B900B6, 0x00BE00BB, 0x00C300C0, 0x00CA00C7, 0x00D000CD, 0x00D600D3, 0x00DC00D9,
582+ 0x00E200DF, 0x00E900E6, 0x00F000ED, 0x00F700F3, 0x00FD00FA, 0x01050101, 0x010D0109, 0x01140110,
583+ 0x011C0118, 0x01240120, 0x012C0128, 0x01350130, 0x013D0139, 0x01460142, 0x014F014A, 0x01580154,
584+ 0x0162015D, 0x016C0167, 0x01760171, 0x0180017B, 0x018B0185, 0x01960190, 0x01A1019B, 0x01AD01A7,
585+ 0x01B901B3, 0x01C601BF, 0x01D301CD, 0x01E201DB, 0x01F101E9, 0x020101F9, 0x0212020A, 0x0225021B,
586+ 0x0239022F, 0x024E0243, 0x0266025A, 0x02800272, 0x029C028E, 0x02BC02AC, 0x02E002CD, 0x030702F3,
587+ 0x0333031C, 0x0365034B, 0x039D0380, 0x03DC03BB, 0x042203FE, 0x0473044A, 0x04D004A0, 0x05380502,
588+ 0x00080004, 0x000A0009, 0x000C000B, 0x000E000D, 0x0010000F, 0x00120011, 0x00140013, 0x00160015,
589+ 0x00180017, 0x001A0019, 0x001C001B, 0x001E001D, 0x0020001F, 0x00220021, 0x00240023, 0x00260025,
590+ 0x00280027, 0x002A0029, 0x002C002B, 0x002E002D, 0x0030002F, 0x00320031, 0x00340033, 0x00360035,
591+ 0x00380037, 0x003A0039, 0x003C003B, 0x003E003D, 0x0040003F, 0x00420041, 0x00440043, 0x00460045,
592+ 0x00480047, 0x004A0049, 0x004C004B, 0x004E004D, 0x0050004F, 0x00520051, 0x00540053, 0x00560055,
593+ 0x00580057, 0x005A0059, 0x005C005B, 0x005E005D, 0x0060005F, 0x00620061, 0x00640063, 0x00660065,
594+ 0x006A0068, 0x006E006C, 0x00720070, 0x00760074, 0x007A0078, 0x007E007C, 0x00820080, 0x00860084,
595+ 0x008A0088, 0x008E008C, 0x00920090, 0x00960094, 0x009B0098, 0x00A1009E, 0x00A700A4, 0x00AD00AA,
596+ 0x00B300B0, 0x00B900B6, 0x00BF00BC, 0x00C500C2, 0x00CB00C8, 0x00D300CF, 0x00DB00D7, 0x00E300DF,
597+ 0x00EB00E7, 0x00F300EF, 0x00FB00F7, 0x010400FF, 0x010E0109, 0x01180113, 0x0122011D, 0x012C0127,
598+ 0x01370131, 0x0143013D, 0x014F0149, 0x015B0155, 0x01670161, 0x0175016E, 0x0183017C, 0x0191018A,
599+ 0x01A00198, 0x01B001A8, 0x01C001B8, 0x01D101C8, 0x01E301DA, 0x01F501EC, 0x020801FE, 0x021C0212,
600+ 0x02300226, 0x0246023B, 0x025C0251, 0x02730267, 0x028B027F, 0x02A40297, 0x02BE02B1, 0x02D902CB,
601+ 0x02F502E7, 0x03120303, 0x03300321, 0x03500340, 0x03710360, 0x03930382, 0x03B703A5, 0x03DC03C9,
602+ 0x040203EF, 0x042A0416, 0x0454043F, 0x047F0469, 0x04AC0495, 0x04DB04C3, 0x050C04F3, 0x053F0525,
603+ 0x05740559, 0x05AB058F, 0x05E405C7, 0x061F0601, 0x065C063D, 0x069C067C, 0x06DF06BD, 0x07240701
604+};
605+
606+const unsigned int vp9_brc_const_data_p_g9[4448] = {
607+ 0x0032000A, 0x00960064, 0x67614B28, 0xFCFAA07D, 0x040200FE, 0x03010106, 0x05280102, 0x04010305,
608+ 0x78503C1E, 0x04FFC88C, 0x78503C1E, 0x28FFC88C, 0x02B47850, 0x120E0A06, 0x0A060402, 0x0200000E,
609+ 0x00000804, 0xFE040200, 0x02000000, 0x00FEFCFA, 0xFCF8F600, 0xF4F200FE, 0xEEFEFCF8, 0xFEFCF6F2,
610+ 0x100A0402, 0x08040214, 0x0200100C, 0x000C0804, 0x04020000, 0x000000FE, 0xFEFEFC02, 0xFCFA0000,
611+ 0xF600FEFE, 0x00FEFCFA, 0xFCF8F4F2, 0x000000FE, 0x0C080000, 0x00001410, 0x06000000, 0xFE120E0A,
612+ 0x00000000, 0x0E0C0806, 0x0000FEFC, 0x06040200, 0xFEFCFA0A, 0x02000000, 0xFCF80A06, 0x000000FE,
613+ 0xF60A0602, 0x00FEFCFA, 0x0A060200, 0xFEFCF8F4, 0x06020000, 0xFCF8F40A, 0x020000FE, 0x00000A06,
614+ 0x06000000, 0x00120E0A, 0x00000000, 0x100C0A06, 0x000000FE, 0x0E0A0600, 0x00FEFC10, 0x08040000,
615+ 0xFCFA0C0A, 0x000000FE, 0xF80A0802, 0x0000FEFC, 0x0A080200, 0xFEFEFCF8, 0x08000000, 0xFCFAF80A,
616+ 0x000000FE, 0xF8F60A02, 0x0000FEFC, 0x00080200, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
617+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
618+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
619+ 0x040C2400, 0x00000000, 0x00010001, 0x00010000, 0x00010000, 0x00020002, 0x00030002, 0x00040003,
620+ 0x02020100, 0x04030302, 0x39070402, 0x6F6F0103, 0x00010001, 0x00000000, 0x00000004, 0x00010004,
621+ 0x08184801, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007,
622+ 0x04030200, 0x08070605, 0x490D0903, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x00020008,
623+ 0x08184802, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007,
624+ 0x04030200, 0x08070605, 0x490D0903, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x00020008,
625+ 0x091B5103, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007,
626+ 0x04030200, 0x08070605, 0x4A0F0A04, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x00020009,
627+ 0x0A1E5A04, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007,
628+ 0x04030200, 0x08070605, 0x4B180B04, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x0002000A,
629+ 0x0B216305, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007,
630+ 0x04030200, 0x08070605, 0x4D190C04, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x0002000B,
631+ 0x0C246C06, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A,
632+ 0x06050400, 0x0C0A0807, 0x4E1A0D05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000C,
633+ 0x0C246C07, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A,
634+ 0x06050400, 0x0C0A0807, 0x4E1A0D05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000C,
635+ 0x0D277508, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A,
636+ 0x06050400, 0x0C0A0807, 0x4F1B0E05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000D,
637+ 0x0E2A7E09, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A,
638+ 0x06050400, 0x0C0A0807, 0x581C0F05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000E,
639+ 0x0F2D870A, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A,
640+ 0x06050400, 0x0C0A0807, 0x591D1806, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000F,
641+ 0x1030900B, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D,
642+ 0x08060500, 0x180D0B0A, 0x591D1906, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040010,
643+ 0x1133990C, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D,
644+ 0x08060500, 0x180D0B0A, 0x5A1E1A07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040011,
645+ 0x1236A20D, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D,
646+ 0x08060500, 0x180D0B0A, 0x5A1F1A07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040012,
647+ 0x1339AB0E, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D,
648+ 0x08060500, 0x180D0B0A, 0x5B281B07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040013,
649+ 0x1339AB0F, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D,
650+ 0x08060500, 0x180D0B0A, 0x5B281B07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040013,
651+ 0x143CB410, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011,
652+ 0x0A080600, 0x1A190E0C, 0x5B281B08, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050014,
653+ 0x153FBD11, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011,
654+ 0x0A080600, 0x1A190E0C, 0x5C291C08, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050015,
655+ 0x1642C612, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011,
656+ 0x0A080600, 0x1A190E0C, 0x5D291C09, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050016,
657+ 0x1745CF13, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011,
658+ 0x0A080600, 0x1A190E0C, 0x5D2A1D09, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050017,
659+ 0x1848D814, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014,
660+ 0x0C090700, 0x1C1A190F, 0x5E2A1D09, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x00060018,
661+ 0x194BE115, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014,
662+ 0x0C090700, 0x1C1A190F, 0x5E2A1E0A, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x00060019,
663+ 0x1A4EEA16, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014,
664+ 0x0C090700, 0x1C1A190F, 0x5F2B1E0A, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x0006001A,
665+ 0x1A4EEA17, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014,
666+ 0x0C090700, 0x1C1A190F, 0x5F2B1E0A, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x0006001A,
667+ 0x1B51F318, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014,
668+ 0x0C090700, 0x1C1A190F, 0x5F2B1F0B, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x0006001B,
669+ 0x1C54FC19, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017,
670+ 0x0E0B0800, 0x1E1C1A19, 0x682C280B, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001C,
671+ 0x1D57FF1A, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017,
672+ 0x0E0B0800, 0x1E1C1A19, 0x682C280B, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001D,
673+ 0x1E5AFF1B, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017,
674+ 0x0E0B0800, 0x1E1C1A19, 0x692C280C, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001E,
675+ 0x1F5DFF1C, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017,
676+ 0x0E0B0800, 0x1E1C1A19, 0x692D290C, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001F,
677+ 0x2060FF1D, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B,
678+ 0x180D0900, 0x281E1C1A, 0x692D290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080020,
679+ 0x2060FF1E, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B,
680+ 0x180D0900, 0x281E1C1A, 0x692D290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080020,
681+ 0x2163FF1F, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B,
682+ 0x180D0900, 0x281E1C1A, 0x692E290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080021,
683+ 0x2266FF20, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B,
684+ 0x180D0900, 0x281E1C1A, 0x6A2E290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080022,
685+ 0x2369FF21, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B,
686+ 0x180D0900, 0x281E1C1A, 0x6A2E2A0E, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080023,
687+ 0x246CFF22, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E,
688+ 0x190E0B00, 0x291F1D1B, 0x6A2F2A0E, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090024,
689+ 0x256FFF23, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E,
690+ 0x190E0B00, 0x291F1D1B, 0x6B2F2A0E, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090025,
691+ 0x2672FF24, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E,
692+ 0x190E0B00, 0x291F1D1B, 0x6B382B0F, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090026,
693+ 0x2672FF25, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E,
694+ 0x190E0B00, 0x291F1D1B, 0x6B382B0F, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090026,
695+ 0x2775FF26, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E,
696+ 0x190E0B00, 0x291F1D1B, 0x6B382B0F, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090027,
697+ 0x2878FF27, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021,
698+ 0x1A180C00, 0x2A281E1C, 0x6B382B18, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A0028,
699+ 0x297BFF28, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021,
700+ 0x1A180C00, 0x2A281E1C, 0x6C382B18, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A0029,
701+ 0x2A7EFF29, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021,
702+ 0x1A180C00, 0x2A281E1C, 0x6C392C18, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A002A,
703+ 0x2B81FF2A, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021,
704+ 0x1A180C00, 0x2A281E1C, 0x6C392C19, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A002B,
705+ 0x2B81FF2B, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021,
706+ 0x1A180C00, 0x2A281E1C, 0x6C392C19, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A002B,
707+ 0x2C84FF2C, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025,
708+ 0x1B190D00, 0x2B29281E, 0x6D392C19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002C,
709+ 0x2D87FF2D, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025,
710+ 0x1B190D00, 0x2B29281E, 0x6D392C19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002D,
711+ 0x2E8AFF2E, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025,
712+ 0x1B190D00, 0x2B29281E, 0x6D392D19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002E,
713+ 0x2F8DFF2F, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025,
714+ 0x1B190D00, 0x2B29281E, 0x6D3A2D19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002F,
715+ 0x3090FF30, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028,
716+ 0x1C1A0E00, 0x2C2A291F, 0x6E3A2D1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0030,
717+ 0x3090FF31, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028,
718+ 0x1C1A0E00, 0x2C2A291F, 0x6E3A2D1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0030,
719+ 0x3193FF32, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028,
720+ 0x1C1A0E00, 0x2C2A291F, 0x6E3A2E1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0031,
721+ 0x3296FF33, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028,
722+ 0x1C1A0E00, 0x2C2A291F, 0x6E3A2E1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0032,
723+ 0x3399FF34, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028,
724+ 0x1C1A0E00, 0x2C2A291F, 0x6F3B2E1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0033,
725+ 0x349CFF35, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B,
726+ 0x1D1A0F00, 0x2D2B2928, 0x6F3B2E1A, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0034,
727+ 0x359FFF36, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B,
728+ 0x1D1A0F00, 0x2D2B2928, 0x6F3B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0035,
729+ 0x359FFF37, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B,
730+ 0x1D1A0F00, 0x2D2B2928, 0x6F3B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0035,
731+ 0x36A2FF38, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B,
732+ 0x1D1A0F00, 0x2D2B2928, 0x6F3B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0036,
733+ 0x37A5FF39, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B,
734+ 0x1D1A0F00, 0x2D2B2928, 0x783B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0037,
735+ 0x38A8FF3A, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E,
736+ 0x1E1B1800, 0x2E2C2A29, 0x783C2F1B, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E0038,
737+ 0x39ABFF3B, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E,
738+ 0x1E1B1800, 0x2E2C2A29, 0x783C381B, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E0039,
739+ 0x39ABFF3C, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E,
740+ 0x1E1B1800, 0x2E2C2A29, 0x783C381B, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E0039,
741+ 0x3AAEFF3D, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E,
742+ 0x1E1B1800, 0x2E2C2A29, 0x783C381C, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E003A,
743+ 0x3BB1FF3E, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E,
744+ 0x1E1B1800, 0x2E2C2A29, 0x783C381C, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E003B,
745+ 0x3CB4FF3F, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032,
746+ 0x1F1C1900, 0x2F2D2B29, 0x793C381C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003C,
747+ 0x3DB7FF40, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032,
748+ 0x1F1C1900, 0x2F2D2B29, 0x793D381C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003D,
749+ 0x3EBAFF41, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032,
750+ 0x1F1C1900, 0x2F2D2B29, 0x793D391C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003E,
751+ 0x3EBAFF42, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032,
752+ 0x1F1C1900, 0x2F2D2B29, 0x793D391C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003E,
753+ 0x3FBDFF43, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032,
754+ 0x1F1C1900, 0x2F2D2B29, 0x793D391D, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003F,
755+ 0x40C0FF44, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035,
756+ 0x281D1A00, 0x382D2B2A, 0x793D391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100040,
757+ 0x41C3FF45, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035,
758+ 0x281D1A00, 0x382D2B2A, 0x793D391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100041,
759+ 0x42C6FF46, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035,
760+ 0x281D1A00, 0x382D2B2A, 0x793E391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100042,
761+ 0x42C6FF47, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035,
762+ 0x281D1A00, 0x382D2B2A, 0x793E391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100042,
763+ 0x43C9FF48, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035,
764+ 0x281D1A00, 0x382D2B2A, 0x7A3E391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100043,
765+ 0x44CCFF49, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038,
766+ 0x291E1A00, 0x382E2C2A, 0x7A3E391E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110044,
767+ 0x45CFFF4A, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038,
768+ 0x291E1A00, 0x382E2C2A, 0x7A3E391E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110045,
769+ 0x46D2FF4B, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038,
770+ 0x291E1A00, 0x382E2C2A, 0x7A3E3A1E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110046,
771+ 0x46D2FF4C, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038,
772+ 0x291E1A00, 0x382E2C2A, 0x7A3E3A1E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110046,
773+ 0x47D5FF4D, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038,
774+ 0x291E1A00, 0x382E2C2A, 0x7A3F3A1E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110047,
775+ 0x48D8FF4E, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C,
776+ 0x291E1B00, 0x392F2D2B, 0x7A3F3A1E, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x00120048,
777+ 0x49DBFF4F, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C,
778+ 0x291E1B00, 0x392F2D2B, 0x7A3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x00120049,
779+ 0x4ADEFF50, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C,
780+ 0x291E1B00, 0x392F2D2B, 0x7B3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x0012004A,
781+ 0x4ADEFF51, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C,
782+ 0x291E1B00, 0x392F2D2B, 0x7B3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x0012004A,
783+ 0x4BE1FF52, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C,
784+ 0x291E1B00, 0x392F2D2B, 0x7B3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x0012004B,
785+ 0x4CE4FF53, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F,
786+ 0x2A1F1B00, 0x39382D2C, 0x7B483A1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004C,
787+ 0x4DE7FF54, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F,
788+ 0x2A1F1B00, 0x39382D2C, 0x7B483B1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004D,
789+ 0x4EEAFF55, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F,
790+ 0x2A1F1B00, 0x39382D2C, 0x7B483B1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004E,
791+ 0x4EEAFF56, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F,
792+ 0x2A1F1B00, 0x39382D2C, 0x7B483B1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004E,
793+ 0x4FEDFF57, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F,
794+ 0x2A1F1B00, 0x39382D2C, 0x7B483B28, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004F,
795+ 0x50F0FF58, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042,
796+ 0x2A281C00, 0x3A382E2C, 0x7B483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140050,
797+ 0x51F3FF59, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042,
798+ 0x2A281C00, 0x3A382E2C, 0x7C483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140051,
799+ 0x51F3FF5A, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042,
800+ 0x2A281C00, 0x3A382E2C, 0x7C483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140051,
801+ 0x52F6FF5B, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042,
802+ 0x2A281C00, 0x3A382E2C, 0x7C483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140052,
803+ 0x53F9FF5C, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042,
804+ 0x2A281C00, 0x3A382E2C, 0x7C493B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140053,
805+ 0x54FCFF5D, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046,
806+ 0x2B281D00, 0x3A392F2D, 0x7C493C28, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150054,
807+ 0x55FFFF5E, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046,
808+ 0x2B281D00, 0x3A392F2D, 0x7C493C28, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150055,
809+ 0x55FFFF5F, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046,
810+ 0x2B281D00, 0x3A392F2D, 0x7C493C28, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150055,
811+ 0x57FFFF60, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046,
812+ 0x2B281D00, 0x3A392F2D, 0x7C493C29, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150057,
813+ 0x58FFFF61, 0x00000000, 0x0011001A, 0x00150009, 0x001A0000, 0x002D0022, 0x003E0035, 0x00560049,
814+ 0x2B291D00, 0x3B39382D, 0x7D493C29, 0x6F6F1F2F, 0x001B000C, 0x00000000, 0x00000056, 0x00160058,
815+ 0x5AFFFF62, 0x00000000, 0x0011001A, 0x00150009, 0x001A0000, 0x002D0022, 0x003E0035, 0x00560049,
816+ 0x2B291D00, 0x3B39382D, 0x7D493C29, 0x6F6F1F2F, 0x001B000C, 0x00000000, 0x00000056, 0x0016005A,
817+ 0x5CFFFF63, 0x00000000, 0x0012001B, 0x00160009, 0x001B0000, 0x002F0024, 0x00410038, 0x005A004C,
818+ 0x2C291E00, 0x3B3A382E, 0x7D493D29, 0x6F6F2838, 0x001B000D, 0x00000000, 0x0000005A, 0x0017005C,
819+ 0x5DFFFF64, 0x00000000, 0x0012001B, 0x00160009, 0x001B0000, 0x002F0024, 0x00410038, 0x005A004C,
820+ 0x2C291E00, 0x3B3A382E, 0x7D4A3D29, 0x6F6F2838, 0x001B000D, 0x00000000, 0x0000005A, 0x0017005D,
821+ 0x5FFFFF65, 0x00000000, 0x0012001B, 0x00160009, 0x001B0000, 0x002F0024, 0x00410038, 0x005A004C,
822+ 0x2C291E00, 0x3B3A382E, 0x7E4A3D29, 0x6F6F2838, 0x001B000D, 0x00000000, 0x0000005A, 0x0017005F,
823+ 0x60FFFF66, 0x00000000, 0x0013001C, 0x00170009, 0x001C0000, 0x00310026, 0x0044003A, 0x005E0050,
824+ 0x2C2A1E00, 0x3C3A392F, 0x7E4A3D2A, 0x6F6F2838, 0x001C000D, 0x00000000, 0x0000005E, 0x00180060,
825+ 0x62FFFF67, 0x00000000, 0x0013001C, 0x00170009, 0x001C0000, 0x00310026, 0x0044003A, 0x005E0050,
826+ 0x2C2A1E00, 0x3C3A392F, 0x7E4A3D2A, 0x6F6F2838, 0x001C000D, 0x00000000, 0x0000005E, 0x00180062,
827+ 0x63FFFF68, 0x00000000, 0x0013001C, 0x00170009, 0x001C0000, 0x00310026, 0x0044003A, 0x005E0050,
828+ 0x2C2A1E00, 0x3C3A392F, 0x7E4A3E2A, 0x6F6F2838, 0x001C000D, 0x00000000, 0x0000005E, 0x00180063,
829+ 0x65FFFF69, 0x00000000, 0x0014001D, 0x0018000A, 0x001D0000, 0x00330027, 0x0046003D, 0x00620053,
830+ 0x2D2A1F00, 0x3C3A392F, 0x7E4A3E2A, 0x6F6F2939, 0x001C000E, 0x00000000, 0x00000062, 0x00190065,
831+ 0x66FFFF6A, 0x00000000, 0x0014001D, 0x0018000A, 0x001D0000, 0x00330027, 0x0046003D, 0x00620053,
832+ 0x2D2A1F00, 0x3C3A392F, 0x7E4A3E2A, 0x6F6F2939, 0x001C000E, 0x00000000, 0x00000062, 0x00190066,
833+ 0x68FFFF6B, 0x00000000, 0x0014001E, 0x0019000A, 0x001E0000, 0x00350029, 0x0049003F, 0x00660056,
834+ 0x2D2A1F00, 0x3D3B3938, 0x7F4B3E2A, 0x6F6F2939, 0x001D000E, 0x00000000, 0x00000066, 0x001A0068,
835+ 0x69FFFF6C, 0x00000000, 0x0014001E, 0x0019000A, 0x001E0000, 0x00350029, 0x0049003F, 0x00660056,
836+ 0x2D2A1F00, 0x3D3B3938, 0x7F4B3E2A, 0x6F6F2939, 0x001D000E, 0x00000000, 0x00000066, 0x001A0069,
837+ 0x6BFFFF6D, 0x00000000, 0x0014001E, 0x0019000A, 0x001E0000, 0x00350029, 0x0049003F, 0x00660056,
838+ 0x2D2A1F00, 0x3D3B3938, 0x7F4B3F2B, 0x6F6F2939, 0x001D000E, 0x00000000, 0x00000066, 0x001A006B,
839+ 0x6CFFFF6E, 0x00000000, 0x00150020, 0x001A000B, 0x00200000, 0x0037002A, 0x004C0041, 0x0069005A,
840+ 0x2E2B2800, 0x3D3B3A38, 0x7F4B3F2B, 0x6F6F2939, 0x001D000F, 0x00000000, 0x00000069, 0x001B006C,
841+ 0x6EFFFF6F, 0x00000000, 0x00150020, 0x001A000B, 0x00200000, 0x0037002A, 0x004C0041, 0x0069005A,
842+ 0x2E2B2800, 0x3D3B3A38, 0x884B3F2B, 0x6F6F2939, 0x001D000F, 0x00000000, 0x00000069, 0x001B006E,
843+ 0x6FFFFF70, 0x00000000, 0x00150020, 0x001A000B, 0x00200000, 0x0037002A, 0x004C0041, 0x0069005A,
844+ 0x2E2B2800, 0x3D3B3A38, 0x884B3F2B, 0x6F6F2939, 0x001D000F, 0x00000000, 0x00000069, 0x001B006F,
845+ 0x71FFFF71, 0x00000000, 0x00160021, 0x001B000B, 0x00210000, 0x0039002C, 0x004F0044, 0x006D005D,
846+ 0x2E2B2800, 0x3E3C3A39, 0x884C482B, 0x6F6F2A3A, 0x001E000F, 0x00000000, 0x0000006D, 0x001C0071,
847+ 0x72FFFF72, 0x00000000, 0x00160021, 0x001B000B, 0x00210000, 0x0039002C, 0x004F0044, 0x006D005D,
848+ 0x2E2B2800, 0x3E3C3A39, 0x884C482B, 0x6F6F2A3A, 0x001E000F, 0x00000000, 0x0000006D, 0x001C0072,
849+ 0x74FFFF73, 0x00000000, 0x00170022, 0x001C000B, 0x00220000, 0x003B002D, 0x00520046, 0x00710060,
850+ 0x2F2B2900, 0x3E3C3A39, 0x884C482B, 0x6F6F2A3A, 0x001E0018, 0x00000000, 0x00000071, 0x001D0074,
851+ 0x75FFFF74, 0x00000000, 0x00170022, 0x001C000B, 0x00220000, 0x003B002D, 0x00520046, 0x00710060,
852+ 0x2F2B2900, 0x3E3C3A39, 0x884C482C, 0x6F6F2A3A, 0x001E0018, 0x00000000, 0x00000071, 0x001D0075,
853+ 0x76FFFF75, 0x00000000, 0x00170022, 0x001C000B, 0x00220000, 0x003B002D, 0x00520046, 0x00710060,
854+ 0x2F2B2900, 0x3E3C3A39, 0x884C482C, 0x6F6F2A3A, 0x001E0018, 0x00000000, 0x00000071, 0x001D0076,
855+ 0x78FFFF76, 0x00000000, 0x00170023, 0x001D000C, 0x00230000, 0x003D002F, 0x00540049, 0x00750064,
856+ 0x2F2C2900, 0x3F3D3B39, 0x894C482C, 0x6F6F2A3A, 0x001F0018, 0x00000000, 0x00000075, 0x001E0078,
857+ 0x79FFFF77, 0x00000000, 0x00170023, 0x001D000C, 0x00230000, 0x003D002F, 0x00540049, 0x00750064,
858+ 0x2F2C2900, 0x3F3D3B39, 0x894C482C, 0x6F6F2A3A, 0x001F0018, 0x00000000, 0x00000075, 0x001E0079,
859+ 0x7BFFFF78, 0x00000000, 0x00170023, 0x001D000C, 0x00230000, 0x003D002F, 0x00540049, 0x00750064,
860+ 0x2F2C2900, 0x3F3D3B39, 0x894D482C, 0x6F6F2A3A, 0x001F0018, 0x00000000, 0x00000075, 0x001E007B,
861+ 0x7DFFFF79, 0x00000000, 0x00180024, 0x001E000C, 0x00240000, 0x003F0030, 0x0057004B, 0x00790067,
862+ 0x382C2900, 0x3F3D3B39, 0x894D492C, 0x6F6F2B3B, 0x001F0019, 0x00000000, 0x00000079, 0x001F007D,
863+ 0x7FFFFF7A, 0x00000000, 0x00180024, 0x001E000C, 0x00240000, 0x003F0030, 0x0057004B, 0x00790067,
864+ 0x382C2900, 0x3F3D3B39, 0x894D492D, 0x6F6F2B3B, 0x001F0019, 0x00000000, 0x00000079, 0x001F007F,
865+ 0x81FFFF7B, 0x00000000, 0x00190026, 0x001F000D, 0x00260000, 0x00410032, 0x005A004E, 0x007D006A,
866+ 0x382D2A00, 0x483D3B3A, 0x894D492D, 0x6F6F2B3B, 0x00280019, 0x00000000, 0x0000007D, 0x00200081,
867+ 0x83FFFF7C, 0x00000000, 0x00190026, 0x001F000D, 0x00260000, 0x00410032, 0x005A004E, 0x007D006A,
868+ 0x382D2A00, 0x483D3B3A, 0x894D492D, 0x6F6F2B3B, 0x00280019, 0x00000000, 0x0000007D, 0x00200083,
869+ 0x86FFFF7D, 0x00000000, 0x001A0027, 0x0020000D, 0x00270000, 0x00430034, 0x005D0050, 0x0081006E,
870+ 0x382D2A00, 0x483E3C3A, 0x8A4E492D, 0x6F6F2B3B, 0x00280019, 0x00000000, 0x00000081, 0x00210086,
871+ 0x88FFFF7E, 0x00000000, 0x001B0028, 0x0021000D, 0x00280000, 0x00450035, 0x00600052, 0x00850071,
872+ 0x392D2A00, 0x483E3C3A, 0x8A4E492D, 0x6F6F2C3C, 0x0028001A, 0x00000000, 0x00000085, 0x00220088,
873+ 0x8AFFFF7F, 0x00000000, 0x001B0028, 0x0021000D, 0x00280000, 0x00450035, 0x00600052, 0x00850071,
874+ 0x392D2A00, 0x483E3C3A, 0x8A4E492E, 0x6F6F2C3C, 0x0028001A, 0x00000000, 0x00000085, 0x0022008A,
875+ 0x8CFFFF80, 0x00000000, 0x001B0029, 0x0022000E, 0x00290000, 0x00470037, 0x00620055, 0x00890074,
876+ 0x392E2A00, 0x493F3C3B, 0x8A4E4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x00000089, 0x0023008C,
877+ 0x8EFFFF81, 0x00000000, 0x001B0029, 0x0022000E, 0x00290000, 0x00470037, 0x00620055, 0x00890074,
878+ 0x392E2A00, 0x493F3C3B, 0x8A4F4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x00000089, 0x0023008E,
879+ 0x90FFFF82, 0x00000000, 0x001C002A, 0x0023000E, 0x002A0000, 0x00490038, 0x00650057, 0x008D0078,
880+ 0x392E2B00, 0x493F3D3B, 0x8A4F4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x0000008D, 0x00240090,
881+ 0x92FFFF83, 0x00000000, 0x001C002A, 0x0023000E, 0x002A0000, 0x00490038, 0x00650057, 0x008D0078,
882+ 0x392E2B00, 0x493F3D3B, 0x8A4F4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x0000008D, 0x00240092,
883+ 0x94FFFF84, 0x00000000, 0x001D002B, 0x0024000E, 0x002B0000, 0x004B003A, 0x0068005A, 0x0091007B,
884+ 0x392F2B00, 0x493F3D3B, 0x8B4F4A2F, 0x6F6F2D3D, 0x0029001A, 0x00000000, 0x00000091, 0x00250094,
885+ 0x96FFFF85, 0x00000000, 0x001D002B, 0x0024000E, 0x002B0000, 0x004B003A, 0x0068005A, 0x0091007B,
886+ 0x392F2B00, 0x493F3D3B, 0x8B4F4A2F, 0x6F6F2D3D, 0x0029001A, 0x00000000, 0x00000091, 0x00250096,
887+ 0x98FFFF86, 0x00000000, 0x001E002D, 0x0025000F, 0x002D0000, 0x004D003B, 0x006B005C, 0x0094007E,
888+ 0x3A2F2B00, 0x49483D3C, 0x8B584A2F, 0x6F6F2D3D, 0x0029001B, 0x00000000, 0x00000094, 0x00260098,
889+ 0x9AFFFF87, 0x00000000, 0x001E002D, 0x0025000F, 0x002D0000, 0x004D003B, 0x006B005C, 0x0094007E,
890+ 0x3A2F2B00, 0x49483D3C, 0x8B584B2F, 0x6F6F2D3D, 0x0029001B, 0x00000000, 0x00000094, 0x0026009A,
891+ 0x9CFFFF88, 0x00000000, 0x001E002E, 0x0026000F, 0x002E0000, 0x004F003D, 0x006E005E, 0x00980081,
892+ 0x3A2F2C00, 0x4A483E3C, 0x8B584B2F, 0x6F6F2D3D, 0x002A001B, 0x00000000, 0x00000098, 0x0027009C,
893+ 0x9EFFFF89, 0x00000000, 0x001E002E, 0x0026000F, 0x002E0000, 0x004F003D, 0x006E005E, 0x00980081,
894+ 0x3A2F2C00, 0x4A483E3C, 0x8B584B38, 0x6F6F2D3D, 0x002A001B, 0x00000000, 0x00000098, 0x0027009E,
895+ 0xA1FFFF8A, 0x00000000, 0x001F002F, 0x00270010, 0x002F0000, 0x0051003F, 0x00710061, 0x009C0085,
896+ 0x3A382C00, 0x4A483E3C, 0x8B584B38, 0x6F6F2E3E, 0x002A001B, 0x00000000, 0x0000009C, 0x002800A1,
897+ 0xA4FFFF8B, 0x00000000, 0x00200030, 0x00280010, 0x00300000, 0x00530040, 0x00730063, 0x00A00088,
898+ 0x3A382C00, 0x4A493E3C, 0x8C584B38, 0x6F6F2E3E, 0x002A001B, 0x00000000, 0x000000A0, 0x002900A4,
899+ 0xA6FFFF8C, 0x00000000, 0x00200030, 0x00280010, 0x00300000, 0x00530040, 0x00730063, 0x00A00088,
900+ 0x3A382C00, 0x4A493E3C, 0x8C594B38, 0x6F6F2E3E, 0x002A001B, 0x00000000, 0x000000A0, 0x002900A6,
901+ 0xA9FFFF8D, 0x00000000, 0x00210031, 0x00290010, 0x00310000, 0x00550042, 0x00760066, 0x00A4008B,
902+ 0x3B382C00, 0x4A493F3D, 0x8C594C38, 0x6F6F2E3E, 0x002A001C, 0x00000000, 0x000000A4, 0x002A00A9,
903+ 0xACFFFF8E, 0x00000000, 0x00220032, 0x002A0011, 0x00320000, 0x00570043, 0x00790068, 0x00A8008F,
904+ 0x3B382D00, 0x4B493F3D, 0x8C594C38, 0x6F6F2F3F, 0x002B001C, 0x00000000, 0x000000A8, 0x002B00AC,
905+ 0xAEFFFF8F, 0x00000000, 0x00220032, 0x002A0011, 0x00320000, 0x00570043, 0x00790068, 0x00A8008F,
906+ 0x3B382D00, 0x4B493F3D, 0x8C594C39, 0x6F6F2F3F, 0x002B001C, 0x00000000, 0x000000A8, 0x002B00AE,
907+ 0xB1FFFF90, 0x00000000, 0x00220034, 0x002B0011, 0x00340000, 0x00590045, 0x007C006B, 0x00AC0092,
908+ 0x3B392D00, 0x4B49483D, 0x8D594C39, 0x6F6F2F3F, 0x002B001C, 0x00000000, 0x000000AC, 0x002C00B1,
909+ 0xB4FFFF91, 0x00000000, 0x00230035, 0x002C0012, 0x00350000, 0x005B0046, 0x007F006D, 0x00B00095,
910+ 0x3B392D00, 0x4B49483E, 0x8D594C39, 0x6F6F383F, 0x002B001D, 0x00000000, 0x000000B0, 0x002D00B4,
911+ 0xB6FFFF92, 0x00000000, 0x00230035, 0x002C0012, 0x00350000, 0x005B0046, 0x007F006D, 0x00B00095,
912+ 0x3B392D00, 0x4B49483E, 0x8D594C39, 0x6F6F383F, 0x002B001D, 0x00000000, 0x000000B0, 0x002D00B6,
913+ 0xB9FFFF93, 0x00000000, 0x00240036, 0x002D0012, 0x00360000, 0x005D0048, 0x0081006F, 0x00B40099,
914+ 0x3C392E00, 0x4B4A483E, 0x8D5A4D39, 0x6F6F3848, 0x002B001D, 0x00000000, 0x000000B4, 0x002E00B9,
915+ 0xBBFFFF94, 0x00000000, 0x00240036, 0x002D0012, 0x00360000, 0x005D0048, 0x0081006F, 0x00B40099,
916+ 0x3C392E00, 0x4B4A483E, 0x8D5A4D39, 0x6F6F3848, 0x002B001D, 0x00000000, 0x000000B4, 0x002E00BB,
917+ 0xBEFFFF95, 0x00000000, 0x00250037, 0x002E0012, 0x00370000, 0x005F0049, 0x00840072, 0x00B8009C,
918+ 0x3C392E00, 0x4C4A483E, 0x8E5A4D39, 0x6F6F3848, 0x002C001D, 0x00000000, 0x000000B8, 0x002F00BE,
919+ 0xC0FFFF96, 0x00000000, 0x00260038, 0x002F0013, 0x00380000, 0x0062004B, 0x00870074, 0x00BC009F,
920+ 0x3C392E00, 0x4C4A483F, 0x8E5A4D39, 0x6F6F3848, 0x002C001D, 0x00000000, 0x000000BC, 0x003000C0,
921+ 0xC3FFFF97, 0x00000000, 0x00260038, 0x002F0013, 0x00380000, 0x0062004B, 0x00870074, 0x00BC009F,
922+ 0x3C392E00, 0x4C4A483F, 0x8E5A4D3A, 0x6F6F3848, 0x002C001D, 0x00000000, 0x000000BC, 0x003000C3,
923+ 0xC7FFFF98, 0x00000000, 0x00260039, 0x00300013, 0x00390000, 0x0064004D, 0x008A0077, 0x00BF00A3,
924+ 0x3D3A2E00, 0x4C4A493F, 0x8E5A4E3A, 0x6F6F3848, 0x002C001E, 0x00000000, 0x000000BF, 0x003100C7,
925+ 0xCAFFFF99, 0x00000000, 0x0027003B, 0x00310014, 0x003B0000, 0x0066004E, 0x008D0079, 0x00C300A6,
926+ 0x3D3A2F00, 0x4C4A493F, 0x8E5A4E3A, 0x6F6F3949, 0x002C001E, 0x00000000, 0x000000C3, 0x003200CA,
927+ 0xCDFFFF9A, 0x00000000, 0x0028003C, 0x00320014, 0x003C0000, 0x00680050, 0x008F007C, 0x00C700A9,
928+ 0x3D3A2F00, 0x4C4B4948, 0x8F5B4E3A, 0x6F6F3949, 0x002D001E, 0x00000000, 0x000000C7, 0x003300CD,
929+ 0xD0FFFF9B, 0x00000000, 0x0029003D, 0x00330014, 0x003D0000, 0x006A0051, 0x0092007E, 0x00CB00AD,
930+ 0x3D3A2F00, 0x4D4B4948, 0x8F5B4E3A, 0x6F6F3949, 0x002D001E, 0x00000000, 0x000000CB, 0x003400D0,
931+ 0xD3FFFF9C, 0x00000000, 0x0029003D, 0x00330014, 0x003D0000, 0x006A0051, 0x0092007E, 0x00CB00AD,
932+ 0x3D3A2F00, 0x4D4B4948, 0x8F5B4E3A, 0x6F6F3949, 0x002D001E, 0x00000000, 0x000000CB, 0x003400D3,
933+ 0xD6FFFF9D, 0x00000000, 0x0029003E, 0x00340015, 0x003E0000, 0x006C0053, 0x00950080, 0x00CF00B0,
934+ 0x3E3A3800, 0x4D4B4948, 0x8F5B4F3B, 0x6F6F3949, 0x002D001F, 0x00000000, 0x000000CF, 0x003500D6,
935+ 0xD9FFFF9E, 0x00000000, 0x002A003F, 0x00350015, 0x003F0000, 0x006E0054, 0x00980083, 0x00D300B3,
936+ 0x3E3B3800, 0x4D4B4A48, 0x8F5B4F3B, 0x6F6F3949, 0x002D001F, 0x00000000, 0x000000D3, 0x003600D9,
937+ 0xDCFFFF9F, 0x00000000, 0x002B0040, 0x00360015, 0x00400000, 0x00700056, 0x009B0085, 0x00D700B7,
938+ 0x3E3B3800, 0x4D4B4A48, 0x8F5B4F3B, 0x6F6F3949, 0x002E001F, 0x00000000, 0x000000D7, 0x003700DC,
939+ 0xDFFFFFA0, 0x00000000, 0x002B0040, 0x00360015, 0x00400000, 0x00700056, 0x009B0085, 0x00D700B7,
940+ 0x3E3B3800, 0x4D4B4A48, 0x8F5B4F3B, 0x6F6F3949, 0x002E001F, 0x00000000, 0x000000D7, 0x003700DF,
941+ 0xE2FFFFA1, 0x00000000, 0x002C0042, 0x00370016, 0x00420000, 0x00720058, 0x009E0088, 0x00DB00BA,
942+ 0x3E3B3800, 0x4E4C4A49, 0x8F5C4F3B, 0x6F6F3A4A, 0x002E0028, 0x00000000, 0x000000DB, 0x003800E2,
943+ 0xE6FFFFA2, 0x00000000, 0x002D0043, 0x00380016, 0x00430000, 0x00740059, 0x00A0008A, 0x00DF00BD,
944+ 0x3F3B3800, 0x4E4C4A49, 0x8F5C583B, 0x6F6F3A4A, 0x002E0028, 0x00000000, 0x000000DF, 0x003900E6,
945+ 0xE9FFFFA3, 0x00000000, 0x002D0044, 0x00390017, 0x00440000, 0x0076005B, 0x00A3008C, 0x00E300C1,
946+ 0x3F3B3900, 0x4E4C4A49, 0x8F5C583B, 0x6F6F3A4A, 0x002E0028, 0x00000000, 0x000000E3, 0x003A00E9,
947+ 0xEDFFFFA4, 0x00000000, 0x002E0045, 0x003A0017, 0x00450000, 0x0078005C, 0x00A6008F, 0x00E600C4,
948+ 0x3F3C3900, 0x4E4C4A49, 0x8F5C583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000E6, 0x003B00ED,
949+ 0xF0FFFFA5, 0x00000000, 0x002F0046, 0x003B0017, 0x00460000, 0x007A005E, 0x00A90091, 0x00EA00C7,
950+ 0x3F3C3900, 0x4F4C4B49, 0x8F5C583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000EA, 0x003C00F0,
951+ 0xF3FFFFA6, 0x00000000, 0x002F0046, 0x003B0017, 0x00460000, 0x007A005E, 0x00A90091, 0x00EA00C7,
952+ 0x3F3C3900, 0x4F4C4B49, 0x8F5C583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000EA, 0x003C00F3,
953+ 0xF7FFFFA7, 0x00000000, 0x00300047, 0x003C0018, 0x00470000, 0x007C005F, 0x00AC0094, 0x00EE00CB,
954+ 0x483C3900, 0x4F4D4B49, 0x8F5D583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000EE, 0x003D00F7,
955+ 0xFAFFFFA8, 0x00000000, 0x00300049, 0x003D0018, 0x00490000, 0x007E0061, 0x00AE0096, 0x00F200CE,
956+ 0x483C3900, 0x4F4D4B49, 0x8F5D593C, 0x6F6F3B4B, 0x002F0029, 0x00000000, 0x000000F2, 0x003E00FA,
957+ 0xFDFFFFA9, 0x00000000, 0x0031004A, 0x003E0019, 0x004A0000, 0x00800062, 0x00B10099, 0x00F600D1,
958+ 0x483C3900, 0x4F4D4B4A, 0x8F5D593C, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x000000F6, 0x003F00FD,
959+ 0xFFFFFFAA, 0x00000000, 0x0032004B, 0x003F0019, 0x004B0000, 0x00820064, 0x00B4009B, 0x00FA00D5,
960+ 0x483D3900, 0x584D4B4A, 0x8F5D593D, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x000000FA, 0x00400101,
961+ 0xFFFFFFAB, 0x00000000, 0x0033004C, 0x003F0019, 0x004C0000, 0x00840066, 0x00B7009D, 0x00FE00D8,
962+ 0x483D3A00, 0x584E4B4A, 0x8F5D593D, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x000000FE, 0x00410105,
963+ 0xFFFFFFAC, 0x00000000, 0x0034004D, 0x0040001A, 0x004D0000, 0x00860067, 0x00BA00A0, 0x010200DB,
964+ 0x483D3A00, 0x584E4C4A, 0x8F5E593D, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x00000102, 0x00420109,
965+ 0xFFFFFFAD, 0x00000000, 0x0034004F, 0x0041001A, 0x004F0000, 0x00880069, 0x00BC00A2, 0x010600DE,
966+ 0x493D3A00, 0x584E4C4A, 0x8F5E593D, 0x6F6F3C4B, 0x00380029, 0x00000000, 0x00000106, 0x0043010D,
967+ 0xFFFFFFAE, 0x00000000, 0x00350050, 0x0042001B, 0x00500000, 0x008A006A, 0x00BF00A5, 0x010A00E2,
968+ 0x493D3A00, 0x584E4C4A, 0x8F5E593D, 0x6F6F3C4C, 0x00380029, 0x00000000, 0x0000010A, 0x00440110,
969+ 0xFFFFFFAF, 0x00000000, 0x00360051, 0x0043001B, 0x00510000, 0x008C006C, 0x00C200A7, 0x010E00E5,
970+ 0x493E3A00, 0x584E4C4A, 0x8F5E593E, 0x6F6F3C4C, 0x0038002A, 0x00000000, 0x0000010E, 0x00450114,
971+ 0xFFFFFFB0, 0x00000000, 0x00370052, 0x0044001B, 0x00520000, 0x008E006D, 0x00C500AA, 0x011100E8,
972+ 0x493E3A00, 0x594F4C4B, 0x8F5E5A3E, 0x6F6F3C4C, 0x0039002A, 0x00000000, 0x00000111, 0x00460118,
973+ 0xFFFFFFB1, 0x00000000, 0x00370053, 0x0045001C, 0x00530000, 0x0090006F, 0x00C800AC, 0x011500EC,
974+ 0x493E3A00, 0x594F4D4B, 0x8F5F5A3E, 0x6F6F3C4C, 0x0039002A, 0x00000000, 0x00000115, 0x0047011C,
975+ 0xFFFFFFB2, 0x00000000, 0x00380054, 0x0046001C, 0x00540000, 0x00920071, 0x00CB00AE, 0x011900EF,
976+ 0x493E3B00, 0x594F4D4B, 0x8F5F5A3E, 0x6F6F3C4C, 0x0039002A, 0x00000000, 0x00000119, 0x00480120,
977+ 0xFFFFFFB3, 0x00000000, 0x00390056, 0x0047001D, 0x00560000, 0x00940072, 0x00CD00B1, 0x011D00F2,
978+ 0x493E3B00, 0x594F4D4B, 0x8F5F5A3E, 0x6F6F3D4D, 0x0039002A, 0x00000000, 0x0000011D, 0x00490124,
979+ 0xFFFFFFB4, 0x00000000, 0x003A0057, 0x0048001D, 0x00570000, 0x00960074, 0x00D000B3, 0x012100F6,
980+ 0x493F3B00, 0x594F4D4B, 0x8F5F5A3F, 0x6F6F3D4D, 0x0039002A, 0x00000000, 0x00000121, 0x004A0128,
981+ 0xFFFFFFB5, 0x00000000, 0x003B0058, 0x0049001D, 0x00580000, 0x00980075, 0x00D300B6, 0x012500F9,
982+ 0x4A3F3B00, 0x59584D4B, 0x8F5F5A3F, 0x6F6F3D4D, 0x0039002A, 0x00000000, 0x00000125, 0x004B012C,
983+ 0xFFFFFFB6, 0x00000000, 0x003B0059, 0x004A001E, 0x00590000, 0x009A0077, 0x00D600B8, 0x012900FC,
984+ 0x4A3F3B00, 0x59584D4C, 0x8F685A3F, 0x6F6F3D4D, 0x0039002B, 0x00000000, 0x00000129, 0x004C0130,
985+ 0xFFFFFFB7, 0x00000000, 0x003C005A, 0x004B001E, 0x005A0000, 0x009C0078, 0x00D900BA, 0x012D0100,
986+ 0x4A3F3B00, 0x59584E4C, 0x8F685B3F, 0x6F6F3D4D, 0x0039002B, 0x00000000, 0x0000012D, 0x004D0135,
987+ 0xFFFFFFB8, 0x00000000, 0x003D005B, 0x004C001E, 0x005B0000, 0x009E007A, 0x00DB00BD, 0x01310103,
988+ 0x4A3F3B00, 0x5A584E4C, 0x8F685B3F, 0x6F6F3D4D, 0x003A002B, 0x00000000, 0x00000131, 0x004E0139,
989+ 0xFFFFFFB9, 0x00000000, 0x003E005D, 0x004D001F, 0x005D0000, 0x00A0007B, 0x00DE00BF, 0x01350106,
990+ 0x4A3F3C00, 0x5A584E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000135, 0x004F013D,
991+ 0xFFFFFFBA, 0x00000000, 0x003F005E, 0x004E001F, 0x005E0000, 0x00A3007D, 0x00E100C2, 0x0139010A,
992+ 0x4A483C00, 0x5A584E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000139, 0x00500142,
993+ 0xFFFFFFBB, 0x00000000, 0x003F005F, 0x004F0020, 0x005F0000, 0x00A5007F, 0x00E400C4, 0x013C010D,
994+ 0x4A483C00, 0x5A584E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x0000013C, 0x00510146,
995+ 0xFFFFFFBC, 0x00000000, 0x00400060, 0x00500020, 0x00600000, 0x00A70080, 0x00E700C7, 0x01400110,
996+ 0x4A483C00, 0x5A594E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000140, 0x0052014A,
997+ 0xFFFFFFBD, 0x00000000, 0x00410061, 0x00510020, 0x00610000, 0x00A90082, 0x00E900C9, 0x01440114,
998+ 0x4B483C00, 0x5A594F4D, 0x8F695B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000144, 0x0053014F,
999+ 0xFFFFFFBE, 0x00000000, 0x00420064, 0x00530021, 0x00640000, 0x00AD0085, 0x00EF00CE, 0x014C011A,
1000+ 0x4B483D00, 0x5A594F4D, 0x8F695C48, 0x6F6F3F4F, 0x003A002C, 0x00000000, 0x0000014C, 0x00550154,
1001+ 0xFFFFFFBF, 0x00000000, 0x00430065, 0x00540022, 0x00650000, 0x00AF0086, 0x00F200D0, 0x0150011E,
1002+ 0x4B483D00, 0x5B594F4D, 0x8F695C48, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x00000150, 0x00560158,
1003+ 0xFFFFFFC0, 0x00000000, 0x00440066, 0x00550022, 0x00660000, 0x00B10088, 0x00F500D3, 0x01540121,
1004+ 0x4B493D00, 0x5B594F4D, 0x8F695C49, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x00000154, 0x0057015D,
1005+ 0xFFFFFFC1, 0x00000000, 0x00450067, 0x00560022, 0x00670000, 0x00B3008A, 0x00F800D5, 0x01580124,
1006+ 0x4B493D00, 0x5B59584D, 0x8F695C49, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x00000158, 0x00580162,
1007+ 0xFFFFFFC2, 0x00000000, 0x00460068, 0x00570023, 0x00680000, 0x00B5008B, 0x00FA00D8, 0x015C0128,
1008+ 0x4B493D00, 0x5B59584E, 0x8F695C49, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x0000015C, 0x00590167,
1009+ 0xFFFFFFC3, 0x00000000, 0x0047006B, 0x00590024, 0x006B0000, 0x00B9008E, 0x010000DC, 0x0163012E,
1010+ 0x4C493D00, 0x5B59584E, 0x8F695C49, 0x6F6F4858, 0x003B002D, 0x00000000, 0x00000163, 0x005B016C,
1011+ 0xFFFFFFC4, 0x00000000, 0x0048006C, 0x005A0024, 0x006C0000, 0x00BB0090, 0x010300DF, 0x01670131,
1012+ 0x4C493E00, 0x5B5A584E, 0x8F695D49, 0x6F6F4858, 0x003B002D, 0x00000000, 0x00000167, 0x005C0171,
1013+ 0xFFFFFFC5, 0x00000000, 0x0049006D, 0x005B0024, 0x006D0000, 0x00BD0091, 0x010600E1, 0x016B0135,
1014+ 0x4C493E00, 0x5B5A584E, 0x8F6A5D49, 0x6F6F4858, 0x003B002D, 0x00000000, 0x0000016B, 0x005D0176,
1015+ 0xFFFFFFC6, 0x00000000, 0x0049006E, 0x005C0025, 0x006E0000, 0x00BF0093, 0x010800E4, 0x016F0138,
1016+ 0x4C493E00, 0x5B5A584E, 0x8F6A5D49, 0x6F6F4858, 0x003C002D, 0x00000000, 0x0000016F, 0x005E017B,
1017+ 0xFFFFFFC7, 0x00000000, 0x004B0071, 0x005E0026, 0x00710000, 0x00C30096, 0x010E00E9, 0x0177013F,
1018+ 0x4C493E00, 0x5C5A584F, 0x8F6A5D49, 0x6F6F4858, 0x003C002D, 0x00000000, 0x00000177, 0x00600180,
1019+ 0xFFFFFFC8, 0x00000000, 0x004C0072, 0x005F0026, 0x00720000, 0x00C50098, 0x011100EB, 0x017B0142,
1020+ 0x4C4A3E00, 0x5C5A594F, 0x8F6A5D4A, 0x6F6F4858, 0x003C002D, 0x00000000, 0x0000017B, 0x00610185,
1021+ 0xFFFFFFC9, 0x00000000, 0x004D0073, 0x00600026, 0x00730000, 0x00C70099, 0x011400ED, 0x017F0145,
1022+ 0x4C4A3E00, 0x5C5A594F, 0x8F6A5E4A, 0x6F6F4858, 0x003C002E, 0x00000000, 0x0000017F, 0x0062018B,
1023+ 0xFFFFFFCA, 0x00000000, 0x004E0075, 0x00620027, 0x00750000, 0x00CB009C, 0x011900F2, 0x0187014C,
1024+ 0x4D4A3F00, 0x5C5A594F, 0x8F6A5E4A, 0x6F6F4959, 0x003C002E, 0x00000000, 0x00000187, 0x00640190,
1025+ 0xFFFFFFCB, 0x00000000, 0x004F0076, 0x00630027, 0x00760000, 0x00CD009E, 0x011C00F5, 0x018B014F,
1026+ 0x4D4A3F00, 0x5C5A594F, 0x8F6A5E4A, 0x6F6F4959, 0x003C002E, 0x00000000, 0x0000018B, 0x00650196,
1027+ 0xFFFFFFCC, 0x00000000, 0x00500078, 0x00640028, 0x00780000, 0x00CF009F, 0x011F00F7, 0x018E0153,
1028+ 0x4D4A3F00, 0x5C5B594F, 0x8F6B5E4A, 0x6F6F4959, 0x003D002E, 0x00000000, 0x0000018E, 0x0066019B,
1029+ 0xFFFFFFCD, 0x00000000, 0x0051007A, 0x00660029, 0x007A0000, 0x00D300A3, 0x012500FC, 0x01960159,
1030+ 0x4D4A3F00, 0x5D5B5958, 0x8F6B5E4A, 0x6F6F4959, 0x003D002E, 0x00000000, 0x00000196, 0x006801A1,
1031+ 0xFFFFFFCE, 0x00000000, 0x0052007B, 0x00670029, 0x007B0000, 0x00D500A4, 0x012700FE, 0x019A015D,
1032+ 0x4D4A3F00, 0x5D5B5958, 0x8F6B5E4A, 0x6F6F4959, 0x003D002E, 0x00000000, 0x0000019A, 0x006901A7,
1033+ 0xFFFFFFCF, 0x00000000, 0x0054007D, 0x0068002A, 0x007D0000, 0x00D900A7, 0x012D0103, 0x01A20163,
1034+ 0x4E4A4800, 0x5D5B5958, 0x8F6B5F4B, 0x6F6F4959, 0x003D002F, 0x00000000, 0x000001A2, 0x006B01AD,
1035+ 0xFFFFFFD0, 0x00000000, 0x0054007F, 0x0069002A, 0x007F0000, 0x00DB00A9, 0x01300106, 0x01A60167,
1036+ 0x4E4B4800, 0x5D5B5A58, 0x8F6B5F4B, 0x6F6F4959, 0x003D002F, 0x00000000, 0x000001A6, 0x006C01B3,
1037+ 0xFFFFFFD1, 0x00000000, 0x00560081, 0x006B002B, 0x00810000, 0x00DF00AC, 0x0135010A, 0x01AE016D,
1038+ 0x4E4B4800, 0x5D5B5A58, 0x8F6B5F4B, 0x6F6F4959, 0x003D002F, 0x00000000, 0x000001AE, 0x006E01B9,
1039+ 0xFFFFFFD2, 0x00000000, 0x00570082, 0x006C002B, 0x00820000, 0x00E100AD, 0x0138010D, 0x01B20171,
1040+ 0x4E4B4800, 0x5E5C5A58, 0x8F6B5F4B, 0x6F6F4A5A, 0x003E002F, 0x00000000, 0x000001B2, 0x006F01BF,
1041+ 0xFFFFFFD3, 0x00000000, 0x00580084, 0x006E002C, 0x00840000, 0x00E600B1, 0x013E0112, 0x01B90177,
1042+ 0x4E4B4800, 0x5E5C5A59, 0x8F6C684B, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001B9, 0x007101C6,
1043+ 0xFFFFFFD4, 0x00000000, 0x005A0087, 0x0070002D, 0x00870000, 0x00EA00B4, 0x01430117, 0x01C1017E,
1044+ 0x4F4B4800, 0x5E5C5A59, 0x8F6C684B, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001C1, 0x007301CD,
1045+ 0xFFFFFFD5, 0x00000000, 0x005B0088, 0x0071002D, 0x00880000, 0x00EC00B5, 0x01460119, 0x01C50181,
1046+ 0x4F4B4900, 0x5E5C5A59, 0x8F6C684B, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001C5, 0x007401D3,
1047+ 0xFFFFFFD6, 0x00000000, 0x005C008A, 0x0073002E, 0x008A0000, 0x00F000B8, 0x014C011E, 0x01CD0188,
1048+ 0x4F4C4900, 0x5E5C5A59, 0x8F6C684C, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001CD, 0x007601DB,
1049+ 0xFFFFFFD7, 0x00000000, 0x005E008D, 0x0075002F, 0x008D0000, 0x00F400BC, 0x01520123, 0x01D5018E,
1050+ 0x4F4C4900, 0x5F5C5B59, 0x8F6C684C, 0x6F6F4A5A, 0x003F0038, 0x00000000, 0x000001D5, 0x007801E2,
1051+ 0xFFFFFFD8, 0x00000000, 0x005F008F, 0x00770030, 0x008F0000, 0x00F800BF, 0x01570127, 0x01DD0195,
1052+ 0x584C4900, 0x5F5D5B59, 0x8F6D684C, 0x6F6F4A5A, 0x003F0038, 0x00000000, 0x000001DD, 0x007A01E9,
1053+ 0xFFFFFFD9, 0x00000000, 0x00610091, 0x00790030, 0x00910000, 0x00FC00C2, 0x015D012C, 0x01E4019C,
1054+ 0x584C4900, 0x5F5D5B59, 0x8F6D694C, 0x6F6F4B5B, 0x003F0039, 0x00000000, 0x000001E4, 0x007C01F1,
1055+ 0xFFFFFFDA, 0x00000000, 0x00620094, 0x007B0031, 0x00940000, 0x010000C5, 0x01620131, 0x01EC01A2,
1056+ 0x584C4900, 0x5F5D5B5A, 0x8F6D694C, 0x6F6F4B5B, 0x003F0039, 0x00000000, 0x000001EC, 0x007E01F9,
1057+ 0xFFFFFFDB, 0x00000000, 0x00640096, 0x007D0032, 0x00960000, 0x010400C8, 0x01680136, 0x01F401A9,
1058+ 0x584D4900, 0x685D5B5A, 0x8F6D694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x000001F4, 0x00800201,
1059+ 0xFFFFFFDC, 0x00000000, 0x00660098, 0x007F0033, 0x00980000, 0x010800CB, 0x016E013B, 0x01FC01B0,
1060+ 0x584D4A00, 0x685E5B5A, 0x8F6D694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x000001FC, 0x0082020A,
1061+ 0xFFFFFFDD, 0x00000000, 0x0067009B, 0x00810034, 0x009B0000, 0x010C00CE, 0x01730140, 0x020401B6,
1062+ 0x584D4A00, 0x685E5C5A, 0x8F6E694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x00000204, 0x00840212,
1063+ 0xFFFFFFDE, 0x00000000, 0x0069009D, 0x00830034, 0x009D0000, 0x011000D1, 0x01790145, 0x020B01BD,
1064+ 0x594D4A00, 0x685E5C5A, 0x8F6E694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x0000020B, 0x0086021B,
1065+ 0xFFFFFFDF, 0x00000000, 0x006B00A1, 0x00860036, 0x00A10000, 0x011600D6, 0x0181014C, 0x021701C7,
1066+ 0x594D4A00, 0x685E5C5A, 0x8F6E694D, 0x6F6F4C5C, 0x00480039, 0x00000000, 0x00000217, 0x00890225,
1067+ 0xFFFFFFE0, 0x00000000, 0x006D00A3, 0x00880036, 0x00A30000, 0x011A00D9, 0x01870151, 0x021F01CE,
1068+ 0x594E4A00, 0x685E5C5B, 0x8F6E6A4E, 0x6F6F4C5C, 0x0049003A, 0x00000000, 0x0000021F, 0x008B022F,
1069+ 0xFFFFFFE1, 0x00000000, 0x006F00A6, 0x008B0037, 0x00A60000, 0x012000DE, 0x018F0158, 0x022B01D7,
1070+ 0x594E4A00, 0x695F5C5B, 0x8F6F6A4E, 0x6F6F4C5C, 0x0049003A, 0x00000000, 0x0000022B, 0x008E0239,
1071+ 0xFFFFFFE2, 0x00000000, 0x007100A9, 0x008D0038, 0x00A90000, 0x012500E1, 0x0195015D, 0x023301DE,
1072+ 0x594E4B00, 0x695F5D5B, 0x8F6F6A4E, 0x6F6F4C5C, 0x0049003A, 0x00000000, 0x00000233, 0x00900243,
1073+ 0xFFFFFFE3, 0x00000000, 0x007300AC, 0x00900039, 0x00AC0000, 0x012B00E6, 0x019D0164, 0x023E01E8,
1074+ 0x594E4B00, 0x695F5D5B, 0x8F6F6A4E, 0x6F6F4D5D, 0x0049003A, 0x00000000, 0x0000023E, 0x0093024E,
1075+ 0xFFFFFFE4, 0x00000000, 0x007500B0, 0x0092003B, 0x00B00000, 0x013100EA, 0x01A6016B, 0x024A01F2,
1076+ 0x5A4F4B00, 0x69685D5B, 0x8F6F6A4F, 0x6F6F4D5D, 0x0049003A, 0x00000000, 0x0000024A, 0x0096025A,
1077+ 0xFFFFFFE5, 0x00000000, 0x007800B3, 0x0095003C, 0x00B30000, 0x013700EF, 0x01AE0173, 0x025601FC,
1078+ 0x5A4F4B00, 0x69685D5C, 0x8F786B4F, 0x6F6F4D5D, 0x0049003B, 0x00000000, 0x00000256, 0x00990266,
1079+ 0xFFFFFFE6, 0x00000000, 0x007A00B7, 0x0098003D, 0x00B70000, 0x013D00F4, 0x01B7017A, 0x02610206,
1080+ 0x5A4F4B00, 0x6A685E5C, 0x8F786B4F, 0x6F6F4D5D, 0x004A003B, 0x00000000, 0x00000261, 0x009C0272,
1081+ 0xFFFFFFE7, 0x00000000, 0x007D00BC, 0x009C003F, 0x00BC0000, 0x014500FA, 0x01C20184, 0x02710213,
1082+ 0x5A584C00, 0x6A685E5C, 0x8F786B58, 0x6F6F4E5E, 0x004A003B, 0x00000000, 0x00000271, 0x00A00280,
1083+ 0xFFFFFFE8, 0x00000000, 0x007F00BF, 0x009F0040, 0x00BF0000, 0x014B00FF, 0x01CA018B, 0x027D021D,
1084+ 0x5A584C00, 0x6A685E5C, 0x8F786B58, 0x6F6F4E5E, 0x004A003B, 0x00000000, 0x0000027D, 0x00A3028E,
1085+ 0xFFFFFFE9, 0x00000000, 0x008200C4, 0x00A30041, 0x00C40000, 0x01530105, 0x01D60194, 0x028C022A,
1086+ 0x5B584C00, 0x6A695F5D, 0x8F796B58, 0x6F6F4E5E, 0x004A003B, 0x00000000, 0x0000028C, 0x00A7029C,
1087+ 0xFFFFFFEA, 0x00000000, 0x008600C8, 0x00A70043, 0x00C80000, 0x015B010B, 0x01E1019E, 0x029C0238,
1088+ 0x5B584D00, 0x6A695F5D, 0x8F796C58, 0x6F6F4F5F, 0x004A003C, 0x00000000, 0x0000029C, 0x00AB02AC,
1089+ 0xFFFFFFEB, 0x00000000, 0x008900CD, 0x00AB0044, 0x00CD0000, 0x01630111, 0x01EC01A8, 0x02AC0245,
1090+ 0x5B594D00, 0x6B695F5D, 0x8F796C59, 0x6F6F4F5F, 0x004B003C, 0x00000000, 0x000002AC, 0x00AF02BC,
1091+ 0xFFFFFFEC, 0x00000000, 0x008C00D2, 0x00AF0046, 0x00D20000, 0x016C0118, 0x01F701B2, 0x02BB0252,
1092+ 0x5B594D00, 0x6B69685E, 0x8F796C59, 0x6F6F4F5F, 0x004B003C, 0x00000000, 0x000002BB, 0x00B302CD,
1093+ 0xFFFFFFED, 0x00000000, 0x009000D8, 0x00B40048, 0x00D80000, 0x01760120, 0x020601BE, 0x02CF0263,
1094+ 0x5C594E00, 0x6B6A685E, 0x8F796D59, 0x6F6F5868, 0x004B003D, 0x00000000, 0x000002CF, 0x00B802E0,
1095+ 0xFFFFFFEE, 0x00000000, 0x009300DC, 0x00B80049, 0x00DC0000, 0x017E0126, 0x021101C7, 0x02DE0270,
1096+ 0x5C594E00, 0x6B6A685E, 0x8F7A6D59, 0x6F6F5868, 0x004C003D, 0x00000000, 0x000002DE, 0x00BC02F3,
1097+ 0xFFFFFFEF, 0x00000000, 0x009700E2, 0x00BC004B, 0x00E20000, 0x0188012E, 0x021F01D3, 0x02F20281,
1098+ 0x5C594E00, 0x6C6A685F, 0x8F7A6D59, 0x6F6F5868, 0x004C003D, 0x00000000, 0x000002F2, 0x00C10307,
1099+ 0xFFFFFFF0, 0x00000000, 0x009B00E9, 0x00C2004E, 0x00E90000, 0x01940137, 0x023001E2, 0x03090295,
1100+ 0x5D5A4F00, 0x6C6A695F, 0x8F7A6E5A, 0x6F6F5969, 0x004C003E, 0x00000000, 0x00000309, 0x00C7031C,
1101+ 0xFFFFFFF1, 0x00000000, 0x009F00EF, 0x00C70050, 0x00EF0000, 0x019E013F, 0x023E01EE, 0x031D02A5,
1102+ 0x5D5A4F00, 0x6C6B695F, 0x8F7B6E5A, 0x6F6F5969, 0x004C003E, 0x00000000, 0x0000031D, 0x00CC0333,
1103+ 0xFFFFFFF2, 0x00000000, 0x00A400F6, 0x00CD0052, 0x00F60000, 0x01AB0148, 0x024F01FD, 0x033402B9,
1104+ 0x5D5A4F00, 0x6D6B6968, 0x8F7B6E5A, 0x6F6F5969, 0x004D003E, 0x00000000, 0x00000334, 0x00D2034B,
1105+ 0xFFFFFFF3, 0x00000000, 0x00AA00FE, 0x00D40055, 0x00FE0000, 0x01B90153, 0x0262020E, 0x035002D1,
1106+ 0x5E5B5800, 0x6D6B6A68, 0x8F7B6F5B, 0x6F6F5969, 0x004D003F, 0x00000000, 0x00000350, 0x00D90365,
1107+ 0xFFFFFFF4, 0x00000000, 0x00AF0107, 0x00DB0058, 0x01070000, 0x01C7015E, 0x0276021F, 0x036B02E8,
1108+ 0x5E5B5800, 0x6E6C6A68, 0x8F7B6F5B, 0x6F6F5A6A, 0x004E003F, 0x00000000, 0x0000036B, 0x00E00380,
1109+ 0xFFFFFFF5, 0x00000000, 0x00B4010F, 0x00E2005A, 0x010F0000, 0x01D50169, 0x028A022F, 0x038602FF,
1110+ 0x5F5B5800, 0x6E6C6A69, 0x8F7C785B, 0x6F6F5A6A, 0x004E0048, 0x00000000, 0x00000386, 0x00E7039D,
1111+ 0xFFFFFFF6, 0x00000000, 0x00BA0117, 0x00E8005D, 0x01170000, 0x01E30174, 0x029D0240, 0x03A20316,
1112+ 0x5F5C5900, 0x6F6C6A69, 0x8F7C785C, 0x6F6F5A6A, 0x004F0048, 0x00000000, 0x000003A2, 0x00EE03BB,
1113+ 0xFFFFFFF7, 0x00000000, 0x00C10121, 0x00F10060, 0x01210000, 0x01F60182, 0x02B70256, 0x03C50334,
1114+ 0x685C5900, 0x6F6D6B69, 0x8F7D785C, 0x6F6F5B6B, 0x004F0048, 0x00000000, 0x000003C5, 0x00F703DC,
1115+ 0xFFFFFFF8, 0x00000000, 0x00C7012B, 0x00F90064, 0x012B0000, 0x0206018E, 0x02CD026A, 0x03E4034F,
1116+ 0x685C5900, 0x6F6D6B6A, 0x8F7D795C, 0x6F6F5B6B, 0x00580049, 0x00000000, 0x000003E4, 0x00FF03FE,
1117+ 0xFFFFFFF9, 0x00000000, 0x00CE0135, 0x01020067, 0x01350000, 0x0218019D, 0x02E7027F, 0x0407036D,
1118+ 0x685D5A00, 0x6F6E6C6A, 0x8F7E795D, 0x6F6F5B6B, 0x00580049, 0x00000000, 0x00000407, 0x01080422,
1119+ 0xFFFFFFFA, 0x00000000, 0x00D60141, 0x010C006B, 0x01410000, 0x022D01AC, 0x03030298, 0x042E038E,
1120+ 0x695D5A00, 0x6F6E6C6A, 0x8F7E795D, 0x6F6F5C6C, 0x00580049, 0x00000000, 0x0000042E, 0x0112044A,
1121+ 0xFFFFFFFB, 0x00000000, 0x00DE014D, 0x0115006F, 0x014D0000, 0x024101BC, 0x031F02B0, 0x045503AF,
1122+ 0x695E5A00, 0x6F6F6C6B, 0x8F7F7A5E, 0x6F6F5C6C, 0x0059004A, 0x00000000, 0x00000455, 0x011C0473,
1123+ 0xFFFFFFFC, 0x00000000, 0x00E7015B, 0x01210074, 0x015B0000, 0x025901CF, 0x034102CD, 0x048403D7,
1124+ 0x695E5B00, 0x6F6F6D6B, 0x8F7F7A5E, 0x6F6F5D6D, 0x0059004A, 0x00000000, 0x00000484, 0x012804A0,
1125+ 0xFFFFFFFD, 0x00000000, 0x00F10169, 0x012D0078, 0x01690000, 0x027201E1, 0x036202EA, 0x04B303FF,
1126+ 0x6A5F5B00, 0x6F6F6E6C, 0x8F887B5F, 0x6F6F5D6D, 0x0059004B, 0x00000000, 0x000004B3, 0x013404D0,
1127+ 0xFFFFFFFE, 0x00000000, 0x00FA0177, 0x0139007D, 0x01770000, 0x028A01F4, 0x03840307, 0x04E20427,
1128+ 0x6A685C00, 0x6F6F6E6C, 0x8F887B68, 0x6F6F5E6E, 0x005A004B, 0x00000000, 0x000004E2, 0x01400502,
1129+ 0xFFFFFFFF, 0x00000000, 0x01050187, 0x01460082, 0x01870000, 0x02A6020A, 0x03AB0329, 0x05190455,
1130+ 0x6B685C00, 0x6F6F6F6D, 0x8F897B68, 0x6F6F5E6E, 0x005A004B, 0x00000000, 0x00000519, 0x014E0538,
1131+ 0x00080004, 0x00090008, 0x000B000A, 0x000C000C, 0x000E000D, 0x0010000F, 0x00120011, 0x00130013,
1132+ 0x00150014, 0x00170016, 0x00190018, 0x001A001A, 0x001C001B, 0x001E001D, 0x0020001F, 0x00210020,
1133+ 0x00230022, 0x00250024, 0x00260026, 0x00280027, 0x002A0029, 0x002B002B, 0x002D002C, 0x002F002E,
1134+ 0x00300030, 0x00320031, 0x00340033, 0x00350035, 0x00370036, 0x00390038, 0x003A0039, 0x003C003B,
1135+ 0x003E003D, 0x003F003E, 0x00410040, 0x00420042, 0x00440043, 0x00460045, 0x00470046, 0x00490048,
1136+ 0x004A004A, 0x004C004B, 0x004E004D, 0x004F004E, 0x00510050, 0x00520051, 0x00540053, 0x00550055,
1137+ 0x00580057, 0x005C005A, 0x005F005D, 0x00620060, 0x00650063, 0x00680066, 0x006B0069, 0x006E006C,
1138+ 0x0071006F, 0x00740072, 0x00760075, 0x00790078, 0x007D007B, 0x0081007F, 0x00860083, 0x008A0088,
1139+ 0x008E008C, 0x00920090, 0x00960094, 0x009A0098, 0x009E009C, 0x00A400A1, 0x00A900A6, 0x00AE00AC,
1140+ 0x00B400B1, 0x00B900B6, 0x00BE00BB, 0x00C300C0, 0x00CA00C7, 0x00D000CD, 0x00D600D3, 0x00DC00D9,
1141+ 0x00E200DF, 0x00E900E6, 0x00F000ED, 0x00F700F3, 0x00FD00FA, 0x01050101, 0x010D0109, 0x01140110,
1142+ 0x011C0118, 0x01240120, 0x012C0128, 0x01350130, 0x013D0139, 0x01460142, 0x014F014A, 0x01580154,
1143+ 0x0162015D, 0x016C0167, 0x01760171, 0x0180017B, 0x018B0185, 0x01960190, 0x01A1019B, 0x01AD01A7,
1144+ 0x01B901B3, 0x01C601BF, 0x01D301CD, 0x01E201DB, 0x01F101E9, 0x020101F9, 0x0212020A, 0x0225021B,
1145+ 0x0239022F, 0x024E0243, 0x0266025A, 0x02800272, 0x029C028E, 0x02BC02AC, 0x02E002CD, 0x030702F3,
1146+ 0x0333031C, 0x0365034B, 0x039D0380, 0x03DC03BB, 0x042203FE, 0x0473044A, 0x04D004A0, 0x05380502,
1147+ 0x00080004, 0x000A0009, 0x000C000B, 0x000E000D, 0x0010000F, 0x00120011, 0x00140013, 0x00160015,
1148+ 0x00180017, 0x001A0019, 0x001C001B, 0x001E001D, 0x0020001F, 0x00220021, 0x00240023, 0x00260025,
1149+ 0x00280027, 0x002A0029, 0x002C002B, 0x002E002D, 0x0030002F, 0x00320031, 0x00340033, 0x00360035,
1150+ 0x00380037, 0x003A0039, 0x003C003B, 0x003E003D, 0x0040003F, 0x00420041, 0x00440043, 0x00460045,
1151+ 0x00480047, 0x004A0049, 0x004C004B, 0x004E004D, 0x0050004F, 0x00520051, 0x00540053, 0x00560055,
1152+ 0x00580057, 0x005A0059, 0x005C005B, 0x005E005D, 0x0060005F, 0x00620061, 0x00640063, 0x00660065,
1153+ 0x006A0068, 0x006E006C, 0x00720070, 0x00760074, 0x007A0078, 0x007E007C, 0x00820080, 0x00860084,
1154+ 0x008A0088, 0x008E008C, 0x00920090, 0x00960094, 0x009B0098, 0x00A1009E, 0x00A700A4, 0x00AD00AA,
1155+ 0x00B300B0, 0x00B900B6, 0x00BF00BC, 0x00C500C2, 0x00CB00C8, 0x00D300CF, 0x00DB00D7, 0x00E300DF,
1156+ 0x00EB00E7, 0x00F300EF, 0x00FB00F7, 0x010400FF, 0x010E0109, 0x01180113, 0x0122011D, 0x012C0127,
1157+ 0x01370131, 0x0143013D, 0x014F0149, 0x015B0155, 0x01670161, 0x0175016E, 0x0183017C, 0x0191018A,
1158+ 0x01A00198, 0x01B001A8, 0x01C001B8, 0x01D101C8, 0x01E301DA, 0x01F501EC, 0x020801FE, 0x021C0212,
1159+ 0x02300226, 0x0246023B, 0x025C0251, 0x02730267, 0x028B027F, 0x02A40297, 0x02BE02B1, 0x02D902CB,
1160+ 0x02F502E7, 0x03120303, 0x03300321, 0x03500340, 0x03710360, 0x03930382, 0x03B703A5, 0x03DC03C9,
1161+ 0x040203EF, 0x042A0416, 0x0454043F, 0x047F0469, 0x04AC0495, 0x04DB04C3, 0x050C04F3, 0x053F0525,
1162+ 0x05740559, 0x05AB058F, 0x05E405C7, 0x061F0601, 0x065C063D, 0x069C067C, 0x06DF06BD, 0x07240701
1163+};
1164+
1165+const unsigned int gen9_vp9_avs_coeffs[256] = {
1166+ 0x00000000, 0x40400000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000,
1167+ 0x0101FFFF, 0x4040FEFE, 0xFFFF0202, 0x00000101, 0x40FF0000, 0x00000001, 0x40FF0000, 0x00000001,
1168+ 0x0202FFFF, 0x4141FCFC, 0xFEFE0404, 0xFFFF0101, 0x3FFE0000, 0x00000003, 0x3FFE0000, 0x00000003,
1169+ 0x0303FFFF, 0x3F3FFBFB, 0xFDFD0606, 0xFFFF0202, 0x3EFD0000, 0x00000005, 0x3EFD0000, 0x00000005,
1170+ 0x0303FEFE, 0x4040F9F9, 0xFCFC0909, 0xFFFF0202, 0x3EFC0000, 0x00000006, 0x3EFC0000, 0x00000006,
1171+ 0x0404FEFE, 0x3F3FF8F8, 0xFBFB0B0B, 0xFEFE0303, 0x3CFC0000, 0x00000008, 0x3CFC0000, 0x00000008,
1172+ 0x0505FDFD, 0x3E3EF7F7, 0xFAFA0E0E, 0xFEFE0303, 0x3CFB0000, 0x0000FF0A, 0x3CFB0000, 0x0000FF0A,
1173+ 0x0505FDFD, 0x3D3DF5F5, 0xF9F91111, 0xFEFE0404, 0x39FB0000, 0x0000FF0D, 0x39FB0000, 0x0000FF0D,
1174+ 0x0606FDFD, 0x3B3BF5F5, 0xF8F81414, 0xFDFD0404, 0x37FB0000, 0x0000FF0F, 0x37FB0000, 0x0000FF0F,
1175+ 0x0606FCFC, 0x3B3BF4F4, 0xF7F71616, 0xFDFD0505, 0x35FB0000, 0x0000FF11, 0x35FB0000, 0x0000FF11,
1176+ 0x0707FCFC, 0x3939F3F3, 0xF6F61919, 0xFDFD0505, 0x33FB0000, 0x0000FE14, 0x33FB0000, 0x0000FE14,
1177+ 0x0707FCFC, 0x3737F3F3, 0xF5F51C1C, 0xFCFC0606, 0x31FB0000, 0x0000FE16, 0x31FB0000, 0x0000FE16,
1178+ 0x0707FCFC, 0x3535F2F2, 0xF5F51F1F, 0xFCFC0606, 0x2EFB0000, 0x0000FE19, 0x2EFB0000, 0x0000FE19,
1179+ 0x0707FCFC, 0x3232F2F2, 0xF4F42222, 0xFCFC0707, 0x2CFB0000, 0x0000FD1C, 0x2CFB0000, 0x0000FD1C,
1180+ 0x0707FCFC, 0x3030F2F2, 0xF3F32525, 0xFCFC0707, 0x29FB0000, 0x0000FD1F, 0x29FB0000, 0x0000FD1F,
1181+ 0x0707FCFC, 0x2D2DF2F2, 0xF3F32828, 0xFCFC0707, 0x27FC0000, 0x0000FC21, 0x27FC0000, 0x0000FC21,
1182+ 0x0707FCFC, 0x2929F3F3, 0xF3F32B2B, 0xFCFC0707, 0x24FC0000, 0x0000FC24, 0x24FC0000, 0x0000FC24,
1183+ 0x0707FCFC, 0x2828F3F3, 0xF2F22D2D, 0xFCFC0707, 0x21FC0000, 0x0000FC27, 0x21FC0000, 0x0000FC27,
1184+ 0x0707FCFC, 0x2525F3F3, 0xF2F23030, 0xFCFC0707, 0x1FFD0000, 0x0000FB29, 0x1FFD0000, 0x0000FB29,
1185+ 0x0707FCFC, 0x2222F4F4, 0xF2F23232, 0xFCFC0707, 0x1CFD0000, 0x0000FB2C, 0x1CFD0000, 0x0000FB2C,
1186+ 0x0606FCFC, 0x1F1FF5F5, 0xF2F23535, 0xFCFC0707, 0x19FE0000, 0x0000FB2E, 0x19FE0000, 0x0000FB2E,
1187+ 0x0606FCFC, 0x1C1CF5F5, 0xF3F33737, 0xFCFC0707, 0x16FE0000, 0x0000FB31, 0x16FE0000, 0x0000FB31,
1188+ 0x0505FDFD, 0x1919F6F6, 0xF3F33939, 0xFCFC0707, 0x14FE0000, 0x0000FB33, 0x14FE0000, 0x0000FB33,
1189+ 0x0505FDFD, 0x1616F7F7, 0xF4F43B3B, 0xFCFC0606, 0x11FF0000, 0x0000FB35, 0x11FF0000, 0x0000FB35,
1190+ 0x0404FDFD, 0x1414F8F8, 0xF5F53B3B, 0xFDFD0606, 0x0FFF0000, 0x0000FB37, 0x0FFF0000, 0x0000FB37,
1191+ 0x0404FEFE, 0x1111F9F9, 0xF5F53D3D, 0xFDFD0505, 0x0DFF0000, 0x0000FB39, 0x0DFF0000, 0x0000FB39,
1192+ 0x0303FEFE, 0x0E0EFAFA, 0xF7F73E3E, 0xFDFD0505, 0x0AFF0000, 0x0000FB3C, 0x0AFF0000, 0x0000FB3C,
1193+ 0x0303FEFE, 0x0B0BFBFB, 0xF8F83F3F, 0xFEFE0404, 0x08000000, 0x0000FC3C, 0x08000000, 0x0000FC3C,
1194+ 0x0202FFFF, 0x0909FCFC, 0xF9F94040, 0xFEFE0303, 0x06000000, 0x0000FC3E, 0x06000000, 0x0000FC3E,
1195+ 0x0202FFFF, 0x0606FDFD, 0xFBFB3F3F, 0xFFFF0303, 0x05000000, 0x0000FD3E, 0x05000000, 0x0000FD3E,
1196+ 0x0101FFFF, 0x0404FEFE, 0xFCFC4141, 0xFFFF0202, 0x03000000, 0x0000FE3F, 0x03000000, 0x0000FE3F,
1197+ 0x01010000, 0x0202FFFF, 0xFEFE4040, 0xFFFF0101, 0x01000000, 0x0000FF40, 0x01000000, 0x0000FF40,
1198+};
1199+
1200+const unsigned int intel_vp9_costlut_key[4096] = {
1201+ 0x02061200, 0x00000036, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x28190702, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010002,
1202+ 0x050D2501, 0x0000006D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x38290E03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020004,
1203+ 0x050D2502, 0x0000006D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x38290E03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020004,
1204+ 0x050D2503, 0x0000006D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x38290E03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020004,
1205+ 0x06102E04, 0x00000088, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3A2B1904, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020005,
1206+ 0x06102E05, 0x00000088, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3A2B1904, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020005,
1207+ 0x07133706, 0x000000A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3C2E1B05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030006,
1208+ 0x07133707, 0x000000A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3C2E1B05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030006,
1209+ 0x07133708, 0x000000A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3C2E1B05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030006,
1210+ 0x08164009, 0x000000BE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3E381D05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030007,
1211+ 0x0816400A, 0x000000BE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3E381D05, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030007,
1212+ 0x0A1A4A0B, 0x000000DA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x48391E06, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040008,
1213+ 0x0A1A4A0C, 0x000000DA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x48391E06, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040008,
1214+ 0x0B1D530D, 0x000000F5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x493A2807, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040009,
1215+ 0x0B1D530E, 0x000000F5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x493A2807, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040009,
1216+ 0x0B1D530F, 0x000000F5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x493A2807, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040009,
1217+ 0x0C205C10, 0x00000110, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4A3B2908, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000A,
1218+ 0x0C205C11, 0x00000110, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4A3B2908, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000A,
1219+ 0x0D236512, 0x0000012B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4B3C2A09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000B,
1220+ 0x0D236513, 0x0000012B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4B3C2A09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0005000B,
1221+ 0x0E266E14, 0x00000146, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4C3E2B09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000C,
1222+ 0x0E266E15, 0x00000146, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4C3E2B09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000C,
1223+ 0x102A7816, 0x00000162, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4D3F2C0A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000D,
1224+ 0x102A7817, 0x00000162, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4D3F2C0A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000D,
1225+ 0x102A7818, 0x00000162, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4D3F2C0A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0006000D,
1226+ 0x112D8119, 0x0000017D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4E482C0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000E,
1227+ 0x112D811A, 0x0000017D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4E482C0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000E,
1228+ 0x12308A1B, 0x00000198, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4F482D0C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000F,
1229+ 0x12308A1C, 0x00000198, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4F482D0C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007000F,
1230+ 0x1333931D, 0x000001B3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x58492E0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080010,
1231+ 0x1333931E, 0x000001B3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x58492E0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080010,
1232+ 0x1333931F, 0x000001B3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x58492E0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080010,
1233+ 0x14369C20, 0x000001CE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x594A2F0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080011,
1234+ 0x14369C21, 0x000001CE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x594A2F0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080011,
1235+ 0x163AA622, 0x000001EA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x594A380E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090012,
1236+ 0x163AA623, 0x000001EA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x594A380E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090012,
1237+ 0x173DAF24, 0x00000205, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5A4B380F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090013,
1238+ 0x173DAF25, 0x00000205, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5A4B380F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090013,
1239+ 0x173DAF26, 0x00000205, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5A4B380F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00090013,
1240+ 0x1840B827, 0x00000220, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5A4B3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0014,
1241+ 0x1840B828, 0x00000220, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5A4B3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0014,
1242+ 0x1943C129, 0x0000023B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5B4C3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0015,
1243+ 0x1943C12A, 0x0000023B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5B4C3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0015,
1244+ 0x1943C12B, 0x0000023B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5B4C3918, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000A0015,
1245+ 0x1A46CA2C, 0x00000256, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5B4C3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0016,
1246+ 0x1A46CA2D, 0x00000256, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5B4C3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0016,
1247+ 0x1B49D32E, 0x00000271, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5C4D3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0017,
1248+ 0x1B49D32F, 0x00000271, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5C4D3A19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000B0017,
1249+ 0x1D4DDD30, 0x0000028D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5C4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0018,
1250+ 0x1D4DDD31, 0x0000028D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5C4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0018,
1251+ 0x1D4DDD32, 0x0000028D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5C4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0018,
1252+ 0x1E50E633, 0x000002A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5D4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0019,
1253+ 0x1E50E634, 0x000002A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5D4E3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0019,
1254+ 0x1F53EF35, 0x000002C3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5D4F3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001A,
1255+ 0x1F53EF36, 0x000002C3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5D4F3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001A,
1256+ 0x1F53EF37, 0x000002C3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5D4F3B1A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001A,
1257+ 0x2056F838, 0x000002DE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5E4F3C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001B,
1258+ 0x2056F839, 0x000002DE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5E4F3C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D001B,
1259+ 0x2159FF3A, 0x000002F9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5E583C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001C,
1260+ 0x2159FF3B, 0x000002F9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5E583C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001C,
1261+ 0x2159FF3C, 0x000002F9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5E583C1B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001C,
1262+ 0x235DFF3D, 0x00000315, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001D,
1263+ 0x235DFF3E, 0x00000315, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E001D,
1264+ 0x2460FF3F, 0x00000330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001E,
1265+ 0x2460FF40, 0x00000330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5F583D1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001E,
1266+ 0x2563FF41, 0x0000034B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593E1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001F,
1267+ 0x2563FF42, 0x0000034B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593E1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001F,
1268+ 0x2563FF43, 0x0000034B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593E1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F001F,
1269+ 0x2666FF44, 0x00000366, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593E1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100020,
1270+ 0x2666FF45, 0x00000366, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593E1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100020,
1271+ 0x2769FF46, 0x00000381, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593F1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100021,
1272+ 0x2769FF47, 0x00000381, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593F1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100021,
1273+ 0x2769FF48, 0x00000381, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68593F1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100021,
1274+ 0x296DFF49, 0x0000039D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110022,
1275+ 0x296DFF4A, 0x0000039D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110022,
1276+ 0x2A70FF4B, 0x000003B8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110023,
1277+ 0x2A70FF4C, 0x000003B8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110023,
1278+ 0x2A70FF4D, 0x000003B8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A3F1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00110023,
1279+ 0x2B73FF4E, 0x000003D3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A481E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120024,
1280+ 0x2B73FF4F, 0x000003D3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A481E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120024,
1281+ 0x2C76FF50, 0x000003EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120025,
1282+ 0x2C76FF51, 0x000003EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120025,
1283+ 0x2C76FF52, 0x000003EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x695A481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120025,
1284+ 0x2D79FF53, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130026,
1285+ 0x2D79FF54, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B481F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130026,
1286+ 0x2F7DFF55, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B491F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130027,
1287+ 0x2F7DFF56, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B491F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130027,
1288+ 0x2F7DFF57, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B491F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00130027,
1289+ 0x3080FF58, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140028,
1290+ 0x3080FF59, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140028,
1291+ 0x3080FF5A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6A5B4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140028,
1292+ 0x3183FF5B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140029,
1293+ 0x3183FF5C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00140029,
1294+ 0x3286FF5D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002A,
1295+ 0x3286FF5E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002A,
1296+ 0x3286FF5F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4928, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002A,
1297+ 0x3389FF60, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4929, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0015002B,
1298+ 0x358DFF61, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6B5C4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0016002C,
1299+ 0x3690FF62, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0016002D,
1300+ 0x3793FF63, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017002E,
1301+ 0x3793FF64, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017002E,
1302+ 0x3896FF65, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6C5D4A29, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017002F,
1303+ 0x3999FF66, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6C5D4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180030,
1304+ 0x3B9DFF67, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180031,
1305+ 0x3B9DFF68, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180031,
1306+ 0x3CA0FF69, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00190032,
1307+ 0x3DA3FF6A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6D5E4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00190033,
1308+ 0x3EA6FF6B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6D5F4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001A0034,
1309+ 0x3EA6FF6C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6D5F4B2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001A0034,
1310+ 0x3FA9FF6D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6E5F4C2A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001A0035,
1311+ 0x41ADFF6E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6E5F4C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001B0036,
1312+ 0x42B0FF6F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6E5F4C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001B0037,
1313+ 0x42B0FF70, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6E5F4C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001B0037,
1314+ 0x43B3FF71, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6E684C2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0038,
1315+ 0x44B6FF72, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6F684D2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0039,
1316+ 0x45B9FF73, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6F684D2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001D003A,
1317+ 0x45B9FF74, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6F684D2B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001D003A,
1318+ 0x47BDFF75, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6F684D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001D003B,
1319+ 0x48C0FF76, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6F684D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001E003C,
1320+ 0x48C0FF77, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6F684D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001E003C,
1321+ 0x49C3FF78, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x78694D2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001E003D,
1322+ 0x4AC6FF79, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x78694E2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F003E,
1323+ 0x4BC9FF7A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x78694E2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F003F,
1324+ 0x4DCDFF7B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x78694E2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200040,
1325+ 0x4ED0FF7C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x78694E2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200041,
1326+ 0x50D6FF7D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x79694F2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00210043,
1327+ 0x51D9FF7E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A4F2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00220044,
1328+ 0x52DCFF7F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A4F2E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00220045,
1329+ 0x54E0FF80, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A4F2E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00230046,
1330+ 0x55E3FF81, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A582E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00230047,
1331+ 0x56E6FF82, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A582E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00240048,
1332+ 0x57E9FF83, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A582E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00240049,
1333+ 0x58ECFF84, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x796A582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0025004A,
1334+ 0x5AF0FF85, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7A6B582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0025004B,
1335+ 0x5BF3FF86, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7A6B582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0026004C,
1336+ 0x5CF6FF87, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7A6B582F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0026004D,
1337+ 0x5DF9FF88, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7A6B592F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0027004E,
1338+ 0x5EFCFF89, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7A6B5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0027004F,
1339+ 0x60FFFF8A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7A6B5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280050,
1340+ 0x62FFFF8B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00290052,
1341+ 0x63FFFF8C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00290053,
1342+ 0x64FFFF8D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002A0054,
1343+ 0x67FFFF8E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B6C5938, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002B0056,
1344+ 0x68FFFF8F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B6C5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002B0057,
1345+ 0x69FFFF90, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B6C5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002C0058,
1346+ 0x6CFFFF91, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002D005A,
1347+ 0x6DFFFF92, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002D005B,
1348+ 0x6EFFFF93, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002E005C,
1349+ 0x6FFFFF94, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002E005D,
1350+ 0x72FFFF95, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6D5A39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002F005F,
1351+ 0x73FFFF96, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6D5B39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300060,
1352+ 0x74FFFF97, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7C6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300061,
1353+ 0x76FFFF98, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7D6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00310063,
1354+ 0x79FFFF99, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7D6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00320065,
1355+ 0x7AFFFF9A, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7D6E5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00330066,
1356+ 0x7CFFFF9B, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7D6F5B3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00340068,
1357+ 0x7EFFFF9C, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7D6F5C3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00340069,
1358+ 0x80FFFF9D, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7E6F5C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0035006B,
1359+ 0x81FFFF9E, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7E6F5C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0036006C,
1360+ 0x83FFFF9F, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7E6F5C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0037006E,
1361+ 0x85FFFFA0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7E785C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0037006F,
1362+ 0x87FFFFA1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7E785C3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00380071,
1363+ 0x89FFFFA2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7F785D3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00390073,
1364+ 0x8BFFFFA3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7F785D3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003A0074,
1365+ 0x8DFFFFA4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7F785D3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003B0076,
1366+ 0x8FFFFFA5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7F785D3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0078,
1367+ 0x91FFFFA6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88785D3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0079,
1368+ 0x93FFFFA7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88795E3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003D007B,
1369+ 0x95FFFFA8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88795E3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003E007D,
1370+ 0x97FFFFA9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88795E3C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F007E,
1371+ 0x99FFFFAA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88795E3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400080,
1372+ 0x9BFFFFAB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88795E3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00410082,
1373+ 0x9EFFFFAC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88795F3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00420084,
1374+ 0xA0FFFFAD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x89795F3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00430086,
1375+ 0xA3FFFFAE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A5F3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00440088,
1376+ 0xA5FFFFAF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A5F3E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0045008A,
1377+ 0xA7FFFFB0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A5F3E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0046008C,
1378+ 0xAAFFFFB1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A683E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0047008E,
1379+ 0xACFFFFB2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A683E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00480090,
1380+ 0xAFFFFFB3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A683E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00490092,
1381+ 0xB1FFFFB4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x897A683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004A0094,
1382+ 0xB3FFFFB5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004B0096,
1383+ 0xB6FFFFB6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004C0098,
1384+ 0xB8FFFFB7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B683F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004D009A,
1385+ 0xBAFFFFB8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B693F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004E009C,
1386+ 0xBDFFFFB9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B693F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004F009E,
1387+ 0xC0FFFFBA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005000A1,
1388+ 0xC3FFFFBB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A7B6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005100A3,
1389+ 0xC5FFFFBC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005200A5,
1390+ 0xC8FFFFBD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005300A7,
1391+ 0xCBFFFFBE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005500AA,
1392+ 0xCEFFFFBF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7C6948, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005600AC,
1393+ 0xD0FFFFC0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7C6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005700AE,
1394+ 0xD4FFFFC1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7C6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005800B1,
1395+ 0xD6FFFFC2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005900B3,
1396+ 0xDAFFFFC3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005B00B6,
1397+ 0xDCFFFFC4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005C00B8,
1398+ 0xE0FFFFC5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005D00BB,
1399+ 0xE2FFFFC6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C7D6A49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x005E00BD,
1400+ 0xE6FFFFC7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C7D6B49, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006000C0,
1401+ 0xE8FFFFC8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006100C2,
1402+ 0xEBFFFFC9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006200C5,
1403+ 0xEFFFFFCA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006400C8,
1404+ 0xF3FFFFCB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006500CB,
1405+ 0xF5FFFFCC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8D7E6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006600CD,
1406+ 0xF9FFFFCD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8D7F6B4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006800D0,
1407+ 0xFCFFFFCE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8E7F6C4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006900D3,
1408+ 0xFFFFFFCF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8E7F6C4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006B00D6,
1409+ 0xFFFFFFD0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8E7F6C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006C00D9,
1410+ 0xFFFFFFD1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8E7F6C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006E00DC,
1411+ 0xFFFFFFD2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8E886C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006F00DF,
1412+ 0xFFFFFFD3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F886C4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007100E3,
1413+ 0xFFFFFFD4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F886D4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007300E6,
1414+ 0xFFFFFFD5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F886D4B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007400E9,
1415+ 0xFFFFFFD6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F886D4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007600ED,
1416+ 0xFFFFFFD7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F886D4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007800F1,
1417+ 0xFFFFFFD8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896D4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007A00F4,
1418+ 0xFFFFFFD9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896E4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007C00F8,
1419+ 0xFFFFFFDA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896E4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007E00FC,
1420+ 0xFFFFFFDB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896E4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800100,
1421+ 0xFFFFFFDC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896E4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00820105,
1422+ 0xFFFFFFDD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896F4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00840109,
1423+ 0xFFFFFFDE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F896F4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0086010D,
1424+ 0xFFFFFFDF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8A6F4D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00890112,
1425+ 0xFFFFFFE0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8A6F4E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x008B0117,
1426+ 0xFFFFFFE1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8A784E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x008E011C,
1427+ 0xFFFFFFE2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8A784E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00900121,
1428+ 0xFFFFFFE3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8A784E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00930127,
1429+ 0xFFFFFFE4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8B784F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0096012D,
1430+ 0xFFFFFFE5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8B784F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00990133,
1431+ 0xFFFFFFE6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8B794F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x009C0139,
1432+ 0xFFFFFFE7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8B7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A00140,
1433+ 0xFFFFFFE8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8B7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A30147,
1434+ 0xFFFFFFE9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8C7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A7014E,
1435+ 0xFFFFFFEA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8C7958, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00AB0156,
1436+ 0xFFFFFFEB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8C7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00AF015E,
1437+ 0xFFFFFFEC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8D7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00B30166,
1438+ 0xFFFFFFED, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8D7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00B80170,
1439+ 0xFFFFFFEE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8D7A59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00BC0179,
1440+ 0xFFFFFFEF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8E7B59, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C10183,
1441+ 0xFFFFFFF0, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8E7B5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C7018E,
1442+ 0xFFFFFFF1, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8E7B5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00CC0199,
1443+ 0xFFFFFFF2, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7C5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00D201A5,
1444+ 0xFFFFFFF3, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7C5B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00D901B2,
1445+ 0xFFFFFFF4, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7C5B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00E001C0,
1446+ 0xFFFFFFF5, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7D5B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00E701CE,
1447+ 0xFFFFFFF6, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7D5C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00EE01DD,
1448+ 0xFFFFFFF7, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7E5C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F701EE,
1449+ 0xFFFFFFF8, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7E5C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FF01FF,
1450+ 0xFFFFFFF9, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7F5D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01080211,
1451+ 0xFFFFFFFA, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F7F5D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01120225,
1452+ 0xFFFFFFFB, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F885E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x011C0239,
1453+ 0xFFFFFFFC, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F885E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01280250,
1454+ 0xFFFFFFFD, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F885F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01340268,
1455+ 0xFFFFFFFE, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F8968, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01400281,
1456+ 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8F8F8968, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x014E029C,
1457+};
1458+
1459+const unsigned int intel_vp9_costlut_p[4096] = {
1460+ 0x040C2400, 0x00000010, 0x00010001, 0x00010000, 0x00010000, 0x00020002, 0x00030002, 0x00040003, 0x02020100, 0x04030302, 0x39070402, 0x6F6F0103, 0x00010001, 0x00000000, 0x00000004, 0x00010004,
1461+ 0x08184801, 0x00000001, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007, 0x04030200, 0x08070605, 0x490D0903, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x00020008,
1462+ 0x08184802, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007, 0x04030200, 0x08070605, 0x490D0903, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x00020008,
1463+ 0x091B5103, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007, 0x04030200, 0x08070605, 0x4A0F0A04, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x00020009,
1464+ 0x0A1E5A04, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007, 0x04030200, 0x08070605, 0x4B180B04, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x0002000A,
1465+ 0x0B216305, 0x00000000, 0x00020002, 0x00020001, 0x00020000, 0x00040003, 0x00060005, 0x00080007, 0x04030200, 0x08070605, 0x4D190C04, 0x6F6F0305, 0x00020001, 0x00000000, 0x00000008, 0x0002000B,
1466+ 0x0C246C06, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A, 0x06050400, 0x0C0A0807, 0x4E1A0D05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000C,
1467+ 0x0C246C07, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A, 0x06050400, 0x0C0A0807, 0x4E1A0D05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000C,
1468+ 0x0D277508, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A, 0x06050400, 0x0C0A0807, 0x4F1B0E05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000D,
1469+ 0x0E2A7E09, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A, 0x06050400, 0x0C0A0807, 0x581C0F05, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000E,
1470+ 0x0F2D870A, 0x00000000, 0x00020004, 0x00030001, 0x00040000, 0x00060005, 0x00080007, 0x000C000A, 0x06050400, 0x0C0A0807, 0x591D1806, 0x6F6F0408, 0x00030002, 0x00000000, 0x0000000C, 0x0003000F,
1471+ 0x1030900B, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D, 0x08060500, 0x180D0B0A, 0x591D1906, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040010,
1472+ 0x1133990C, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D, 0x08060500, 0x180D0B0A, 0x5A1E1A07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040011,
1473+ 0x1236A20D, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D, 0x08060500, 0x180D0B0A, 0x5A1F1A07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040012,
1474+ 0x1339AB0E, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D, 0x08060500, 0x180D0B0A, 0x5B281B07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040013,
1475+ 0x1339AB0F, 0x00000000, 0x00030005, 0x00040002, 0x00050000, 0x00080006, 0x000B000A, 0x0010000D, 0x08060500, 0x180D0B0A, 0x5B281B07, 0x6F6F050B, 0x00040002, 0x00000000, 0x00000010, 0x00040013,
1476+ 0x143CB410, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011, 0x0A080600, 0x1A190E0C, 0x5B281B08, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050014,
1477+ 0x153FBD11, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011, 0x0A080600, 0x1A190E0C, 0x5C291C08, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050015,
1478+ 0x1642C612, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011, 0x0A080600, 0x1A190E0C, 0x5D291C09, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050016,
1479+ 0x1745CF13, 0x00000000, 0x00040006, 0x00050002, 0x00060000, 0x000A0008, 0x000E000C, 0x00140011, 0x0A080600, 0x1A190E0C, 0x5D2A1D09, 0x6F6F070E, 0x00050003, 0x00000000, 0x00000014, 0x00050017,
1480+ 0x1848D814, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014, 0x0C090700, 0x1C1A190F, 0x5E2A1D09, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x00060018,
1481+ 0x194BE115, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014, 0x0C090700, 0x1C1A190F, 0x5E2A1E0A, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x00060019,
1482+ 0x1A4EEA16, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014, 0x0C090700, 0x1C1A190F, 0x5F2B1E0A, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x0006001A,
1483+ 0x1A4EEA17, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014, 0x0C090700, 0x1C1A190F, 0x5F2B1E0A, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x0006001A,
1484+ 0x1B51F318, 0x00000000, 0x00050007, 0x00060002, 0x00070000, 0x000C0009, 0x0011000F, 0x00170014, 0x0C090700, 0x1C1A190F, 0x5F2B1F0B, 0x6F6F0818, 0x00060003, 0x00000000, 0x00000017, 0x0006001B,
1485+ 0x1C54FC19, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017, 0x0E0B0800, 0x1E1C1A19, 0x682C280B, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001C,
1486+ 0x1D57FF1A, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017, 0x0E0B0800, 0x1E1C1A19, 0x682C280B, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001D,
1487+ 0x1E5AFF1B, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017, 0x0E0B0800, 0x1E1C1A19, 0x692C280C, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001E,
1488+ 0x1F5DFF1C, 0x00000000, 0x00050008, 0x00070003, 0x00080000, 0x000E000B, 0x00140011, 0x001B0017, 0x0E0B0800, 0x1E1C1A19, 0x692D290C, 0x6F6F0A1A, 0x00070004, 0x00000000, 0x0000001B, 0x0007001F,
1489+ 0x2060FF1D, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B, 0x180D0900, 0x281E1C1A, 0x692D290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080020,
1490+ 0x2060FF1E, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B, 0x180D0900, 0x281E1C1A, 0x692D290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080020,
1491+ 0x2163FF1F, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B, 0x180D0900, 0x281E1C1A, 0x692E290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080021,
1492+ 0x2266FF20, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B, 0x180D0900, 0x281E1C1A, 0x6A2E290D, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080022,
1493+ 0x2369FF21, 0x00000000, 0x00060009, 0x00080003, 0x00090000, 0x0010000D, 0x00170013, 0x001F001B, 0x180D0900, 0x281E1C1A, 0x6A2E2A0E, 0x6F6F0B1B, 0x00080004, 0x00000000, 0x0000001F, 0x00080023,
1494+ 0x246CFF22, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E, 0x190E0B00, 0x291F1D1B, 0x6A2F2A0E, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090024,
1495+ 0x256FFF23, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E, 0x190E0B00, 0x291F1D1B, 0x6B2F2A0E, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090025,
1496+ 0x2672FF24, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E, 0x190E0B00, 0x291F1D1B, 0x6B382B0F, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090026,
1497+ 0x2672FF25, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E, 0x190E0B00, 0x291F1D1B, 0x6B382B0F, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090026,
1498+ 0x2775FF26, 0x00000000, 0x0007000B, 0x00090004, 0x000B0000, 0x0012000E, 0x00190016, 0x0023001E, 0x190E0B00, 0x291F1D1B, 0x6B382B0F, 0x6F6F0C1D, 0x00090005, 0x00000000, 0x00000023, 0x00090027,
1499+ 0x2878FF27, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021, 0x1A180C00, 0x2A281E1C, 0x6B382B18, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A0028,
1500+ 0x297BFF28, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021, 0x1A180C00, 0x2A281E1C, 0x6C382B18, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A0029,
1501+ 0x2A7EFF29, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021, 0x1A180C00, 0x2A281E1C, 0x6C392C18, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A002A,
1502+ 0x2B81FF2A, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021, 0x1A180C00, 0x2A281E1C, 0x6C392C19, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A002B,
1503+ 0x2B81FF2B, 0x00000000, 0x0008000C, 0x000A0004, 0x000C0000, 0x00140010, 0x001C0018, 0x00270021, 0x1A180C00, 0x2A281E1C, 0x6C392C19, 0x6F6F0E1E, 0x000A0005, 0x00000000, 0x00000027, 0x000A002B,
1504+ 0x2C84FF2C, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025, 0x1B190D00, 0x2B29281E, 0x6D392C19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002C,
1505+ 0x2D87FF2D, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025, 0x1B190D00, 0x2B29281E, 0x6D392C19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002D,
1506+ 0x2E8AFF2E, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025, 0x1B190D00, 0x2B29281E, 0x6D392D19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002E,
1507+ 0x2F8DFF2F, 0x00000000, 0x0009000D, 0x000B0004, 0x000D0000, 0x00160011, 0x001F001B, 0x002B0025, 0x1B190D00, 0x2B29281E, 0x6D3A2D19, 0x6F6F0F1F, 0x000B0006, 0x00000000, 0x0000002B, 0x000B002F,
1508+ 0x3090FF30, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028, 0x1C1A0E00, 0x2C2A291F, 0x6E3A2D1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0030,
1509+ 0x3090FF31, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028, 0x1C1A0E00, 0x2C2A291F, 0x6E3A2D1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0030,
1510+ 0x3193FF32, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028, 0x1C1A0E00, 0x2C2A291F, 0x6E3A2E1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0031,
1511+ 0x3296FF33, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028, 0x1C1A0E00, 0x2C2A291F, 0x6E3A2E1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0032,
1512+ 0x3399FF34, 0x00000000, 0x0009000E, 0x000C0005, 0x000E0000, 0x00180013, 0x0022001D, 0x002F0028, 0x1C1A0E00, 0x2C2A291F, 0x6F3B2E1A, 0x6F6F1828, 0x000C0007, 0x00000000, 0x0000002F, 0x000C0033,
1513+ 0x349CFF35, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B, 0x1D1A0F00, 0x2D2B2928, 0x6F3B2E1A, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0034,
1514+ 0x359FFF36, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B, 0x1D1A0F00, 0x2D2B2928, 0x6F3B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0035,
1515+ 0x359FFF37, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B, 0x1D1A0F00, 0x2D2B2928, 0x6F3B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0035,
1516+ 0x36A2FF38, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B, 0x1D1A0F00, 0x2D2B2928, 0x6F3B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0036,
1517+ 0x37A5FF39, 0x00000000, 0x000A000F, 0x000D0005, 0x000F0000, 0x001A0014, 0x0025001F, 0x0033002B, 0x1D1A0F00, 0x2D2B2928, 0x783B2F1B, 0x6F6F1929, 0x000D0007, 0x00000000, 0x00000033, 0x000D0037,
1518+ 0x38A8FF3A, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E, 0x1E1B1800, 0x2E2C2A29, 0x783C2F1B, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E0038,
1519+ 0x39ABFF3B, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E, 0x1E1B1800, 0x2E2C2A29, 0x783C381B, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E0039,
1520+ 0x39ABFF3C, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E, 0x1E1B1800, 0x2E2C2A29, 0x783C381B, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E0039,
1521+ 0x3AAEFF3D, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E, 0x1E1B1800, 0x2E2C2A29, 0x783C381C, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E003A,
1522+ 0x3BB1FF3E, 0x00000000, 0x000B0010, 0x000E0005, 0x00100000, 0x001C0016, 0x00270022, 0x0037002E, 0x1E1B1800, 0x2E2C2A29, 0x783C381C, 0x6F6F1A2A, 0x000E0008, 0x00000000, 0x00000037, 0x000E003B,
1523+ 0x3CB4FF3F, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032, 0x1F1C1900, 0x2F2D2B29, 0x793C381C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003C,
1524+ 0x3DB7FF40, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032, 0x1F1C1900, 0x2F2D2B29, 0x793D381C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003D,
1525+ 0x3EBAFF41, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032, 0x1F1C1900, 0x2F2D2B29, 0x793D391C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003E,
1526+ 0x3EBAFF42, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032, 0x1F1C1900, 0x2F2D2B29, 0x793D391C, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003E,
1527+ 0x3FBDFF43, 0x00000000, 0x000C0012, 0x000F0006, 0x00120000, 0x001E0017, 0x002A0024, 0x003B0032, 0x1F1C1900, 0x2F2D2B29, 0x793D391D, 0x6F6F1B2A, 0x000F0008, 0x00000000, 0x0000003B, 0x000F003F,
1528+ 0x40C0FF44, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035, 0x281D1A00, 0x382D2B2A, 0x793D391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100040,
1529+ 0x41C3FF45, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035, 0x281D1A00, 0x382D2B2A, 0x793D391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100041,
1530+ 0x42C6FF46, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035, 0x281D1A00, 0x382D2B2A, 0x793E391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100042,
1531+ 0x42C6FF47, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035, 0x281D1A00, 0x382D2B2A, 0x793E391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100042,
1532+ 0x43C9FF48, 0x00000000, 0x000D0013, 0x00100006, 0x00130000, 0x00210019, 0x002D0027, 0x003F0035, 0x281D1A00, 0x382D2B2A, 0x7A3E391D, 0x6F6F1B2B, 0x00180009, 0x00000000, 0x0000003F, 0x00100043,
1533+ 0x44CCFF49, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038, 0x291E1A00, 0x382E2C2A, 0x7A3E391E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110044,
1534+ 0x45CFFF4A, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038, 0x291E1A00, 0x382E2C2A, 0x7A3E391E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110045,
1535+ 0x46D2FF4B, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038, 0x291E1A00, 0x382E2C2A, 0x7A3E3A1E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110046,
1536+ 0x46D2FF4C, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038, 0x291E1A00, 0x382E2C2A, 0x7A3E3A1E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110046,
1537+ 0x47D5FF4D, 0x00000000, 0x000D0014, 0x00110007, 0x00140000, 0x0023001B, 0x00300029, 0x00420038, 0x291E1A00, 0x382E2C2A, 0x7A3F3A1E, 0x6F6F1C2C, 0x00190009, 0x00000000, 0x00000042, 0x00110047,
1538+ 0x48D8FF4E, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C, 0x291E1B00, 0x392F2D2B, 0x7A3F3A1E, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x00120048,
1539+ 0x49DBFF4F, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C, 0x291E1B00, 0x392F2D2B, 0x7A3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x00120049,
1540+ 0x4ADEFF50, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C, 0x291E1B00, 0x392F2D2B, 0x7B3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x0012004A,
1541+ 0x4ADEFF51, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C, 0x291E1B00, 0x392F2D2B, 0x7B3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x0012004A,
1542+ 0x4BE1FF52, 0x00000000, 0x000E0015, 0x00120007, 0x00150000, 0x0025001C, 0x0033002C, 0x0046003C, 0x291E1B00, 0x392F2D2B, 0x7B3F3A1F, 0x6F6F1D2C, 0x0019000A, 0x00000000, 0x00000046, 0x0012004B,
1543+ 0x4CE4FF53, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F, 0x2A1F1B00, 0x39382D2C, 0x7B483A1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004C,
1544+ 0x4DE7FF54, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F, 0x2A1F1B00, 0x39382D2C, 0x7B483B1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004D,
1545+ 0x4EEAFF55, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F, 0x2A1F1B00, 0x39382D2C, 0x7B483B1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004E,
1546+ 0x4EEAFF56, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F, 0x2A1F1B00, 0x39382D2C, 0x7B483B1F, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004E,
1547+ 0x4FEDFF57, 0x00000000, 0x000F0016, 0x00130007, 0x00160000, 0x0027001E, 0x0035002E, 0x004A003F, 0x2A1F1B00, 0x39382D2C, 0x7B483B28, 0x6F6F1D2D, 0x001A000A, 0x00000000, 0x0000004A, 0x0013004F,
1548+ 0x50F0FF58, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042, 0x2A281C00, 0x3A382E2C, 0x7B483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140050,
1549+ 0x51F3FF59, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042, 0x2A281C00, 0x3A382E2C, 0x7C483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140051,
1550+ 0x51F3FF5A, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042, 0x2A281C00, 0x3A382E2C, 0x7C483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140051,
1551+ 0x52F6FF5B, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042, 0x2A281C00, 0x3A382E2C, 0x7C483B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140052,
1552+ 0x53F9FF5C, 0x00000000, 0x00100017, 0x00140008, 0x00170000, 0x0029001F, 0x00380030, 0x004E0042, 0x2A281C00, 0x3A382E2C, 0x7C493B28, 0x6F6F1E2E, 0x001A000B, 0x00000000, 0x0000004E, 0x00140053,
1553+ 0x54FCFF5D, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046, 0x2B281D00, 0x3A392F2D, 0x7C493C28, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150054,
1554+ 0x55FFFF5E, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046, 0x2B281D00, 0x3A392F2D, 0x7C493C28, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150055,
1555+ 0x55FFFF5F, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046, 0x2B281D00, 0x3A392F2D, 0x7C493C28, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150055,
1556+ 0x57FFFF60, 0x00000000, 0x00100019, 0x00150008, 0x00190000, 0x002B0021, 0x003B0033, 0x00520046, 0x2B281D00, 0x3A392F2D, 0x7C493C29, 0x6F6F1F2E, 0x001B000B, 0x00000000, 0x00000052, 0x00150057,
1557+ 0x58FFFF61, 0x00000000, 0x0011001A, 0x00150009, 0x001A0000, 0x002D0022, 0x003E0035, 0x00560049, 0x2B291D00, 0x3B39382D, 0x7D493C29, 0x6F6F1F2F, 0x001B000C, 0x00000000, 0x00000056, 0x00160058,
1558+ 0x5AFFFF62, 0x00000000, 0x0011001A, 0x00150009, 0x001A0000, 0x002D0022, 0x003E0035, 0x00560049, 0x2B291D00, 0x3B39382D, 0x7D493C29, 0x6F6F1F2F, 0x001B000C, 0x00000000, 0x00000056, 0x0016005A,
1559+ 0x5CFFFF63, 0x00000000, 0x0012001B, 0x00160009, 0x001B0000, 0x002F0024, 0x00410038, 0x005A004C, 0x2C291E00, 0x3B3A382E, 0x7D493D29, 0x6F6F2838, 0x001B000D, 0x00000000, 0x0000005A, 0x0017005C,
1560+ 0x5DFFFF64, 0x00000000, 0x0012001B, 0x00160009, 0x001B0000, 0x002F0024, 0x00410038, 0x005A004C, 0x2C291E00, 0x3B3A382E, 0x7D4A3D29, 0x6F6F2838, 0x001B000D, 0x00000000, 0x0000005A, 0x0017005D,
1561+ 0x5FFFFF65, 0x00000000, 0x0012001B, 0x00160009, 0x001B0000, 0x002F0024, 0x00410038, 0x005A004C, 0x2C291E00, 0x3B3A382E, 0x7E4A3D29, 0x6F6F2838, 0x001B000D, 0x00000000, 0x0000005A, 0x0017005F,
1562+ 0x60FFFF66, 0x00000000, 0x0013001C, 0x00170009, 0x001C0000, 0x00310026, 0x0044003A, 0x005E0050, 0x2C2A1E00, 0x3C3A392F, 0x7E4A3D2A, 0x6F6F2838, 0x001C000D, 0x00000000, 0x0000005E, 0x00180060,
1563+ 0x62FFFF67, 0x00000000, 0x0013001C, 0x00170009, 0x001C0000, 0x00310026, 0x0044003A, 0x005E0050, 0x2C2A1E00, 0x3C3A392F, 0x7E4A3D2A, 0x6F6F2838, 0x001C000D, 0x00000000, 0x0000005E, 0x00180062,
1564+ 0x63FFFF68, 0x00000000, 0x0013001C, 0x00170009, 0x001C0000, 0x00310026, 0x0044003A, 0x005E0050, 0x2C2A1E00, 0x3C3A392F, 0x7E4A3E2A, 0x6F6F2838, 0x001C000D, 0x00000000, 0x0000005E, 0x00180063,
1565+ 0x65FFFF69, 0x00000000, 0x0014001D, 0x0018000A, 0x001D0000, 0x00330027, 0x0046003D, 0x00620053, 0x2D2A1F00, 0x3C3A392F, 0x7E4A3E2A, 0x6F6F2939, 0x001C000E, 0x00000000, 0x00000062, 0x00190065,
1566+ 0x66FFFF6A, 0x00000000, 0x0014001D, 0x0018000A, 0x001D0000, 0x00330027, 0x0046003D, 0x00620053, 0x2D2A1F00, 0x3C3A392F, 0x7E4A3E2A, 0x6F6F2939, 0x001C000E, 0x00000000, 0x00000062, 0x00190066,
1567+ 0x68FFFF6B, 0x00000000, 0x0014001E, 0x0019000A, 0x001E0000, 0x00350029, 0x0049003F, 0x00660056, 0x2D2A1F00, 0x3D3B3938, 0x7F4B3E2A, 0x6F6F2939, 0x001D000E, 0x00000000, 0x00000066, 0x001A0068,
1568+ 0x69FFFF6C, 0x00000000, 0x0014001E, 0x0019000A, 0x001E0000, 0x00350029, 0x0049003F, 0x00660056, 0x2D2A1F00, 0x3D3B3938, 0x7F4B3E2A, 0x6F6F2939, 0x001D000E, 0x00000000, 0x00000066, 0x001A0069,
1569+ 0x6BFFFF6D, 0x00000000, 0x0014001E, 0x0019000A, 0x001E0000, 0x00350029, 0x0049003F, 0x00660056, 0x2D2A1F00, 0x3D3B3938, 0x7F4B3F2B, 0x6F6F2939, 0x001D000E, 0x00000000, 0x00000066, 0x001A006B,
1570+ 0x6CFFFF6E, 0x00000000, 0x00150020, 0x001A000B, 0x00200000, 0x0037002A, 0x004C0041, 0x0069005A, 0x2E2B2800, 0x3D3B3A38, 0x7F4B3F2B, 0x6F6F2939, 0x001D000F, 0x00000000, 0x00000069, 0x001B006C,
1571+ 0x6EFFFF6F, 0x00000000, 0x00150020, 0x001A000B, 0x00200000, 0x0037002A, 0x004C0041, 0x0069005A, 0x2E2B2800, 0x3D3B3A38, 0x884B3F2B, 0x6F6F2939, 0x001D000F, 0x00000000, 0x00000069, 0x001B006E,
1572+ 0x6FFFFF70, 0x00000000, 0x00150020, 0x001A000B, 0x00200000, 0x0037002A, 0x004C0041, 0x0069005A, 0x2E2B2800, 0x3D3B3A38, 0x884B3F2B, 0x6F6F2939, 0x001D000F, 0x00000000, 0x00000069, 0x001B006F,
1573+ 0x71FFFF71, 0x00000000, 0x00160021, 0x001B000B, 0x00210000, 0x0039002C, 0x004F0044, 0x006D005D, 0x2E2B2800, 0x3E3C3A39, 0x884C482B, 0x6F6F2A3A, 0x001E000F, 0x00000000, 0x0000006D, 0x001C0071,
1574+ 0x72FFFF72, 0x00000000, 0x00160021, 0x001B000B, 0x00210000, 0x0039002C, 0x004F0044, 0x006D005D, 0x2E2B2800, 0x3E3C3A39, 0x884C482B, 0x6F6F2A3A, 0x001E000F, 0x00000000, 0x0000006D, 0x001C0072,
1575+ 0x74FFFF73, 0x00000000, 0x00170022, 0x001C000B, 0x00220000, 0x003B002D, 0x00520046, 0x00710060, 0x2F2B2900, 0x3E3C3A39, 0x884C482B, 0x6F6F2A3A, 0x001E0018, 0x00000000, 0x00000071, 0x001D0074,
1576+ 0x75FFFF74, 0x00000000, 0x00170022, 0x001C000B, 0x00220000, 0x003B002D, 0x00520046, 0x00710060, 0x2F2B2900, 0x3E3C3A39, 0x884C482C, 0x6F6F2A3A, 0x001E0018, 0x00000000, 0x00000071, 0x001D0075,
1577+ 0x76FFFF75, 0x00000000, 0x00170022, 0x001C000B, 0x00220000, 0x003B002D, 0x00520046, 0x00710060, 0x2F2B2900, 0x3E3C3A39, 0x884C482C, 0x6F6F2A3A, 0x001E0018, 0x00000000, 0x00000071, 0x001D0076,
1578+ 0x78FFFF76, 0x00000000, 0x00170023, 0x001D000C, 0x00230000, 0x003D002F, 0x00540049, 0x00750064, 0x2F2C2900, 0x3F3D3B39, 0x894C482C, 0x6F6F2A3A, 0x001F0018, 0x00000000, 0x00000075, 0x001E0078,
1579+ 0x79FFFF77, 0x00000000, 0x00170023, 0x001D000C, 0x00230000, 0x003D002F, 0x00540049, 0x00750064, 0x2F2C2900, 0x3F3D3B39, 0x894C482C, 0x6F6F2A3A, 0x001F0018, 0x00000000, 0x00000075, 0x001E0079,
1580+ 0x7BFFFF78, 0x00000000, 0x00170023, 0x001D000C, 0x00230000, 0x003D002F, 0x00540049, 0x00750064, 0x2F2C2900, 0x3F3D3B39, 0x894D482C, 0x6F6F2A3A, 0x001F0018, 0x00000000, 0x00000075, 0x001E007B,
1581+ 0x7DFFFF79, 0x00000000, 0x00180024, 0x001E000C, 0x00240000, 0x003F0030, 0x0057004B, 0x00790067, 0x382C2900, 0x3F3D3B39, 0x894D492C, 0x6F6F2B3B, 0x001F0019, 0x00000000, 0x00000079, 0x001F007D,
1582+ 0x7FFFFF7A, 0x00000000, 0x00180024, 0x001E000C, 0x00240000, 0x003F0030, 0x0057004B, 0x00790067, 0x382C2900, 0x3F3D3B39, 0x894D492D, 0x6F6F2B3B, 0x001F0019, 0x00000000, 0x00000079, 0x001F007F,
1583+ 0x81FFFF7B, 0x00000000, 0x00190026, 0x001F000D, 0x00260000, 0x00410032, 0x005A004E, 0x007D006A, 0x382D2A00, 0x483D3B3A, 0x894D492D, 0x6F6F2B3B, 0x00280019, 0x00000000, 0x0000007D, 0x00200081,
1584+ 0x83FFFF7C, 0x00000000, 0x00190026, 0x001F000D, 0x00260000, 0x00410032, 0x005A004E, 0x007D006A, 0x382D2A00, 0x483D3B3A, 0x894D492D, 0x6F6F2B3B, 0x00280019, 0x00000000, 0x0000007D, 0x00200083,
1585+ 0x86FFFF7D, 0x00000000, 0x001A0027, 0x0020000D, 0x00270000, 0x00430034, 0x005D0050, 0x0081006E, 0x382D2A00, 0x483E3C3A, 0x8A4E492D, 0x6F6F2B3B, 0x00280019, 0x00000000, 0x00000081, 0x00210086,
1586+ 0x88FFFF7E, 0x00000000, 0x001B0028, 0x0021000D, 0x00280000, 0x00450035, 0x00600052, 0x00850071, 0x392D2A00, 0x483E3C3A, 0x8A4E492D, 0x6F6F2C3C, 0x0028001A, 0x00000000, 0x00000085, 0x00220088,
1587+ 0x8AFFFF7F, 0x00000000, 0x001B0028, 0x0021000D, 0x00280000, 0x00450035, 0x00600052, 0x00850071, 0x392D2A00, 0x483E3C3A, 0x8A4E492E, 0x6F6F2C3C, 0x0028001A, 0x00000000, 0x00000085, 0x0022008A,
1588+ 0x8CFFFF80, 0x00000000, 0x001B0029, 0x0022000E, 0x00290000, 0x00470037, 0x00620055, 0x00890074, 0x392E2A00, 0x493F3C3B, 0x8A4E4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x00000089, 0x0023008C,
1589+ 0x8EFFFF81, 0x00000000, 0x001B0029, 0x0022000E, 0x00290000, 0x00470037, 0x00620055, 0x00890074, 0x392E2A00, 0x493F3C3B, 0x8A4F4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x00000089, 0x0023008E,
1590+ 0x90FFFF82, 0x00000000, 0x001C002A, 0x0023000E, 0x002A0000, 0x00490038, 0x00650057, 0x008D0078, 0x392E2B00, 0x493F3D3B, 0x8A4F4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x0000008D, 0x00240090,
1591+ 0x92FFFF83, 0x00000000, 0x001C002A, 0x0023000E, 0x002A0000, 0x00490038, 0x00650057, 0x008D0078, 0x392E2B00, 0x493F3D3B, 0x8A4F4A2E, 0x6F6F2C3C, 0x0029001A, 0x00000000, 0x0000008D, 0x00240092,
1592+ 0x94FFFF84, 0x00000000, 0x001D002B, 0x0024000E, 0x002B0000, 0x004B003A, 0x0068005A, 0x0091007B, 0x392F2B00, 0x493F3D3B, 0x8B4F4A2F, 0x6F6F2D3D, 0x0029001A, 0x00000000, 0x00000091, 0x00250094,
1593+ 0x96FFFF85, 0x00000000, 0x001D002B, 0x0024000E, 0x002B0000, 0x004B003A, 0x0068005A, 0x0091007B, 0x392F2B00, 0x493F3D3B, 0x8B4F4A2F, 0x6F6F2D3D, 0x0029001A, 0x00000000, 0x00000091, 0x00250096,
1594+ 0x98FFFF86, 0x00000000, 0x001E002D, 0x0025000F, 0x002D0000, 0x004D003B, 0x006B005C, 0x0094007E, 0x3A2F2B00, 0x49483D3C, 0x8B584A2F, 0x6F6F2D3D, 0x0029001B, 0x00000000, 0x00000094, 0x00260098,
1595+ 0x9AFFFF87, 0x00000000, 0x001E002D, 0x0025000F, 0x002D0000, 0x004D003B, 0x006B005C, 0x0094007E, 0x3A2F2B00, 0x49483D3C, 0x8B584B2F, 0x6F6F2D3D, 0x0029001B, 0x00000000, 0x00000094, 0x0026009A,
1596+ 0x9CFFFF88, 0x00000000, 0x001E002E, 0x0026000F, 0x002E0000, 0x004F003D, 0x006E005E, 0x00980081, 0x3A2F2C00, 0x4A483E3C, 0x8B584B2F, 0x6F6F2D3D, 0x002A001B, 0x00000000, 0x00000098, 0x0027009C,
1597+ 0x9EFFFF89, 0x00000000, 0x001E002E, 0x0026000F, 0x002E0000, 0x004F003D, 0x006E005E, 0x00980081, 0x3A2F2C00, 0x4A483E3C, 0x8B584B38, 0x6F6F2D3D, 0x002A001B, 0x00000000, 0x00000098, 0x0027009E,
1598+ 0xA1FFFF8A, 0x00000000, 0x001F002F, 0x00270010, 0x002F0000, 0x0051003F, 0x00710061, 0x009C0085, 0x3A382C00, 0x4A483E3C, 0x8B584B38, 0x6F6F2E3E, 0x002A001B, 0x00000000, 0x0000009C, 0x002800A1,
1599+ 0xA4FFFF8B, 0x00000000, 0x00200030, 0x00280010, 0x00300000, 0x00530040, 0x00730063, 0x00A00088, 0x3A382C00, 0x4A493E3C, 0x8C584B38, 0x6F6F2E3E, 0x002A001B, 0x00000000, 0x000000A0, 0x002900A4,
1600+ 0xA6FFFF8C, 0x00000000, 0x00200030, 0x00280010, 0x00300000, 0x00530040, 0x00730063, 0x00A00088, 0x3A382C00, 0x4A493E3C, 0x8C594B38, 0x6F6F2E3E, 0x002A001B, 0x00000000, 0x000000A0, 0x002900A6,
1601+ 0xA9FFFF8D, 0x00000000, 0x00210031, 0x00290010, 0x00310000, 0x00550042, 0x00760066, 0x00A4008B, 0x3B382C00, 0x4A493F3D, 0x8C594C38, 0x6F6F2E3E, 0x002A001C, 0x00000000, 0x000000A4, 0x002A00A9,
1602+ 0xACFFFF8E, 0x00000000, 0x00220032, 0x002A0011, 0x00320000, 0x00570043, 0x00790068, 0x00A8008F, 0x3B382D00, 0x4B493F3D, 0x8C594C38, 0x6F6F2F3F, 0x002B001C, 0x00000000, 0x000000A8, 0x002B00AC,
1603+ 0xAEFFFF8F, 0x00000000, 0x00220032, 0x002A0011, 0x00320000, 0x00570043, 0x00790068, 0x00A8008F, 0x3B382D00, 0x4B493F3D, 0x8C594C39, 0x6F6F2F3F, 0x002B001C, 0x00000000, 0x000000A8, 0x002B00AE,
1604+ 0xB1FFFF90, 0x00000000, 0x00220034, 0x002B0011, 0x00340000, 0x00590045, 0x007C006B, 0x00AC0092, 0x3B392D00, 0x4B49483D, 0x8D594C39, 0x6F6F2F3F, 0x002B001C, 0x00000000, 0x000000AC, 0x002C00B1,
1605+ 0xB4FFFF91, 0x00000000, 0x00230035, 0x002C0012, 0x00350000, 0x005B0046, 0x007F006D, 0x00B00095, 0x3B392D00, 0x4B49483E, 0x8D594C39, 0x6F6F383F, 0x002B001D, 0x00000000, 0x000000B0, 0x002D00B4,
1606+ 0xB6FFFF92, 0x00000000, 0x00230035, 0x002C0012, 0x00350000, 0x005B0046, 0x007F006D, 0x00B00095, 0x3B392D00, 0x4B49483E, 0x8D594C39, 0x6F6F383F, 0x002B001D, 0x00000000, 0x000000B0, 0x002D00B6,
1607+ 0xB9FFFF93, 0x00000000, 0x00240036, 0x002D0012, 0x00360000, 0x005D0048, 0x0081006F, 0x00B40099, 0x3C392E00, 0x4B4A483E, 0x8D5A4D39, 0x6F6F3848, 0x002B001D, 0x00000000, 0x000000B4, 0x002E00B9,
1608+ 0xBBFFFF94, 0x00000000, 0x00240036, 0x002D0012, 0x00360000, 0x005D0048, 0x0081006F, 0x00B40099, 0x3C392E00, 0x4B4A483E, 0x8D5A4D39, 0x6F6F3848, 0x002B001D, 0x00000000, 0x000000B4, 0x002E00BB,
1609+ 0xBEFFFF95, 0x00000000, 0x00250037, 0x002E0012, 0x00370000, 0x005F0049, 0x00840072, 0x00B8009C, 0x3C392E00, 0x4C4A483E, 0x8E5A4D39, 0x6F6F3848, 0x002C001D, 0x00000000, 0x000000B8, 0x002F00BE,
1610+ 0xC0FFFF96, 0x00000000, 0x00260038, 0x002F0013, 0x00380000, 0x0062004B, 0x00870074, 0x00BC009F, 0x3C392E00, 0x4C4A483F, 0x8E5A4D39, 0x6F6F3848, 0x002C001D, 0x00000000, 0x000000BC, 0x003000C0,
1611+ 0xC3FFFF97, 0x00000000, 0x00260038, 0x002F0013, 0x00380000, 0x0062004B, 0x00870074, 0x00BC009F, 0x3C392E00, 0x4C4A483F, 0x8E5A4D3A, 0x6F6F3848, 0x002C001D, 0x00000000, 0x000000BC, 0x003000C3,
1612+ 0xC7FFFF98, 0x00000000, 0x00260039, 0x00300013, 0x00390000, 0x0064004D, 0x008A0077, 0x00BF00A3, 0x3D3A2E00, 0x4C4A493F, 0x8E5A4E3A, 0x6F6F3848, 0x002C001E, 0x00000000, 0x000000BF, 0x003100C7,
1613+ 0xCAFFFF99, 0x00000000, 0x0027003B, 0x00310014, 0x003B0000, 0x0066004E, 0x008D0079, 0x00C300A6, 0x3D3A2F00, 0x4C4A493F, 0x8E5A4E3A, 0x6F6F3949, 0x002C001E, 0x00000000, 0x000000C3, 0x003200CA,
1614+ 0xCDFFFF9A, 0x00000000, 0x0028003C, 0x00320014, 0x003C0000, 0x00680050, 0x008F007C, 0x00C700A9, 0x3D3A2F00, 0x4C4B4948, 0x8F5B4E3A, 0x6F6F3949, 0x002D001E, 0x00000000, 0x000000C7, 0x003300CD,
1615+ 0xD0FFFF9B, 0x00000000, 0x0029003D, 0x00330014, 0x003D0000, 0x006A0051, 0x0092007E, 0x00CB00AD, 0x3D3A2F00, 0x4D4B4948, 0x8F5B4E3A, 0x6F6F3949, 0x002D001E, 0x00000000, 0x000000CB, 0x003400D0,
1616+ 0xD3FFFF9C, 0x00000000, 0x0029003D, 0x00330014, 0x003D0000, 0x006A0051, 0x0092007E, 0x00CB00AD, 0x3D3A2F00, 0x4D4B4948, 0x8F5B4E3A, 0x6F6F3949, 0x002D001E, 0x00000000, 0x000000CB, 0x003400D3,
1617+ 0xD6FFFF9D, 0x00000000, 0x0029003E, 0x00340015, 0x003E0000, 0x006C0053, 0x00950080, 0x00CF00B0, 0x3E3A3800, 0x4D4B4948, 0x8F5B4F3B, 0x6F6F3949, 0x002D001F, 0x00000000, 0x000000CF, 0x003500D6,
1618+ 0xD9FFFF9E, 0x00000000, 0x002A003F, 0x00350015, 0x003F0000, 0x006E0054, 0x00980083, 0x00D300B3, 0x3E3B3800, 0x4D4B4A48, 0x8F5B4F3B, 0x6F6F3949, 0x002D001F, 0x00000000, 0x000000D3, 0x003600D9,
1619+ 0xDCFFFF9F, 0x00000000, 0x002B0040, 0x00360015, 0x00400000, 0x00700056, 0x009B0085, 0x00D700B7, 0x3E3B3800, 0x4D4B4A48, 0x8F5B4F3B, 0x6F6F3949, 0x002E001F, 0x00000000, 0x000000D7, 0x003700DC,
1620+ 0xDFFFFFA0, 0x00000000, 0x002B0040, 0x00360015, 0x00400000, 0x00700056, 0x009B0085, 0x00D700B7, 0x3E3B3800, 0x4D4B4A48, 0x8F5B4F3B, 0x6F6F3949, 0x002E001F, 0x00000000, 0x000000D7, 0x003700DF,
1621+ 0xE2FFFFA1, 0x00000000, 0x002C0042, 0x00370016, 0x00420000, 0x00720058, 0x009E0088, 0x00DB00BA, 0x3E3B3800, 0x4E4C4A49, 0x8F5C4F3B, 0x6F6F3A4A, 0x002E0028, 0x00000000, 0x000000DB, 0x003800E2,
1622+ 0xE6FFFFA2, 0x00000000, 0x002D0043, 0x00380016, 0x00430000, 0x00740059, 0x00A0008A, 0x00DF00BD, 0x3F3B3800, 0x4E4C4A49, 0x8F5C583B, 0x6F6F3A4A, 0x002E0028, 0x00000000, 0x000000DF, 0x003900E6,
1623+ 0xE9FFFFA3, 0x00000000, 0x002D0044, 0x00390017, 0x00440000, 0x0076005B, 0x00A3008C, 0x00E300C1, 0x3F3B3900, 0x4E4C4A49, 0x8F5C583B, 0x6F6F3A4A, 0x002E0028, 0x00000000, 0x000000E3, 0x003A00E9,
1624+ 0xEDFFFFA4, 0x00000000, 0x002E0045, 0x003A0017, 0x00450000, 0x0078005C, 0x00A6008F, 0x00E600C4, 0x3F3C3900, 0x4E4C4A49, 0x8F5C583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000E6, 0x003B00ED,
1625+ 0xF0FFFFA5, 0x00000000, 0x002F0046, 0x003B0017, 0x00460000, 0x007A005E, 0x00A90091, 0x00EA00C7, 0x3F3C3900, 0x4F4C4B49, 0x8F5C583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000EA, 0x003C00F0,
1626+ 0xF3FFFFA6, 0x00000000, 0x002F0046, 0x003B0017, 0x00460000, 0x007A005E, 0x00A90091, 0x00EA00C7, 0x3F3C3900, 0x4F4C4B49, 0x8F5C583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000EA, 0x003C00F3,
1627+ 0xF7FFFFA7, 0x00000000, 0x00300047, 0x003C0018, 0x00470000, 0x007C005F, 0x00AC0094, 0x00EE00CB, 0x483C3900, 0x4F4D4B49, 0x8F5D583C, 0x6F6F3A4A, 0x002F0028, 0x00000000, 0x000000EE, 0x003D00F7,
1628+ 0xFAFFFFA8, 0x00000000, 0x00300049, 0x003D0018, 0x00490000, 0x007E0061, 0x00AE0096, 0x00F200CE, 0x483C3900, 0x4F4D4B49, 0x8F5D593C, 0x6F6F3B4B, 0x002F0029, 0x00000000, 0x000000F2, 0x003E00FA,
1629+ 0xFDFFFFA9, 0x00000000, 0x0031004A, 0x003E0019, 0x004A0000, 0x00800062, 0x00B10099, 0x00F600D1, 0x483C3900, 0x4F4D4B4A, 0x8F5D593C, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x000000F6, 0x003F00FD,
1630+ 0xFFFFFFAA, 0x00000000, 0x0032004B, 0x003F0019, 0x004B0000, 0x00820064, 0x00B4009B, 0x00FA00D5, 0x483D3900, 0x584D4B4A, 0x8F5D593D, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x000000FA, 0x00400101,
1631+ 0xFFFFFFAB, 0x00000000, 0x0033004C, 0x003F0019, 0x004C0000, 0x00840066, 0x00B7009D, 0x00FE00D8, 0x483D3A00, 0x584E4B4A, 0x8F5D593D, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x000000FE, 0x00410105,
1632+ 0xFFFFFFAC, 0x00000000, 0x0034004D, 0x0040001A, 0x004D0000, 0x00860067, 0x00BA00A0, 0x010200DB, 0x483D3A00, 0x584E4C4A, 0x8F5E593D, 0x6F6F3B4B, 0x00380029, 0x00000000, 0x00000102, 0x00420109,
1633+ 0xFFFFFFAD, 0x00000000, 0x0034004F, 0x0041001A, 0x004F0000, 0x00880069, 0x00BC00A2, 0x010600DE, 0x493D3A00, 0x584E4C4A, 0x8F5E593D, 0x6F6F3C4B, 0x00380029, 0x00000000, 0x00000106, 0x0043010D,
1634+ 0xFFFFFFAE, 0x00000000, 0x00350050, 0x0042001B, 0x00500000, 0x008A006A, 0x00BF00A5, 0x010A00E2, 0x493D3A00, 0x584E4C4A, 0x8F5E593D, 0x6F6F3C4C, 0x00380029, 0x00000000, 0x0000010A, 0x00440110,
1635+ 0xFFFFFFAF, 0x00000000, 0x00360051, 0x0043001B, 0x00510000, 0x008C006C, 0x00C200A7, 0x010E00E5, 0x493E3A00, 0x584E4C4A, 0x8F5E593E, 0x6F6F3C4C, 0x0038002A, 0x00000000, 0x0000010E, 0x00450114,
1636+ 0xFFFFFFB0, 0x00000000, 0x00370052, 0x0044001B, 0x00520000, 0x008E006D, 0x00C500AA, 0x011100E8, 0x493E3A00, 0x594F4C4B, 0x8F5E5A3E, 0x6F6F3C4C, 0x0039002A, 0x00000000, 0x00000111, 0x00460118,
1637+ 0xFFFFFFB1, 0x00000000, 0x00370053, 0x0045001C, 0x00530000, 0x0090006F, 0x00C800AC, 0x011500EC, 0x493E3A00, 0x594F4D4B, 0x8F5F5A3E, 0x6F6F3C4C, 0x0039002A, 0x00000000, 0x00000115, 0x0047011C,
1638+ 0xFFFFFFB2, 0x00000000, 0x00380054, 0x0046001C, 0x00540000, 0x00920071, 0x00CB00AE, 0x011900EF, 0x493E3B00, 0x594F4D4B, 0x8F5F5A3E, 0x6F6F3C4C, 0x0039002A, 0x00000000, 0x00000119, 0x00480120,
1639+ 0xFFFFFFB3, 0x00000000, 0x00390056, 0x0047001D, 0x00560000, 0x00940072, 0x00CD00B1, 0x011D00F2, 0x493E3B00, 0x594F4D4B, 0x8F5F5A3E, 0x6F6F3D4D, 0x0039002A, 0x00000000, 0x0000011D, 0x00490124,
1640+ 0xFFFFFFB4, 0x00000000, 0x003A0057, 0x0048001D, 0x00570000, 0x00960074, 0x00D000B3, 0x012100F6, 0x493F3B00, 0x594F4D4B, 0x8F5F5A3F, 0x6F6F3D4D, 0x0039002A, 0x00000000, 0x00000121, 0x004A0128,
1641+ 0xFFFFFFB5, 0x00000000, 0x003B0058, 0x0049001D, 0x00580000, 0x00980075, 0x00D300B6, 0x012500F9, 0x4A3F3B00, 0x59584D4B, 0x8F5F5A3F, 0x6F6F3D4D, 0x0039002A, 0x00000000, 0x00000125, 0x004B012C,
1642+ 0xFFFFFFB6, 0x00000000, 0x003B0059, 0x004A001E, 0x00590000, 0x009A0077, 0x00D600B8, 0x012900FC, 0x4A3F3B00, 0x59584D4C, 0x8F685A3F, 0x6F6F3D4D, 0x0039002B, 0x00000000, 0x00000129, 0x004C0130,
1643+ 0xFFFFFFB7, 0x00000000, 0x003C005A, 0x004B001E, 0x005A0000, 0x009C0078, 0x00D900BA, 0x012D0100, 0x4A3F3B00, 0x59584E4C, 0x8F685B3F, 0x6F6F3D4D, 0x0039002B, 0x00000000, 0x0000012D, 0x004D0135,
1644+ 0xFFFFFFB8, 0x00000000, 0x003D005B, 0x004C001E, 0x005B0000, 0x009E007A, 0x00DB00BD, 0x01310103, 0x4A3F3B00, 0x5A584E4C, 0x8F685B3F, 0x6F6F3D4D, 0x003A002B, 0x00000000, 0x00000131, 0x004E0139,
1645+ 0xFFFFFFB9, 0x00000000, 0x003E005D, 0x004D001F, 0x005D0000, 0x00A0007B, 0x00DE00BF, 0x01350106, 0x4A3F3C00, 0x5A584E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000135, 0x004F013D,
1646+ 0xFFFFFFBA, 0x00000000, 0x003F005E, 0x004E001F, 0x005E0000, 0x00A3007D, 0x00E100C2, 0x0139010A, 0x4A483C00, 0x5A584E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000139, 0x00500142,
1647+ 0xFFFFFFBB, 0x00000000, 0x003F005F, 0x004F0020, 0x005F0000, 0x00A5007F, 0x00E400C4, 0x013C010D, 0x4A483C00, 0x5A584E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x0000013C, 0x00510146,
1648+ 0xFFFFFFBC, 0x00000000, 0x00400060, 0x00500020, 0x00600000, 0x00A70080, 0x00E700C7, 0x01400110, 0x4A483C00, 0x5A594E4C, 0x8F685B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000140, 0x0052014A,
1649+ 0xFFFFFFBD, 0x00000000, 0x00410061, 0x00510020, 0x00610000, 0x00A90082, 0x00E900C9, 0x01440114, 0x4B483C00, 0x5A594F4D, 0x8F695B48, 0x6F6F3E4E, 0x003A002B, 0x00000000, 0x00000144, 0x0053014F,
1650+ 0xFFFFFFBE, 0x00000000, 0x00420064, 0x00530021, 0x00640000, 0x00AD0085, 0x00EF00CE, 0x014C011A, 0x4B483D00, 0x5A594F4D, 0x8F695C48, 0x6F6F3F4F, 0x003A002C, 0x00000000, 0x0000014C, 0x00550154,
1651+ 0xFFFFFFBF, 0x00000000, 0x00430065, 0x00540022, 0x00650000, 0x00AF0086, 0x00F200D0, 0x0150011E, 0x4B483D00, 0x5B594F4D, 0x8F695C48, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x00000150, 0x00560158,
1652+ 0xFFFFFFC0, 0x00000000, 0x00440066, 0x00550022, 0x00660000, 0x00B10088, 0x00F500D3, 0x01540121, 0x4B493D00, 0x5B594F4D, 0x8F695C49, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x00000154, 0x0057015D,
1653+ 0xFFFFFFC1, 0x00000000, 0x00450067, 0x00560022, 0x00670000, 0x00B3008A, 0x00F800D5, 0x01580124, 0x4B493D00, 0x5B59584D, 0x8F695C49, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x00000158, 0x00580162,
1654+ 0xFFFFFFC2, 0x00000000, 0x00460068, 0x00570023, 0x00680000, 0x00B5008B, 0x00FA00D8, 0x015C0128, 0x4B493D00, 0x5B59584E, 0x8F695C49, 0x6F6F3F4F, 0x003B002C, 0x00000000, 0x0000015C, 0x00590167,
1655+ 0xFFFFFFC3, 0x00000000, 0x0047006B, 0x00590024, 0x006B0000, 0x00B9008E, 0x010000DC, 0x0163012E, 0x4C493D00, 0x5B59584E, 0x8F695C49, 0x6F6F4858, 0x003B002D, 0x00000000, 0x00000163, 0x005B016C,
1656+ 0xFFFFFFC4, 0x00000000, 0x0048006C, 0x005A0024, 0x006C0000, 0x00BB0090, 0x010300DF, 0x01670131, 0x4C493E00, 0x5B5A584E, 0x8F695D49, 0x6F6F4858, 0x003B002D, 0x00000000, 0x00000167, 0x005C0171,
1657+ 0xFFFFFFC5, 0x00000000, 0x0049006D, 0x005B0024, 0x006D0000, 0x00BD0091, 0x010600E1, 0x016B0135, 0x4C493E00, 0x5B5A584E, 0x8F6A5D49, 0x6F6F4858, 0x003B002D, 0x00000000, 0x0000016B, 0x005D0176,
1658+ 0xFFFFFFC6, 0x00000000, 0x0049006E, 0x005C0025, 0x006E0000, 0x00BF0093, 0x010800E4, 0x016F0138, 0x4C493E00, 0x5B5A584E, 0x8F6A5D49, 0x6F6F4858, 0x003C002D, 0x00000000, 0x0000016F, 0x005E017B,
1659+ 0xFFFFFFC7, 0x00000000, 0x004B0071, 0x005E0026, 0x00710000, 0x00C30096, 0x010E00E9, 0x0177013F, 0x4C493E00, 0x5C5A584F, 0x8F6A5D49, 0x6F6F4858, 0x003C002D, 0x00000000, 0x00000177, 0x00600180,
1660+ 0xFFFFFFC8, 0x00000000, 0x004C0072, 0x005F0026, 0x00720000, 0x00C50098, 0x011100EB, 0x017B0142, 0x4C4A3E00, 0x5C5A594F, 0x8F6A5D4A, 0x6F6F4858, 0x003C002D, 0x00000000, 0x0000017B, 0x00610185,
1661+ 0xFFFFFFC9, 0x00000000, 0x004D0073, 0x00600026, 0x00730000, 0x00C70099, 0x011400ED, 0x017F0145, 0x4C4A3E00, 0x5C5A594F, 0x8F6A5E4A, 0x6F6F4858, 0x003C002E, 0x00000000, 0x0000017F, 0x0062018B,
1662+ 0xFFFFFFCA, 0x00000000, 0x004E0075, 0x00620027, 0x00750000, 0x00CB009C, 0x011900F2, 0x0187014C, 0x4D4A3F00, 0x5C5A594F, 0x8F6A5E4A, 0x6F6F4959, 0x003C002E, 0x00000000, 0x00000187, 0x00640190,
1663+ 0xFFFFFFCB, 0x00000000, 0x004F0076, 0x00630027, 0x00760000, 0x00CD009E, 0x011C00F5, 0x018B014F, 0x4D4A3F00, 0x5C5A594F, 0x8F6A5E4A, 0x6F6F4959, 0x003C002E, 0x00000000, 0x0000018B, 0x00650196,
1664+ 0xFFFFFFCC, 0x00000000, 0x00500078, 0x00640028, 0x00780000, 0x00CF009F, 0x011F00F7, 0x018E0153, 0x4D4A3F00, 0x5C5B594F, 0x8F6B5E4A, 0x6F6F4959, 0x003D002E, 0x00000000, 0x0000018E, 0x0066019B,
1665+ 0xFFFFFFCD, 0x00000000, 0x0051007A, 0x00660029, 0x007A0000, 0x00D300A3, 0x012500FC, 0x01960159, 0x4D4A3F00, 0x5D5B5958, 0x8F6B5E4A, 0x6F6F4959, 0x003D002E, 0x00000000, 0x00000196, 0x006801A1,
1666+ 0xFFFFFFCE, 0x00000000, 0x0052007B, 0x00670029, 0x007B0000, 0x00D500A4, 0x012700FE, 0x019A015D, 0x4D4A3F00, 0x5D5B5958, 0x8F6B5E4A, 0x6F6F4959, 0x003D002E, 0x00000000, 0x0000019A, 0x006901A7,
1667+ 0xFFFFFFCF, 0x00000000, 0x0054007D, 0x0068002A, 0x007D0000, 0x00D900A7, 0x012D0103, 0x01A20163, 0x4E4A4800, 0x5D5B5958, 0x8F6B5F4B, 0x6F6F4959, 0x003D002F, 0x00000000, 0x000001A2, 0x006B01AD,
1668+ 0xFFFFFFD0, 0x00000000, 0x0054007F, 0x0069002A, 0x007F0000, 0x00DB00A9, 0x01300106, 0x01A60167, 0x4E4B4800, 0x5D5B5A58, 0x8F6B5F4B, 0x6F6F4959, 0x003D002F, 0x00000000, 0x000001A6, 0x006C01B3,
1669+ 0xFFFFFFD1, 0x00000000, 0x00560081, 0x006B002B, 0x00810000, 0x00DF00AC, 0x0135010A, 0x01AE016D, 0x4E4B4800, 0x5D5B5A58, 0x8F6B5F4B, 0x6F6F4959, 0x003D002F, 0x00000000, 0x000001AE, 0x006E01B9,
1670+ 0xFFFFFFD2, 0x00000000, 0x00570082, 0x006C002B, 0x00820000, 0x00E100AD, 0x0138010D, 0x01B20171, 0x4E4B4800, 0x5E5C5A58, 0x8F6B5F4B, 0x6F6F4A5A, 0x003E002F, 0x00000000, 0x000001B2, 0x006F01BF,
1671+ 0xFFFFFFD3, 0x00000000, 0x00580084, 0x006E002C, 0x00840000, 0x00E600B1, 0x013E0112, 0x01B90177, 0x4E4B4800, 0x5E5C5A59, 0x8F6C684B, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001B9, 0x007101C6,
1672+ 0xFFFFFFD4, 0x00000000, 0x005A0087, 0x0070002D, 0x00870000, 0x00EA00B4, 0x01430117, 0x01C1017E, 0x4F4B4800, 0x5E5C5A59, 0x8F6C684B, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001C1, 0x007301CD,
1673+ 0xFFFFFFD5, 0x00000000, 0x005B0088, 0x0071002D, 0x00880000, 0x00EC00B5, 0x01460119, 0x01C50181, 0x4F4B4900, 0x5E5C5A59, 0x8F6C684B, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001C5, 0x007401D3,
1674+ 0xFFFFFFD6, 0x00000000, 0x005C008A, 0x0073002E, 0x008A0000, 0x00F000B8, 0x014C011E, 0x01CD0188, 0x4F4C4900, 0x5E5C5A59, 0x8F6C684C, 0x6F6F4A5A, 0x003E0038, 0x00000000, 0x000001CD, 0x007601DB,
1675+ 0xFFFFFFD7, 0x00000000, 0x005E008D, 0x0075002F, 0x008D0000, 0x00F400BC, 0x01520123, 0x01D5018E, 0x4F4C4900, 0x5F5C5B59, 0x8F6C684C, 0x6F6F4A5A, 0x003F0038, 0x00000000, 0x000001D5, 0x007801E2,
1676+ 0xFFFFFFD8, 0x00000000, 0x005F008F, 0x00770030, 0x008F0000, 0x00F800BF, 0x01570127, 0x01DD0195, 0x584C4900, 0x5F5D5B59, 0x8F6D684C, 0x6F6F4A5A, 0x003F0038, 0x00000000, 0x000001DD, 0x007A01E9,
1677+ 0xFFFFFFD9, 0x00000000, 0x00610091, 0x00790030, 0x00910000, 0x00FC00C2, 0x015D012C, 0x01E4019C, 0x584C4900, 0x5F5D5B59, 0x8F6D694C, 0x6F6F4B5B, 0x003F0039, 0x00000000, 0x000001E4, 0x007C01F1,
1678+ 0xFFFFFFDA, 0x00000000, 0x00620094, 0x007B0031, 0x00940000, 0x010000C5, 0x01620131, 0x01EC01A2, 0x584C4900, 0x5F5D5B5A, 0x8F6D694C, 0x6F6F4B5B, 0x003F0039, 0x00000000, 0x000001EC, 0x007E01F9,
1679+ 0xFFFFFFDB, 0x00000000, 0x00640096, 0x007D0032, 0x00960000, 0x010400C8, 0x01680136, 0x01F401A9, 0x584D4900, 0x685D5B5A, 0x8F6D694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x000001F4, 0x00800201,
1680+ 0xFFFFFFDC, 0x00000000, 0x00660098, 0x007F0033, 0x00980000, 0x010800CB, 0x016E013B, 0x01FC01B0, 0x584D4A00, 0x685E5B5A, 0x8F6D694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x000001FC, 0x0082020A,
1681+ 0xFFFFFFDD, 0x00000000, 0x0067009B, 0x00810034, 0x009B0000, 0x010C00CE, 0x01730140, 0x020401B6, 0x584D4A00, 0x685E5C5A, 0x8F6E694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x00000204, 0x00840212,
1682+ 0xFFFFFFDE, 0x00000000, 0x0069009D, 0x00830034, 0x009D0000, 0x011000D1, 0x01790145, 0x020B01BD, 0x594D4A00, 0x685E5C5A, 0x8F6E694D, 0x6F6F4B5B, 0x00480039, 0x00000000, 0x0000020B, 0x0086021B,
1683+ 0xFFFFFFDF, 0x00000000, 0x006B00A1, 0x00860036, 0x00A10000, 0x011600D6, 0x0181014C, 0x021701C7, 0x594D4A00, 0x685E5C5A, 0x8F6E694D, 0x6F6F4C5C, 0x00480039, 0x00000000, 0x00000217, 0x00890225,
1684+ 0xFFFFFFE0, 0x00000000, 0x006D00A3, 0x00880036, 0x00A30000, 0x011A00D9, 0x01870151, 0x021F01CE, 0x594E4A00, 0x685E5C5B, 0x8F6E6A4E, 0x6F6F4C5C, 0x0049003A, 0x00000000, 0x0000021F, 0x008B022F,
1685+ 0xFFFFFFE1, 0x00000000, 0x006F00A6, 0x008B0037, 0x00A60000, 0x012000DE, 0x018F0158, 0x022B01D7, 0x594E4A00, 0x695F5C5B, 0x8F6F6A4E, 0x6F6F4C5C, 0x0049003A, 0x00000000, 0x0000022B, 0x008E0239,
1686+ 0xFFFFFFE2, 0x00000000, 0x007100A9, 0x008D0038, 0x00A90000, 0x012500E1, 0x0195015D, 0x023301DE, 0x594E4B00, 0x695F5D5B, 0x8F6F6A4E, 0x6F6F4C5C, 0x0049003A, 0x00000000, 0x00000233, 0x00900243,
1687+ 0xFFFFFFE3, 0x00000000, 0x007300AC, 0x00900039, 0x00AC0000, 0x012B00E6, 0x019D0164, 0x023E01E8, 0x594E4B00, 0x695F5D5B, 0x8F6F6A4E, 0x6F6F4D5D, 0x0049003A, 0x00000000, 0x0000023E, 0x0093024E,
1688+ 0xFFFFFFE4, 0x00000000, 0x007500B0, 0x0092003B, 0x00B00000, 0x013100EA, 0x01A6016B, 0x024A01F2, 0x5A4F4B00, 0x69685D5B, 0x8F6F6A4F, 0x6F6F4D5D, 0x0049003A, 0x00000000, 0x0000024A, 0x0096025A,
1689+ 0xFFFFFFE5, 0x00000000, 0x007800B3, 0x0095003C, 0x00B30000, 0x013700EF, 0x01AE0173, 0x025601FC, 0x5A4F4B00, 0x69685D5C, 0x8F786B4F, 0x6F6F4D5D, 0x0049003B, 0x00000000, 0x00000256, 0x00990266,
1690+ 0xFFFFFFE6, 0x00000000, 0x007A00B7, 0x0098003D, 0x00B70000, 0x013D00F4, 0x01B7017A, 0x02610206, 0x5A4F4B00, 0x6A685E5C, 0x8F786B4F, 0x6F6F4D5D, 0x004A003B, 0x00000000, 0x00000261, 0x009C0272,
1691+ 0xFFFFFFE7, 0x00000000, 0x007D00BC, 0x009C003F, 0x00BC0000, 0x014500FA, 0x01C20184, 0x02710213, 0x5A584C00, 0x6A685E5C, 0x8F786B58, 0x6F6F4E5E, 0x004A003B, 0x00000000, 0x00000271, 0x00A00280,
1692+ 0xFFFFFFE8, 0x00000000, 0x007F00BF, 0x009F0040, 0x00BF0000, 0x014B00FF, 0x01CA018B, 0x027D021D, 0x5A584C00, 0x6A685E5C, 0x8F786B58, 0x6F6F4E5E, 0x004A003B, 0x00000000, 0x0000027D, 0x00A3028E,
1693+ 0xFFFFFFE9, 0x00000000, 0x008200C4, 0x00A30041, 0x00C40000, 0x01530105, 0x01D60194, 0x028C022A, 0x5B584C00, 0x6A695F5D, 0x8F796B58, 0x6F6F4E5E, 0x004A003B, 0x00000000, 0x0000028C, 0x00A7029C,
1694+ 0xFFFFFFEA, 0x00000000, 0x008600C8, 0x00A70043, 0x00C80000, 0x015B010B, 0x01E1019E, 0x029C0238, 0x5B584D00, 0x6A695F5D, 0x8F796C58, 0x6F6F4F5F, 0x004A003C, 0x00000000, 0x0000029C, 0x00AB02AC,
1695+ 0xFFFFFFEB, 0x00000000, 0x008900CD, 0x00AB0044, 0x00CD0000, 0x01630111, 0x01EC01A8, 0x02AC0245, 0x5B594D00, 0x6B695F5D, 0x8F796C59, 0x6F6F4F5F, 0x004B003C, 0x00000000, 0x000002AC, 0x00AF02BC,
1696+ 0xFFFFFFEC, 0x00000000, 0x008C00D2, 0x00AF0046, 0x00D20000, 0x016C0118, 0x01F701B2, 0x02BB0252, 0x5B594D00, 0x6B69685E, 0x8F796C59, 0x6F6F4F5F, 0x004B003C, 0x00000000, 0x000002BB, 0x00B302CD,
1697+ 0xFFFFFFED, 0x00000000, 0x009000D8, 0x00B40048, 0x00D80000, 0x01760120, 0x020601BE, 0x02CF0263, 0x5C594E00, 0x6B6A685E, 0x8F796D59, 0x6F6F5868, 0x004B003D, 0x00000000, 0x000002CF, 0x00B802E0,
1698+ 0xFFFFFFEE, 0x00000000, 0x009300DC, 0x00B80049, 0x00DC0000, 0x017E0126, 0x021101C7, 0x02DE0270, 0x5C594E00, 0x6B6A685E, 0x8F7A6D59, 0x6F6F5868, 0x004C003D, 0x00000000, 0x000002DE, 0x00BC02F3,
1699+ 0xFFFFFFEF, 0x00000000, 0x009700E2, 0x00BC004B, 0x00E20000, 0x0188012E, 0x021F01D3, 0x02F20281, 0x5C594E00, 0x6C6A685F, 0x8F7A6D59, 0x6F6F5868, 0x004C003D, 0x00000000, 0x000002F2, 0x00C10307,
1700+ 0xFFFFFFF0, 0x00000000, 0x009B00E9, 0x00C2004E, 0x00E90000, 0x01940137, 0x023001E2, 0x03090295, 0x5D5A4F00, 0x6C6A695F, 0x8F7A6E5A, 0x6F6F5969, 0x004C003E, 0x00000000, 0x00000309, 0x00C7031C,
1701+ 0xFFFFFFF1, 0x00000000, 0x009F00EF, 0x00C70050, 0x00EF0000, 0x019E013F, 0x023E01EE, 0x031D02A5, 0x5D5A4F00, 0x6C6B695F, 0x8F7B6E5A, 0x6F6F5969, 0x004C003E, 0x00000000, 0x0000031D, 0x00CC0333,
1702+ 0xFFFFFFF2, 0x00000000, 0x00A400F6, 0x00CD0052, 0x00F60000, 0x01AB0148, 0x024F01FD, 0x033402B9, 0x5D5A4F00, 0x6D6B6968, 0x8F7B6E5A, 0x6F6F5969, 0x004D003E, 0x00000000, 0x00000334, 0x00D2034B,
1703+ 0xFFFFFFF3, 0x00000000, 0x00AA00FE, 0x00D40055, 0x00FE0000, 0x01B90153, 0x0262020E, 0x035002D1, 0x5E5B5800, 0x6D6B6A68, 0x8F7B6F5B, 0x6F6F5969, 0x004D003F, 0x00000000, 0x00000350, 0x00D90365,
1704+ 0xFFFFFFF4, 0x00000000, 0x00AF0107, 0x00DB0058, 0x01070000, 0x01C7015E, 0x0276021F, 0x036B02E8, 0x5E5B5800, 0x6E6C6A68, 0x8F7B6F5B, 0x6F6F5A6A, 0x004E003F, 0x00000000, 0x0000036B, 0x00E00380,
1705+ 0xFFFFFFF5, 0x00000000, 0x00B4010F, 0x00E2005A, 0x010F0000, 0x01D50169, 0x028A022F, 0x038602FF, 0x5F5B5800, 0x6E6C6A69, 0x8F7C785B, 0x6F6F5A6A, 0x004E0048, 0x00000000, 0x00000386, 0x00E7039D,
1706+ 0xFFFFFFF6, 0x00000000, 0x00BA0117, 0x00E8005D, 0x01170000, 0x01E30174, 0x029D0240, 0x03A20316, 0x5F5C5900, 0x6F6C6A69, 0x8F7C785C, 0x6F6F5A6A, 0x004F0048, 0x00000000, 0x000003A2, 0x00EE03BB,
1707+ 0xFFFFFFF7, 0x00000000, 0x00C10121, 0x00F10060, 0x01210000, 0x01F60182, 0x02B70256, 0x03C50334, 0x685C5900, 0x6F6D6B69, 0x8F7D785C, 0x6F6F5B6B, 0x004F0048, 0x00000000, 0x000003C5, 0x00F703DC,
1708+ 0xFFFFFFF8, 0x00000000, 0x00C7012B, 0x00F90064, 0x012B0000, 0x0206018E, 0x02CD026A, 0x03E4034F, 0x685C5900, 0x6F6D6B6A, 0x8F7D795C, 0x6F6F5B6B, 0x00580049, 0x00000000, 0x000003E4, 0x00FF03FE,
1709+ 0xFFFFFFF9, 0x00000000, 0x00CE0135, 0x01020067, 0x01350000, 0x0218019D, 0x02E7027F, 0x0407036D, 0x685D5A00, 0x6F6E6C6A, 0x8F7E795D, 0x6F6F5B6B, 0x00580049, 0x00000000, 0x00000407, 0x01080422,
1710+ 0xFFFFFFFA, 0x00000000, 0x00D60141, 0x010C006B, 0x01410000, 0x022D01AC, 0x03030298, 0x042E038E, 0x695D5A00, 0x6F6E6C6A, 0x8F7E795D, 0x6F6F5C6C, 0x00580049, 0x00000000, 0x0000042E, 0x0112044A,
1711+ 0xFFFFFFFB, 0x00000000, 0x00DE014D, 0x0115006F, 0x014D0000, 0x024101BC, 0x031F02B0, 0x045503AF, 0x695E5A00, 0x6F6F6C6B, 0x8F7F7A5E, 0x6F6F5C6C, 0x0059004A, 0x00000000, 0x00000455, 0x011C0473,
1712+ 0xFFFFFFFC, 0x00000000, 0x00E7015B, 0x01210074, 0x015B0000, 0x025901CF, 0x034102CD, 0x048403D7, 0x695E5B00, 0x6F6F6D6B, 0x8F7F7A5E, 0x6F6F5D6D, 0x0059004A, 0x00000000, 0x00000484, 0x012804A0,
1713+ 0xFFFFFFFD, 0x00000000, 0x00F10169, 0x012D0078, 0x01690000, 0x027201E1, 0x036202EA, 0x04B303FF, 0x6A5F5B00, 0x6F6F6E6C, 0x8F887B5F, 0x6F6F5D6D, 0x0059004B, 0x00000000, 0x000004B3, 0x013404D0,
1714+ 0xFFFFFFFE, 0x00000000, 0x00FA0177, 0x0139007D, 0x01770000, 0x028A01F4, 0x03840307, 0x04E20427, 0x6A685C00, 0x6F6F6E6C, 0x8F887B68, 0x6F6F5E6E, 0x005A004B, 0x00000000, 0x000004E2, 0x01400502,
1715+ 0xFFFFFFFF, 0x00000000, 0x01050187, 0x01460082, 0x01870000, 0x02A6020A, 0x03AB0329, 0x05190455, 0x6B685C00, 0x6F6F6F6D, 0x8F897B68, 0x6F6F5E6E, 0x005A004B, 0x00000000, 0x00000519, 0x014E0538,
1716+};
--- /dev/null
+++ b/src/gen9_vp9_const_def.h
@@ -0,0 +1,44 @@
1+/*
2+ * Copyright © 2016 Intel Corporation
3+ *
4+ * Permission is hereby granted, free of charge, to any person obtaining a
5+ * copy of this software and associated documentation files (the
6+ * "Software"), to deal in the Software without restriction, including
7+ * without limitation the rights to use, copy, modify, merge, publish,
8+ * distribute, sub license, and/or sell copies of the Software, and to
9+ * permit persons to whom the Software is furnished to do so, subject to
10+ * the following conditions:
11+ *
12+ * The above copyright notice and this permission notice (including the
13+ * next paragraph) shall be included in all copies or substantial portions
14+ * of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+ * SOFTWAR
23+ *
24+ * Authors:
25+ * Zhao, Yakui <yakui.zhao@intel.com>
26+ *
27+ */
28+
29+#ifndef _GEN9_VP9_CONST_H
30+#define _GEN9_VP9_CONST_H
31+
32+extern const unsigned int vp9_fullspiral_ime_search_path_delta[14];
33+
34+extern const unsigned int vp9_diamond_ime_search_path_delta[14];
35+
36+extern const int vp9_brc_const_data_p_g9[4448];
37+extern const int vp9_brc_const_data_i_g9[4448];
38+
39+extern const unsigned int gen9_vp9_avs_coeffs[256];
40+
41+extern const unsigned int intel_vp9_costlut_key[4096];
42+extern const unsigned int intel_vp9_costlut_p[4096];
43+
44+#endif
--- /dev/null
+++ b/src/gen9_vp9_encapi.h
@@ -0,0 +1,52 @@
1+/*
2+ * Copyright © 2016 Intel Corporation
3+ *
4+ * Permission is hereby granted, free of charge, to any person obtaining a
5+ * copy of this software and associated documentation files (the
6+ * "Software"), to deal in the Software without restriction, including
7+ * without limitation the rights to use, copy, modify, merge, publish,
8+ * distribute, sub license, and/or sell copies of the Software, and to
9+ * permit persons to whom the Software is furnished to do so, subject to
10+ * the following conditions:
11+ *
12+ * The above copyright notice and this permission notice (including the
13+ * next paragraph) shall be included in all copies or substantial portions
14+ * of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23+ *
24+ * Authors:
25+ * Zhao Yakui <yakui.zhao@intel.com>
26+ *
27+ */
28+
29+#ifndef _INTEL_VP9_ENC_API_H_
30+#define _INTEL_VP9_ENC_API_H_
31+
32+#include <va/va.h>
33+
34+struct intel_encoder_context;
35+struct hw_context;
36+
37+extern Bool
38+gen9_vp9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
39+
40+extern Bool
41+gen9_vp9_pak_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
42+
43+/* buffer points to the start address of coded_buffer. It is also
44+ * interpreted as i965_coded_buffer_segment.
45+ */
46+extern VAStatus
47+gen9_vp9_get_coded_status(VADriverContextP ctx,
48+ char *buffer,
49+ struct hw_context *hw_context);
50+
51+
52+#endif // _INTE_VP9_ENC_API_H_
--- /dev/null
+++ b/src/gen9_vp9_encoder.c
@@ -0,0 +1,5836 @@
1+/*
2+ * Copyright © 2016 Intel Corporation
3+ *
4+ * Permission is hereby granted, free of charge, to any person obtaining a
5+ * copy of this software and associated documentation files (the
6+ * "Software"), to deal in the Software without restriction, including
7+ * without limitation the rights to use, copy, modify, merge, publish,
8+ * distribute, sub license, and/or sell copies of the Software, and to
9+ * permit persons to whom the Software is furnished to do so, subject to
10+ * the following conditions:
11+ *
12+ * The above copyright notice and this permission notice (including the
13+ * next paragraph) shall be included in all copies or substantial portions
14+ * of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+ * SOFTWAR
23+ *
24+ * Authors:
25+ * Zhao, Yakui <yakui.zhao@intel.com>
26+ *
27+ */
28+
29+#include <stdio.h>
30+#include <stdlib.h>
31+#include <stdbool.h>
32+#include <string.h>
33+#include <math.h>
34+#include <assert.h>
35+#include <va/va.h>
36+
37+#include "intel_batchbuffer.h"
38+#include "intel_driver.h"
39+
40+#include "i965_defines.h"
41+#include "i965_drv_video.h"
42+#include "i965_encoder.h"
43+#include "gen9_vp9_encapi.h"
44+#include "gen9_vp9_encoder.h"
45+#include "gen9_vp9_encoder_kernels.h"
46+#include "vp9_probs.h"
47+#include "gen9_vp9_const_def.h"
48+
49+#define MAX_VP9_ENCODER_SURFACES 64
50+
51+#define MAX_URB_SIZE 4096 /* In register */
52+#define NUM_KERNELS_PER_GPE_CONTEXT 1
53+
54+#define VP9_BRC_KBPS 1000
55+
56+#define BRC_KERNEL_CBR 0x0010
57+#define BRC_KERNEL_VBR 0x0020
58+#define BRC_KERNEL_AVBR 0x0040
59+#define BRC_KERNEL_CQL 0x0080
60+
61+#define DEFAULT_MOCS 0x02
62+#define VP9_PIC_STATE_BUFFER_SIZE 192
63+
64+typedef struct _intel_kernel_header_
65+{
66+ uint32_t reserved : 6;
67+ uint32_t kernel_start_pointer : 26;
68+} intel_kernel_header;
69+
70+typedef struct _intel_vp9_kernel_header {
71+ int nKernelCount;
72+ intel_kernel_header PLY_DSCALE;
73+ intel_kernel_header VP9_ME_P;
74+ intel_kernel_header VP9_Enc_I_32x32;
75+ intel_kernel_header VP9_Enc_I_16x16;
76+ intel_kernel_header VP9_Enc_P;
77+ intel_kernel_header VP9_Enc_TX;
78+ intel_kernel_header VP9_DYS;
79+
80+ intel_kernel_header VP9BRC_Intra_Distortion;
81+ intel_kernel_header VP9BRC_Init;
82+ intel_kernel_header VP9BRC_Reset;
83+ intel_kernel_header VP9BRC_Update;
84+} intel_vp9_kernel_header;
85+
86+#define DYS_1X_FLAG 0x01
87+#define DYS_4X_FLAG 0x02
88+#define DYS_16X_FLAG 0x04
89+
90+struct vp9_surface_param {
91+ uint32_t frame_width;
92+ uint32_t frame_height;
93+};
94+
95+static uint32_t intel_convert_sign_mag(int val, int sign_bit_pos)
96+{
97+ uint32_t ret_val = 0;
98+ if (val < 0)
99+ {
100+ val = -val;
101+ ret_val = ((1 << (sign_bit_pos - 1)) | (val & ((1 << (sign_bit_pos - 1)) - 1)));
102+ }
103+ else
104+ {
105+ ret_val = val & ((1 << (sign_bit_pos - 1)) - 1);
106+ }
107+ return ret_val;
108+}
109+
110+static bool
111+intel_vp9_get_kernel_header_and_size(
112+ void *pvbinary,
113+ int binary_size,
114+ INTEL_VP9_ENC_OPERATION operation,
115+ int krnstate_idx,
116+ struct i965_kernel *ret_kernel)
117+{
118+ typedef uint32_t BIN_PTR[4];
119+
120+ char *bin_start;
121+ intel_vp9_kernel_header *pkh_table;
122+ intel_kernel_header *pcurr_header, *pinvalid_entry, *pnext_header;
123+ int next_krnoffset;
124+
125+ if (!pvbinary || !ret_kernel)
126+ return false;
127+
128+ bin_start = (char *)pvbinary;
129+ pkh_table = (intel_vp9_kernel_header *)pvbinary;
130+ pinvalid_entry = &(pkh_table->VP9BRC_Update) + 1;
131+ next_krnoffset = binary_size;
132+
133+ if ((operation == INTEL_VP9_ENC_SCALING4X) || (operation == INTEL_VP9_ENC_SCALING2X))
134+ {
135+ pcurr_header = &pkh_table->PLY_DSCALE;
136+ }
137+ else if (operation == INTEL_VP9_ENC_ME)
138+ {
139+ pcurr_header = &pkh_table->VP9_ME_P;
140+ }
141+ else if (operation == INTEL_VP9_ENC_MBENC)
142+ {
143+ pcurr_header = &pkh_table->VP9_Enc_I_32x32;
144+ }
145+ else if (operation == INTEL_VP9_ENC_DYS)
146+ {
147+ pcurr_header = &pkh_table->VP9_DYS;
148+ }
149+ else if (operation == INTEL_VP9_ENC_BRC)
150+ {
151+ pcurr_header = &pkh_table->VP9BRC_Intra_Distortion;
152+ }
153+ else
154+ {
155+ return false;
156+ }
157+
158+ pcurr_header += krnstate_idx;
159+ ret_kernel->bin = (const BIN_PTR *)(bin_start + (pcurr_header->kernel_start_pointer << 6));
160+
161+ pnext_header = (pcurr_header + 1);
162+ if (pnext_header < pinvalid_entry)
163+ {
164+ next_krnoffset = pnext_header->kernel_start_pointer << 6;
165+ }
166+ ret_kernel->size = next_krnoffset - (pcurr_header->kernel_start_pointer << 6);
167+
168+ return true;
169+}
170+
171+
172+static void
173+gen9_free_surfaces_vp9(void **data)
174+{
175+ struct gen9_surface_vp9 *vp9_surface;
176+
177+ if (!data || !*data)
178+ return;
179+
180+ vp9_surface = *data;
181+
182+ if (vp9_surface->scaled_4x_surface_obj) {
183+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->scaled_4x_surface_id, 1);
184+ vp9_surface->scaled_4x_surface_id = VA_INVALID_SURFACE;
185+ vp9_surface->scaled_4x_surface_obj = NULL;
186+ }
187+
188+ if (vp9_surface->scaled_16x_surface_obj) {
189+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->scaled_16x_surface_id, 1);
190+ vp9_surface->scaled_16x_surface_id = VA_INVALID_SURFACE;
191+ vp9_surface->scaled_16x_surface_obj = NULL;
192+ }
193+
194+ if (vp9_surface->dys_4x_surface_obj) {
195+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->dys_4x_surface_id, 1);
196+ vp9_surface->dys_4x_surface_id = VA_INVALID_SURFACE;
197+ vp9_surface->dys_4x_surface_obj = NULL;
198+ }
199+
200+ if (vp9_surface->dys_16x_surface_obj) {
201+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->dys_16x_surface_id, 1);
202+ vp9_surface->dys_16x_surface_id = VA_INVALID_SURFACE;
203+ vp9_surface->dys_16x_surface_obj = NULL;
204+ }
205+
206+ if (vp9_surface->dys_surface_obj) {
207+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->dys_surface_id, 1);
208+ vp9_surface->dys_surface_id = VA_INVALID_SURFACE;
209+ vp9_surface->dys_surface_obj = NULL;
210+ }
211+
212+ free(vp9_surface);
213+
214+ *data = NULL;
215+
216+ return;
217+}
218+
219+static VAStatus
220+gen9_vp9_init_check_surfaces(VADriverContextP ctx,
221+ struct object_surface *obj_surface,
222+ struct vp9_surface_param *surface_param)
223+{
224+ struct i965_driver_data *i965 = i965_driver_data(ctx);
225+ struct gen9_surface_vp9 *vp9_surface;
226+ int downscaled_width_4x, downscaled_height_4x;
227+ int downscaled_width_16x, downscaled_height_16x;
228+
229+ if (!obj_surface || !obj_surface->bo)
230+ return VA_STATUS_ERROR_INVALID_SURFACE;
231+
232+ if (obj_surface->private_data &&
233+ obj_surface->free_private_data != gen9_free_surfaces_vp9) {
234+ obj_surface->free_private_data(&obj_surface->private_data);
235+ obj_surface->private_data = NULL;
236+ }
237+
238+ if (obj_surface->private_data) {
239+ /* if the frame width/height is already the same as the expected,
240+ * it is unncessary to reallocate it.
241+ */
242+ vp9_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
243+ if (vp9_surface->frame_width >= surface_param->frame_width ||
244+ vp9_surface->frame_height >= surface_param->frame_height)
245+ return VA_STATUS_SUCCESS;
246+
247+ obj_surface->free_private_data(&obj_surface->private_data);
248+ obj_surface->private_data = NULL;
249+ vp9_surface = NULL;
250+ }
251+
252+ vp9_surface = calloc(1, sizeof(struct gen9_surface_vp9));
253+
254+ if (!vp9_surface)
255+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
256+
257+ vp9_surface->ctx = ctx;
258+ obj_surface->private_data = vp9_surface;
259+ obj_surface->free_private_data = gen9_free_surfaces_vp9;
260+
261+ vp9_surface->frame_width = surface_param->frame_width;
262+ vp9_surface->frame_height = surface_param->frame_height;
263+
264+ downscaled_width_4x = ALIGN(surface_param->frame_width / 4, 16);
265+ downscaled_height_4x = ALIGN(surface_param->frame_height / 4, 16);
266+
267+ i965_CreateSurfaces(ctx,
268+ downscaled_width_4x,
269+ downscaled_height_4x,
270+ VA_RT_FORMAT_YUV420,
271+ 1,
272+ &vp9_surface->scaled_4x_surface_id);
273+
274+ vp9_surface->scaled_4x_surface_obj = SURFACE(vp9_surface->scaled_4x_surface_id);
275+ i965_check_alloc_surface_bo(ctx, vp9_surface->scaled_4x_surface_obj, 1,
276+ VA_FOURCC('N', 'V', '1', '2'), SUBSAMPLE_YUV420);
277+
278+ downscaled_width_16x = ALIGN(surface_param->frame_width / 16, 16);
279+ downscaled_height_16x = ALIGN(surface_param->frame_height / 16, 16);
280+ i965_CreateSurfaces(ctx,
281+ downscaled_width_16x,
282+ downscaled_height_16x,
283+ VA_RT_FORMAT_YUV420,
284+ 1,
285+ &vp9_surface->scaled_16x_surface_id);
286+ vp9_surface->scaled_16x_surface_obj = SURFACE(vp9_surface->scaled_16x_surface_id);
287+ i965_check_alloc_surface_bo(ctx, vp9_surface->scaled_16x_surface_obj, 1,
288+ VA_FOURCC('N', 'V', '1', '2'), SUBSAMPLE_YUV420);
289+
290+ return VA_STATUS_SUCCESS;
291+}
292+
293+static VAStatus
294+gen9_vp9_check_dys_surfaces(VADriverContextP ctx,
295+ struct object_surface *obj_surface,
296+ struct vp9_surface_param *surface_param)
297+{
298+ struct i965_driver_data *i965 = i965_driver_data(ctx);
299+ struct gen9_surface_vp9 *vp9_surface;
300+ int dys_width_4x, dys_height_4x;
301+ int dys_width_16x, dys_height_16x;
302+
303+ /* As this is handled after the surface checking, it is unnecessary
304+ * to check the surface bo and vp9_priv_surface again
305+ */
306+
307+ vp9_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
308+
309+ if (!vp9_surface)
310+ return VA_STATUS_ERROR_INVALID_SURFACE;
311+
312+ /* if the frame_width/height of dys_surface is the same as
313+ * the expected, it is unnecessary to allocate it again
314+ */
315+ if (vp9_surface->dys_frame_width == surface_param->frame_width &&
316+ vp9_surface->dys_frame_width == surface_param->frame_width)
317+ return VA_STATUS_SUCCESS;
318+
319+ if (vp9_surface->dys_4x_surface_obj) {
320+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->dys_4x_surface_id, 1);
321+ vp9_surface->dys_4x_surface_id = VA_INVALID_SURFACE;
322+ vp9_surface->dys_4x_surface_obj = NULL;
323+ }
324+
325+ if (vp9_surface->dys_16x_surface_obj) {
326+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->dys_16x_surface_id, 1);
327+ vp9_surface->dys_16x_surface_id = VA_INVALID_SURFACE;
328+ vp9_surface->dys_16x_surface_obj = NULL;
329+ }
330+
331+ if (vp9_surface->dys_surface_obj) {
332+ i965_DestroySurfaces(vp9_surface->ctx, &vp9_surface->dys_surface_id, 1);
333+ vp9_surface->dys_surface_id = VA_INVALID_SURFACE;
334+ vp9_surface->dys_surface_obj = NULL;
335+ }
336+
337+ vp9_surface->dys_frame_width = surface_param->frame_width;
338+ vp9_surface->dys_frame_height = surface_param->frame_height;
339+
340+ i965_CreateSurfaces(ctx,
341+ surface_param->frame_width,
342+ surface_param->frame_height,
343+ VA_RT_FORMAT_YUV420,
344+ 1,
345+ &vp9_surface->dys_surface_id);
346+ vp9_surface->dys_surface_obj = SURFACE(vp9_surface->dys_surface_id);
347+ i965_check_alloc_surface_bo(ctx, vp9_surface->dys_surface_obj, 1,
348+ VA_FOURCC('N', 'V', '1', '2'), SUBSAMPLE_YUV420);
349+
350+ dys_width_4x = ALIGN(surface_param->frame_width / 4, 16);
351+ dys_height_4x = ALIGN(surface_param->frame_width / 4, 16);
352+
353+ i965_CreateSurfaces(ctx,
354+ dys_width_4x,
355+ dys_height_4x,
356+ VA_RT_FORMAT_YUV420,
357+ 1,
358+ &vp9_surface->dys_4x_surface_id);
359+
360+ vp9_surface->dys_4x_surface_obj = SURFACE(vp9_surface->dys_4x_surface_id);
361+ i965_check_alloc_surface_bo(ctx, vp9_surface->dys_4x_surface_obj, 1,
362+ VA_FOURCC('N', 'V', '1', '2'), SUBSAMPLE_YUV420);
363+
364+ dys_width_16x = ALIGN(surface_param->frame_width / 16, 16);
365+ dys_height_16x = ALIGN(surface_param->frame_width / 16, 16);
366+ i965_CreateSurfaces(ctx,
367+ dys_width_16x,
368+ dys_height_16x,
369+ VA_RT_FORMAT_YUV420,
370+ 1,
371+ &vp9_surface->dys_16x_surface_id);
372+ vp9_surface->dys_16x_surface_obj = SURFACE(vp9_surface->dys_16x_surface_id);
373+ i965_check_alloc_surface_bo(ctx, vp9_surface->dys_16x_surface_obj, 1,
374+ VA_FOURCC('N', 'V', '1', '2'), SUBSAMPLE_YUV420);
375+
376+ return VA_STATUS_SUCCESS;
377+}
378+
379+static VAStatus
380+gen9_vp9_allocate_resources(VADriverContextP ctx,
381+ struct encode_state *encode_state,
382+ struct intel_encoder_context *encoder_context,
383+ int allocate)
384+{
385+ struct i965_driver_data *i965 = i965_driver_data(ctx);
386+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
387+ struct gen9_vp9_state *vp9_state;
388+ int allocate_flag, i;
389+ int res_size;
390+ uint32_t frame_width_in_sb, frame_height_in_sb, frame_sb_num;
391+ unsigned int width, height;
392+
393+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
394+
395+ if (!vp9_state || !vp9_state->pic_param)
396+ return VA_STATUS_ERROR_INVALID_PARAMETER;
397+
398+ /* the buffer related with BRC is not changed. So it is allocated
399+ * based on the input parameter
400+ */
401+ if (allocate) {
402+ i965_free_gpe_resource(&vme_context->res_brc_history_buffer);
403+ i965_free_gpe_resource(&vme_context->res_brc_const_data_buffer);
404+ i965_free_gpe_resource(&vme_context->res_brc_mbenc_curbe_write_buffer);
405+ i965_free_gpe_resource(&vme_context->res_pic_state_brc_read_buffer);
406+ i965_free_gpe_resource(&vme_context->res_pic_state_brc_write_hfw_read_buffer);
407+ i965_free_gpe_resource(&vme_context->res_pic_state_hfw_write_buffer);
408+ i965_free_gpe_resource(&vme_context->res_seg_state_brc_read_buffer);
409+ i965_free_gpe_resource(&vme_context->res_seg_state_brc_write_buffer);
410+ i965_free_gpe_resource(&vme_context->res_brc_bitstream_size_buffer);
411+ i965_free_gpe_resource(&vme_context->res_brc_hfw_data_buffer);
412+ i965_free_gpe_resource(&vme_context->res_brc_mmdk_pak_buffer);
413+
414+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
415+ &vme_context->res_brc_history_buffer,
416+ VP9_BRC_HISTORY_BUFFER_SIZE,
417+ "Brc History buffer");
418+ if (!allocate_flag)
419+ goto failed_allocation;
420+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
421+ &vme_context->res_brc_const_data_buffer,
422+ VP9_BRC_CONSTANTSURFACE_SIZE,
423+ "Brc Constant buffer");
424+ if (!allocate_flag)
425+ goto failed_allocation;
426+
427+ res_size = ALIGN(sizeof(vp9_mbenc_curbe_data), 64) + 128 +
428+ ALIGN(sizeof(struct gen8_interface_descriptor_data), 64) * NUM_VP9_MBENC;
429+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
430+ &vme_context->res_brc_mbenc_curbe_write_buffer,
431+ res_size,
432+ "Brc Curbe write");
433+ if (!allocate_flag)
434+ goto failed_allocation;
435+
436+ res_size = VP9_PIC_STATE_BUFFER_SIZE * 4;
437+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
438+ &vme_context->res_pic_state_brc_read_buffer,
439+ res_size,
440+ "Pic State Brc_read");
441+ if (!allocate_flag)
442+ goto failed_allocation;
443+
444+ res_size = VP9_PIC_STATE_BUFFER_SIZE * 4;
445+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
446+ &vme_context->res_pic_state_brc_write_hfw_read_buffer,
447+ res_size,
448+ "Pic State Brc_write Hfw_Read");
449+ if (!allocate_flag)
450+ goto failed_allocation;
451+
452+ res_size = VP9_PIC_STATE_BUFFER_SIZE * 4;
453+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
454+ &vme_context->res_pic_state_hfw_write_buffer,
455+ res_size,
456+ "Pic State Hfw Write");
457+ if (!allocate_flag)
458+ goto failed_allocation;
459+
460+ res_size = VP9_SEGMENT_STATE_BUFFER_SIZE;
461+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
462+ &vme_context->res_seg_state_brc_read_buffer,
463+ res_size,
464+ "Segment state brc_read");
465+ if (!allocate_flag)
466+ goto failed_allocation;
467+
468+ res_size = VP9_SEGMENT_STATE_BUFFER_SIZE;
469+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
470+ &vme_context->res_seg_state_brc_write_buffer,
471+ res_size,
472+ "Segment state brc_write");
473+ if (!allocate_flag)
474+ goto failed_allocation;
475+
476+ res_size = VP9_BRC_BITSTREAM_SIZE_BUFFER_SIZE;
477+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
478+ &vme_context->res_brc_bitstream_size_buffer,
479+ res_size,
480+ "Brc bitstream buffer");
481+ if (!allocate_flag)
482+ goto failed_allocation;
483+
484+ res_size = VP9_HFW_BRC_DATA_BUFFER_SIZE;
485+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
486+ &vme_context->res_brc_hfw_data_buffer,
487+ res_size,
488+ "mfw Brc data");
489+ if (!allocate_flag)
490+ goto failed_allocation;
491+
492+ res_size = VP9_BRC_MMDK_PAK_BUFFER_SIZE;
493+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
494+ &vme_context->res_brc_mmdk_pak_buffer,
495+ res_size,
496+ "Brc mmdk_pak");
497+ if (!allocate_flag)
498+ goto failed_allocation;
499+ }
500+
501+ /* If the width/height of allocated buffer is greater than the expected,
502+ * it is unnecessary to allocate it again
503+ */
504+ if (vp9_state->res_width >= vp9_state->frame_width &&
505+ vp9_state->res_height >= vp9_state->frame_height) {
506+
507+ return VA_STATUS_SUCCESS;
508+ }
509+ frame_width_in_sb = ALIGN(vp9_state->frame_width, 64) / 64;
510+ frame_height_in_sb = ALIGN(vp9_state->frame_height, 64) / 64;
511+ frame_sb_num = frame_width_in_sb * frame_height_in_sb;
512+
513+ i965_free_gpe_resource(&vme_context->res_hvd_line_buffer);
514+ res_size = frame_width_in_sb * 64;
515+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
516+ &vme_context->res_hvd_line_buffer,
517+ res_size,
518+ "VP9 hvd line line");
519+ if (!allocate_flag)
520+ goto failed_allocation;
521+
522+ i965_free_gpe_resource(&vme_context->res_hvd_tile_line_buffer);
523+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
524+ &vme_context->res_hvd_tile_line_buffer,
525+ res_size,
526+ "VP9 hvd tile_line line");
527+ if (!allocate_flag)
528+ goto failed_allocation;
529+
530+ i965_free_gpe_resource(&vme_context->res_deblocking_filter_line_buffer);
531+ res_size = frame_width_in_sb * 18 * 64;
532+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
533+ &vme_context->res_deblocking_filter_line_buffer,
534+ res_size,
535+ "VP9 deblocking filter line");
536+ if (!allocate_flag)
537+ goto failed_allocation;
538+
539+ i965_free_gpe_resource(&vme_context->res_deblocking_filter_tile_line_buffer);
540+ res_size = frame_width_in_sb * 18 * 64;
541+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
542+ &vme_context->res_deblocking_filter_tile_line_buffer,
543+ res_size,
544+ "VP9 deblocking tile line");
545+ if (!allocate_flag)
546+ goto failed_allocation;
547+
548+ i965_free_gpe_resource(&vme_context->res_deblocking_filter_tile_col_buffer);
549+ res_size = frame_height_in_sb * 17 * 64;
550+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
551+ &vme_context->res_deblocking_filter_tile_col_buffer,
552+ res_size,
553+ "VP9 deblocking tile col");
554+ if (!allocate_flag)
555+ goto failed_allocation;
556+
557+ i965_free_gpe_resource(&vme_context->res_metadata_line_buffer);
558+ res_size = frame_width_in_sb * 5 * 64;
559+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
560+ &vme_context->res_metadata_line_buffer,
561+ res_size,
562+ "VP9 metadata line");
563+ if (!allocate_flag)
564+ goto failed_allocation;
565+
566+ i965_free_gpe_resource(&vme_context->res_metadata_tile_line_buffer);
567+ res_size = frame_width_in_sb * 5 * 64;
568+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
569+ &vme_context->res_metadata_tile_line_buffer,
570+ res_size,
571+ "VP9 metadata tile line");
572+ if (!allocate_flag)
573+ goto failed_allocation;
574+
575+ i965_free_gpe_resource(&vme_context->res_metadata_tile_col_buffer);
576+ res_size = frame_height_in_sb * 5 * 64;
577+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
578+ &vme_context->res_metadata_tile_col_buffer,
579+ res_size,
580+ "VP9 metadata tile col");
581+ if (!allocate_flag)
582+ goto failed_allocation;
583+
584+ i965_free_gpe_resource(&vme_context->res_prob_buffer);
585+ res_size = 2048;
586+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
587+ &vme_context->res_prob_buffer,
588+ res_size,
589+ "VP9 prob");
590+ if (!allocate_flag)
591+ goto failed_allocation;
592+
593+ i965_free_gpe_resource(&vme_context->res_segmentid_buffer);
594+ res_size = frame_sb_num * 64;
595+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
596+ &vme_context->res_segmentid_buffer,
597+ res_size,
598+ "VP9 segment id");
599+ if (!allocate_flag)
600+ goto failed_allocation;
601+
602+ i965_zero_gpe_resource(&vme_context->res_segmentid_buffer);
603+
604+ i965_free_gpe_resource(&vme_context->res_prob_delta_buffer);
605+ res_size = 29 * 64;
606+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
607+ &vme_context->res_prob_delta_buffer,
608+ res_size,
609+ "VP9 prob delta");
610+ if (!allocate_flag)
611+ goto failed_allocation;
612+
613+ i965_zero_gpe_resource(&vme_context->res_segmentid_buffer);
614+
615+ i965_free_gpe_resource(&vme_context->res_prob_delta_buffer);
616+ res_size = 29 * 64;
617+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
618+ &vme_context->res_prob_delta_buffer,
619+ res_size,
620+ "VP9 prob delta");
621+ if (!allocate_flag)
622+ goto failed_allocation;
623+
624+ i965_free_gpe_resource(&vme_context->res_compressed_input_buffer);
625+ res_size = 32 * 64;
626+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
627+ &vme_context->res_compressed_input_buffer,
628+ res_size,
629+ "VP9 compressed_input buffer");
630+ if (!allocate_flag)
631+ goto failed_allocation;
632+
633+ i965_free_gpe_resource(&vme_context->res_prob_counter_buffer);
634+ res_size = 193 * 64;
635+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
636+ &vme_context->res_prob_counter_buffer,
637+ res_size,
638+ "VP9 prob counter");
639+ if (!allocate_flag)
640+ goto failed_allocation;
641+
642+ i965_free_gpe_resource(&vme_context->res_tile_record_streamout_buffer);
643+ res_size = frame_sb_num * 64;
644+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
645+ &vme_context->res_tile_record_streamout_buffer,
646+ res_size,
647+ "VP9 tile record stream_out");
648+ if (!allocate_flag)
649+ goto failed_allocation;
650+
651+ i965_free_gpe_resource(&vme_context->res_cu_stat_streamout_buffer);
652+ res_size = frame_sb_num * 64;
653+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
654+ &vme_context->res_cu_stat_streamout_buffer,
655+ res_size,
656+ "VP9 CU stat stream_out");
657+ if (!allocate_flag)
658+ goto failed_allocation;
659+
660+ width = vp9_state->downscaled_width_4x_in_mb * 32;
661+ height = vp9_state->downscaled_height_4x_in_mb * 16;
662+ i965_free_gpe_resource(&vme_context->s4x_memv_data_buffer);
663+ allocate_flag = i965_gpe_allocate_2d_resource(i965->intel.bufmgr,
664+ &vme_context->s4x_memv_data_buffer,
665+ width, height,
666+ ALIGN(width, 64),
667+ "VP9 4x MEMV data");
668+ if (!allocate_flag)
669+ goto failed_allocation;
670+
671+ width = vp9_state->downscaled_width_4x_in_mb * 8;
672+ height = vp9_state->downscaled_height_4x_in_mb * 16;
673+ i965_free_gpe_resource(&vme_context->s4x_memv_distortion_buffer);
674+ allocate_flag = i965_gpe_allocate_2d_resource(i965->intel.bufmgr,
675+ &vme_context->s4x_memv_distortion_buffer,
676+ width, height,
677+ ALIGN(width, 64),
678+ "VP9 4x MEMV distorion");
679+ if (!allocate_flag)
680+ goto failed_allocation;
681+
682+ width = ALIGN(vp9_state->downscaled_width_16x_in_mb * 32, 64);
683+ height = vp9_state->downscaled_height_16x_in_mb * 16;
684+ i965_free_gpe_resource(&vme_context->s16x_memv_data_buffer);
685+ allocate_flag = i965_gpe_allocate_2d_resource(i965->intel.bufmgr,
686+ &vme_context->s16x_memv_data_buffer,
687+ width, height,
688+ width,
689+ "VP9 16x MEMV data");
690+ if (!allocate_flag)
691+ goto failed_allocation;
692+
693+ width = vp9_state->frame_width_in_mb * 16;
694+ height = vp9_state->frame_height_in_mb * 8;
695+ i965_free_gpe_resource(&vme_context->res_output_16x16_inter_modes);
696+ allocate_flag = i965_gpe_allocate_2d_resource(i965->intel.bufmgr,
697+ &vme_context->res_output_16x16_inter_modes,
698+ width, height,
699+ ALIGN(width, 64),
700+ "VP9 output inter_mode");
701+ if (!allocate_flag)
702+ goto failed_allocation;
703+
704+ res_size = vp9_state->frame_width_in_mb * vp9_state->frame_height_in_mb *
705+ 16 * 4;
706+ for (i = 0; i < 2; i++) {
707+ i965_free_gpe_resource(&vme_context->res_mode_decision[i]);
708+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
709+ &vme_context->res_mode_decision[i],
710+ res_size,
711+ "VP9 mode decision");
712+ if (!allocate_flag)
713+ goto failed_allocation;
714+
715+ }
716+
717+ res_size = frame_sb_num * 9 * 64;
718+ for (i = 0; i < 2; i++) {
719+ i965_free_gpe_resource(&vme_context->res_mv_temporal_buffer[i]);
720+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
721+ &vme_context->res_mv_temporal_buffer[i],
722+ res_size,
723+ "VP9 temporal mv");
724+ if (!allocate_flag)
725+ goto failed_allocation;
726+ }
727+
728+ vp9_state->mb_data_offset = ALIGN(frame_sb_num * 16, 4096) + 4096;
729+ res_size = vp9_state->mb_data_offset + frame_sb_num * 64 * 64 + 1000;
730+ i965_free_gpe_resource(&vme_context->res_mb_code_surface);
731+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
732+ &vme_context->res_mb_code_surface,
733+ ALIGN(res_size, 4096),
734+ "VP9 mb_code surface");
735+ if (!allocate_flag)
736+ goto failed_allocation;
737+
738+ res_size = 128;
739+ i965_free_gpe_resource(&vme_context->res_pak_uncompressed_input_buffer);
740+ allocate_flag = i965_allocate_gpe_resource(i965->intel.bufmgr,
741+ &vme_context->res_pak_uncompressed_input_buffer,
742+ ALIGN(res_size, 4096),
743+ "VP9 pak_uncompressed_input");
744+ if (!allocate_flag)
745+ goto failed_allocation;
746+
747+ if (!vme_context->frame_header_data) {
748+ /* allocate 512 bytes for generating the uncompressed header */
749+ vme_context->frame_header_data = calloc(1, 512);
750+ }
751+
752+ vp9_state->res_width = vp9_state->frame_width;
753+ vp9_state->res_height = vp9_state->frame_height;
754+
755+ return VA_STATUS_SUCCESS;
756+
757+failed_allocation:
758+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
759+}
760+
761+static void
762+gen9_vp9_free_resources(struct gen9_encoder_context_vp9 *vme_context)
763+{
764+ int i;
765+ struct gen9_vp9_state *vp9_state = (struct gen9_vp9_state *) vme_context->enc_priv_state;
766+
767+ if (vp9_state->brc_enabled) {
768+ i965_free_gpe_resource(&vme_context->res_brc_history_buffer);
769+ i965_free_gpe_resource(&vme_context->res_brc_const_data_buffer);
770+ i965_free_gpe_resource(&vme_context->res_brc_mbenc_curbe_write_buffer);
771+ i965_free_gpe_resource(&vme_context->res_pic_state_brc_read_buffer);
772+ i965_free_gpe_resource(&vme_context->res_pic_state_brc_write_hfw_read_buffer);
773+ i965_free_gpe_resource(&vme_context->res_pic_state_hfw_write_buffer);
774+ i965_free_gpe_resource(&vme_context->res_seg_state_brc_read_buffer);
775+ i965_free_gpe_resource(&vme_context->res_seg_state_brc_write_buffer);
776+ i965_free_gpe_resource(&vme_context->res_brc_bitstream_size_buffer);
777+ i965_free_gpe_resource(&vme_context->res_brc_hfw_data_buffer);
778+ i965_free_gpe_resource(&vme_context->res_brc_mmdk_pak_buffer);
779+ }
780+
781+ i965_free_gpe_resource(&vme_context->res_hvd_line_buffer);
782+ i965_free_gpe_resource(&vme_context->res_hvd_tile_line_buffer);
783+ i965_free_gpe_resource(&vme_context->res_deblocking_filter_line_buffer);
784+ i965_free_gpe_resource(&vme_context->res_deblocking_filter_tile_line_buffer);
785+ i965_free_gpe_resource(&vme_context->res_deblocking_filter_tile_col_buffer);
786+ i965_free_gpe_resource(&vme_context->res_metadata_line_buffer);
787+ i965_free_gpe_resource(&vme_context->res_metadata_tile_line_buffer);
788+ i965_free_gpe_resource(&vme_context->res_metadata_tile_col_buffer);
789+ i965_free_gpe_resource(&vme_context->res_prob_buffer);
790+ i965_free_gpe_resource(&vme_context->res_segmentid_buffer);
791+ i965_free_gpe_resource(&vme_context->res_prob_delta_buffer);
792+ i965_free_gpe_resource(&vme_context->res_prob_counter_buffer);
793+ i965_free_gpe_resource(&vme_context->res_tile_record_streamout_buffer);
794+ i965_free_gpe_resource(&vme_context->res_cu_stat_streamout_buffer);
795+ i965_free_gpe_resource(&vme_context->s4x_memv_data_buffer);
796+ i965_free_gpe_resource(&vme_context->s4x_memv_distortion_buffer);
797+ i965_free_gpe_resource(&vme_context->s16x_memv_data_buffer);
798+ i965_free_gpe_resource(&vme_context->res_output_16x16_inter_modes);
799+ for (i = 0; i < 2; i++) {
800+ i965_free_gpe_resource(&vme_context->res_mode_decision[i]);
801+ }
802+
803+ for (i = 0; i < 2; i++) {
804+ i965_free_gpe_resource(&vme_context->res_mv_temporal_buffer[i]);
805+ }
806+
807+ i965_free_gpe_resource(&vme_context->res_compressed_input_buffer);
808+ i965_free_gpe_resource(&vme_context->res_mb_code_surface);
809+ i965_free_gpe_resource(&vme_context->res_pak_uncompressed_input_buffer);
810+
811+ if (vme_context->frame_header_data) {
812+ free(vme_context->frame_header_data);
813+ vme_context->frame_header_data = NULL;
814+ }
815+ return;
816+}
817+
818+static void
819+gen9_init_media_object_walker_parameter(struct intel_encoder_context *encoder_context,
820+ struct vp9_encoder_kernel_walker_parameter *kernel_walker_param,
821+ struct gpe_media_object_walker_parameter *walker_param)
822+{
823+ memset(walker_param, 0, sizeof(*walker_param));
824+
825+ walker_param->use_scoreboard = kernel_walker_param->use_scoreboard;
826+
827+ walker_param->block_resolution.x = kernel_walker_param->resolution_x;
828+ walker_param->block_resolution.y = kernel_walker_param->resolution_y;
829+
830+ walker_param->global_resolution.x = kernel_walker_param->resolution_x;
831+ walker_param->global_resolution.y = kernel_walker_param->resolution_y;
832+
833+ walker_param->global_outer_loop_stride.x = kernel_walker_param->resolution_x;
834+ walker_param->global_outer_loop_stride.y = 0;
835+
836+ walker_param->global_inner_loop_unit.x = 0;
837+ walker_param->global_inner_loop_unit.y = kernel_walker_param->resolution_y;
838+
839+ walker_param->local_loop_exec_count = 0xFFFF; //MAX VALUE
840+ walker_param->global_loop_exec_count = 0xFFFF; //MAX VALUE
841+
842+ if (kernel_walker_param->no_dependency) {
843+ walker_param->scoreboard_mask = 0;
844+ walker_param->use_scoreboard = 0;
845+ // Raster scan walking pattern
846+ walker_param->local_outer_loop_stride.x = 0;
847+ walker_param->local_outer_loop_stride.y = 1;
848+ walker_param->local_inner_loop_unit.x = 1;
849+ walker_param->local_inner_loop_unit.y = 0;
850+ walker_param->local_end.x = kernel_walker_param->resolution_x - 1;
851+ walker_param->local_end.y = 0;
852+ } else {
853+ walker_param->local_end.x = 0;
854+ walker_param->local_end.y = 0;
855+
856+ if (kernel_walker_param->walker_degree == VP9_45Z_DEGREE) {
857+ // 45z degree
858+ walker_param->scoreboard_mask = 0x0F;
859+
860+ walker_param->global_loop_exec_count = 0x3FF;
861+ walker_param->local_loop_exec_count = 0x3FF;
862+
863+ walker_param->global_resolution.x = (unsigned int)(kernel_walker_param->resolution_x / 2.f) + 1;
864+ walker_param->global_resolution.y = 2 * kernel_walker_param->resolution_y;
865+
866+ walker_param->global_start.x = 0;
867+ walker_param->global_start.y = 0;
868+
869+ walker_param->global_outer_loop_stride.x = walker_param->global_resolution.x;
870+ walker_param->global_outer_loop_stride.y = 0;
871+
872+ walker_param->global_inner_loop_unit.x = 0;
873+ walker_param->global_inner_loop_unit.y = walker_param->global_resolution.y;
874+
875+ walker_param->block_resolution.x = walker_param->global_resolution.x;
876+ walker_param->block_resolution.y = walker_param->global_resolution.y;
877+
878+ walker_param->local_start.x = 0;
879+ walker_param->local_start.y = 0;
880+
881+ walker_param->local_outer_loop_stride.x = 1;
882+ walker_param->local_outer_loop_stride.y = 0;
883+
884+ walker_param->local_inner_loop_unit.x = -1;
885+ walker_param->local_inner_loop_unit.y = 4;
886+
887+ walker_param->middle_loop_extra_steps = 3;
888+ walker_param->mid_loop_unit_x = 0;
889+ walker_param->mid_loop_unit_y = 1;
890+ } else {
891+ // 26 degree
892+ walker_param->scoreboard_mask = 0x0F;
893+ walker_param->local_outer_loop_stride.x = 1;
894+ walker_param->local_outer_loop_stride.y = 0;
895+ walker_param->local_inner_loop_unit.x = -2;
896+ walker_param->local_inner_loop_unit.y = 1;
897+ }
898+ }
899+}
900+
901+static void
902+gen9_add_2d_gpe_surface(VADriverContextP ctx,
903+ struct i965_gpe_context *gpe_context,
904+ struct object_surface *obj_surface,
905+ int is_uv_surface,
906+ int is_media_block_rw,
907+ unsigned int format,
908+ int index)
909+{
910+ struct i965_gpe_resource gpe_resource;
911+ struct i965_gpe_surface gpe_surface;
912+
913+ memset(&gpe_surface, 0, sizeof(gpe_surface));
914+
915+ i965_object_surface_to_2d_gpe_resource(&gpe_resource, obj_surface);
916+ gpe_surface.gpe_resource = &gpe_resource;
917+ gpe_surface.is_2d_surface = 1;
918+ gpe_surface.is_uv_surface = !!is_uv_surface;
919+ gpe_surface.is_media_block_rw = !!is_media_block_rw;
920+
921+ gpe_surface.cacheability_control = DEFAULT_MOCS;
922+ gpe_surface.format = format;
923+
924+ gen9_gpe_context_add_surface(gpe_context, &gpe_surface, index);
925+ i965_free_gpe_resource(&gpe_resource);
926+}
927+
928+static void
929+gen9_add_adv_gpe_surface(VADriverContextP ctx,
930+ struct i965_gpe_context *gpe_context,
931+ struct object_surface *obj_surface,
932+ int index)
933+{
934+ struct i965_gpe_resource gpe_resource;
935+ struct i965_gpe_surface gpe_surface;
936+
937+ memset(&gpe_surface, 0, sizeof(gpe_surface));
938+
939+ i965_object_surface_to_2d_gpe_resource(&gpe_resource, obj_surface);
940+ gpe_surface.gpe_resource = &gpe_resource;
941+ gpe_surface.is_adv_surface = 1;
942+ gpe_surface.cacheability_control = DEFAULT_MOCS;
943+ gpe_surface.v_direction = 2;
944+
945+ gen9_gpe_context_add_surface(gpe_context, &gpe_surface, index);
946+ i965_free_gpe_resource(&gpe_resource);
947+}
948+
949+static void
950+gen9_add_buffer_gpe_surface(VADriverContextP ctx,
951+ struct i965_gpe_context *gpe_context,
952+ struct i965_gpe_resource *gpe_buffer,
953+ int is_raw_buffer,
954+ unsigned int size,
955+ unsigned int offset,
956+ int index)
957+{
958+ struct i965_gpe_surface gpe_surface;
959+
960+ memset(&gpe_surface, 0, sizeof(gpe_surface));
961+
962+ gpe_surface.gpe_resource = gpe_buffer;
963+ gpe_surface.is_buffer = 1;
964+ gpe_surface.is_raw_buffer = !!is_raw_buffer;
965+ gpe_surface.cacheability_control = DEFAULT_MOCS;
966+ gpe_surface.size = size;
967+ gpe_surface.offset = offset;
968+
969+ gen9_gpe_context_add_surface(gpe_context, &gpe_surface, index);
970+}
971+
972+static void
973+gen9_add_buffer_2d_gpe_surface(VADriverContextP ctx,
974+ struct i965_gpe_context *gpe_context,
975+ struct i965_gpe_resource *gpe_buffer,
976+ int is_media_block_rw,
977+ unsigned int format,
978+ int index)
979+{
980+ struct i965_gpe_surface gpe_surface;
981+
982+ memset(&gpe_surface, 0, sizeof(gpe_surface));
983+
984+ gpe_surface.gpe_resource = gpe_buffer;
985+ gpe_surface.is_2d_surface = 1;
986+ gpe_surface.is_media_block_rw = !!is_media_block_rw;
987+ gpe_surface.cacheability_control = DEFAULT_MOCS;
988+ gpe_surface.format = format;
989+
990+ gen9_gpe_context_add_surface(gpe_context, &gpe_surface, index);
991+}
992+
993+static void
994+gen9_add_dri_buffer_gpe_surface(VADriverContextP ctx,
995+ struct i965_gpe_context *gpe_context,
996+ dri_bo *bo,
997+ int is_raw_buffer,
998+ unsigned int size,
999+ unsigned int offset,
1000+ int index)
1001+{
1002+ struct i965_gpe_resource gpe_resource;
1003+
1004+ i965_dri_object_to_buffer_gpe_resource(&gpe_resource, bo);
1005+ gen9_add_buffer_gpe_surface(ctx,
1006+ gpe_context,
1007+ &gpe_resource,
1008+ is_raw_buffer,
1009+ size,
1010+ offset,
1011+ index);
1012+
1013+ i965_free_gpe_resource(&gpe_resource);
1014+}
1015+
1016+/*
1017+static void
1018+gen9_add_dri_buffer_2d_gpe_surface(VADriverContextP ctx,
1019+ struct i965_gpe_context *gpe_context,
1020+ dri_bo *bo,
1021+ unsigned int width,
1022+ unsigned int height,
1023+ unsigned int pitch,
1024+ int is_media_block_rw,
1025+ unsigned int format,
1026+ int index)
1027+{
1028+ struct i965_gpe_resource gpe_resource;
1029+
1030+ i965_gpe_dri_object_to_2d_gpe_resource(&gpe_resource, bo, width, height, pitch);
1031+ gen9_add_buffer_2d_gpe_surface(ctx,
1032+ gpe_context,
1033+ &gpe_resource,
1034+ is_media_block_rw,
1035+ format,
1036+ index);
1037+
1038+ i965_free_gpe_resource(&gpe_resource);
1039+}
1040+*/
1041+
1042+static void
1043+gen9_run_kernel_media_object(VADriverContextP ctx,
1044+ struct intel_encoder_context *encoder_context,
1045+ struct i965_gpe_context *gpe_context,
1046+ int media_function,
1047+ struct gpe_media_object_parameter *param)
1048+{
1049+ struct intel_batchbuffer *batch = encoder_context->base.batch;
1050+ struct vp9_encode_status_buffer_internal *status_buffer;
1051+ struct gen9_vp9_state *vp9_state;
1052+ struct gpe_mi_store_data_imm_parameter mi_store_data_imm;
1053+
1054+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
1055+ if (!vp9_state || !batch)
1056+ return;
1057+
1058+ intel_batchbuffer_start_atomic(batch, 0x1000);
1059+
1060+ status_buffer = &(vp9_state->status_buffer);
1061+ memset(&mi_store_data_imm, 0, sizeof(mi_store_data_imm));
1062+ mi_store_data_imm.bo = status_buffer->bo;
1063+ mi_store_data_imm.offset = status_buffer->media_index_offset;
1064+ mi_store_data_imm.dw0 = media_function;
1065+ gen9_gpe_mi_store_data_imm(ctx, batch, &mi_store_data_imm);
1066+
1067+ intel_batchbuffer_emit_mi_flush(batch);
1068+ gen9_gpe_pipeline_setup(ctx, gpe_context, batch);
1069+ gen8_gpe_media_object(ctx, gpe_context, batch, param);
1070+ gen8_gpe_media_state_flush(ctx, gpe_context, batch);
1071+
1072+ gen9_gpe_pipeline_end(ctx, gpe_context, batch);
1073+
1074+ intel_batchbuffer_end_atomic(batch);
1075+
1076+ intel_batchbuffer_flush(batch);
1077+}
1078+
1079+static void
1080+gen9_run_kernel_media_object_walker(VADriverContextP ctx,
1081+ struct intel_encoder_context *encoder_context,
1082+ struct i965_gpe_context *gpe_context,
1083+ int media_function,
1084+ struct gpe_media_object_walker_parameter *param)
1085+{
1086+ struct intel_batchbuffer *batch = encoder_context->base.batch;
1087+ struct vp9_encode_status_buffer_internal *status_buffer;
1088+ struct gen9_vp9_state *vp9_state;
1089+ struct gpe_mi_store_data_imm_parameter mi_store_data_imm;
1090+
1091+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
1092+ if (!vp9_state || !batch)
1093+ return;
1094+
1095+ intel_batchbuffer_start_atomic(batch, 0x1000);
1096+
1097+ intel_batchbuffer_emit_mi_flush(batch);
1098+
1099+ status_buffer = &(vp9_state->status_buffer);
1100+ memset(&mi_store_data_imm, 0, sizeof(mi_store_data_imm));
1101+ mi_store_data_imm.bo = status_buffer->bo;
1102+ mi_store_data_imm.offset = status_buffer->media_index_offset;
1103+ mi_store_data_imm.dw0 = media_function;
1104+ gen9_gpe_mi_store_data_imm(ctx, batch, &mi_store_data_imm);
1105+
1106+ gen9_gpe_pipeline_setup(ctx, gpe_context, batch);
1107+ gen9_gpe_media_object_walker(ctx, gpe_context, batch, param);
1108+ gen8_gpe_media_state_flush(ctx, gpe_context, batch);
1109+
1110+ gen9_gpe_pipeline_end(ctx, gpe_context, batch);
1111+
1112+ intel_batchbuffer_end_atomic(batch);
1113+
1114+ intel_batchbuffer_flush(batch);
1115+}
1116+
1117+static
1118+void gen9_vp9_set_curbe_brc(VADriverContextP ctx,
1119+ struct encode_state *encode_state,
1120+ struct i965_gpe_context *gpe_context,
1121+ struct intel_encoder_context *encoder_context,
1122+ struct gen9_vp9_brc_curbe_param *param)
1123+{
1124+ VAEncSequenceParameterBufferVP9 *seq_param;
1125+ VAEncPictureParameterBufferVP9 *pic_param;
1126+ VAEncMiscParameterTypeVP9PerSegmantParam *segment_param;
1127+ vp9_brc_curbe_data *cmd;
1128+ double dbps_ratio, dInputBitsPerFrame;
1129+ struct gen9_vp9_state *vp9_state;
1130+
1131+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
1132+
1133+ pic_param = param->ppic_param;
1134+ seq_param = param->pseq_param;
1135+ segment_param = param->psegment_param;
1136+
1137+ cmd = gen8p_gpe_context_map_curbe(gpe_context);
1138+ memset(cmd, 0, sizeof(vp9_brc_curbe_data));
1139+
1140+ if (!vp9_state->dys_enabled)
1141+ {
1142+ cmd->dw0.frame_width = pic_param->frame_width_src;
1143+ cmd->dw0.frame_height = pic_param->frame_height_src;
1144+ }
1145+ else
1146+ {
1147+ cmd->dw0.frame_width = pic_param->frame_width_dst;
1148+ cmd->dw0.frame_height = pic_param->frame_height_dst;
1149+ }
1150+
1151+ cmd->dw1.frame_type = vp9_state->picture_coding_type;
1152+ cmd->dw1.segmentation_enable = 0;
1153+ cmd->dw1.ref_frame_flags = vp9_state->ref_frame_flag;
1154+ cmd->dw1.num_tlevels = 1;
1155+
1156+ switch(param->media_state_type)
1157+ {
1158+ case VP9_MEDIA_STATE_BRC_INIT_RESET:
1159+ {
1160+ cmd->dw3.max_level_ratiot0 = 0;
1161+ cmd->dw3.max_level_ratiot1 = 0;
1162+ cmd->dw3.max_level_ratiot2 = 0;
1163+ cmd->dw3.max_level_ratiot3 = 0;
1164+
1165+ cmd->dw4.profile_level_max_frame = seq_param->max_frame_width *
1166+ seq_param->max_frame_height;
1167+ cmd->dw5.init_buf_fullness = vp9_state->init_vbv_buffer_fullness_in_bit;
1168+ cmd->dw6.buf_size = vp9_state->vbv_buffer_size_in_bit;
1169+ cmd->dw7.target_bit_rate = (vp9_state->target_bit_rate + VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
1170+ VP9_BRC_KBPS;
1171+ cmd->dw8.max_bit_rate = (vp9_state->max_bit_rate + VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
1172+ VP9_BRC_KBPS;
1173+ cmd->dw9.min_bit_rate = (vp9_state->min_bit_rate + VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
1174+ VP9_BRC_KBPS;
1175+ cmd->dw10.frame_ratem = vp9_state->frame_rate;
1176+ cmd->dw11.frame_rated = 1;
1177+
1178+ cmd->dw14.avbr_accuracy = 30;
1179+ cmd->dw14.avbr_convergence = 150;
1180+
1181+ if (encoder_context->rate_control_mode == VA_RC_CBR)
1182+ {
1183+ cmd->dw12.brc_flag = BRC_KERNEL_CBR;
1184+ cmd->dw8.max_bit_rate = cmd->dw7.target_bit_rate;
1185+ cmd->dw9.min_bit_rate = 0;
1186+ }
1187+ else if (encoder_context->rate_control_mode == VA_RC_VBR)
1188+ {
1189+ cmd->dw12.brc_flag = BRC_KERNEL_VBR;
1190+ }
1191+ else
1192+ {
1193+ cmd->dw12.brc_flag = BRC_KERNEL_CQL;
1194+ cmd->dw16.cq_level = 30;
1195+ }
1196+ cmd->dw12.gopp = seq_param->intra_period - 1;
1197+
1198+ cmd->dw13.init_frame_width = pic_param->frame_width_src;
1199+ cmd->dw13.init_frame_height = pic_param->frame_height_src;
1200+
1201+ cmd->dw15.min_qp = 0;
1202+ cmd->dw15.max_qp = 255;
1203+
1204+ cmd->dw16.cq_level = 30;
1205+
1206+ cmd->dw17.enable_dynamic_scaling = vp9_state->dys_in_use;
1207+ cmd->dw17.brc_overshoot_cbr_pct = 150;
1208+
1209+ dInputBitsPerFrame = (double)(cmd->dw8.max_bit_rate) / (vp9_state->frame_rate);
1210+ dbps_ratio = dInputBitsPerFrame / ((double)(vp9_state->vbv_buffer_size_in_bit) / 30);
1211+ if (dbps_ratio < 0.1)
1212+ dbps_ratio = 0.1;
1213+ if (dbps_ratio > 3.5)
1214+ dbps_ratio = 3.5;
1215+
1216+ *param->pbrc_init_reset_buf_size_in_bits = cmd->dw6.buf_size;
1217+ *param->pbrc_init_reset_input_bits_per_frame = dInputBitsPerFrame;
1218+
1219+ cmd->dw18.pframe_deviation_threshold0 = (uint32_t)(-50 * pow(0.90, dbps_ratio));
1220+ cmd->dw18.pframe_deviation_threshold1 = (uint32_t)(-50 * pow(0.66, dbps_ratio));
1221+ cmd->dw18.pframe_deviation_threshold2 = (uint32_t)(-50 * pow(0.46, dbps_ratio));
1222+ cmd->dw18.pframe_deviation_threshold3 = (uint32_t)(-50 * pow(0.3, dbps_ratio));
1223+ cmd->dw19.pframe_deviation_threshold4 = (uint32_t)(50 * pow(0.3, dbps_ratio));
1224+ cmd->dw19.pframe_deviation_threshold5 = (uint32_t)(50 * pow(0.46, dbps_ratio));
1225+ cmd->dw19.pframe_deviation_threshold6 = (uint32_t)(50 * pow(0.7, dbps_ratio));
1226+ cmd->dw19.pframe_deviation_threshold7 = (uint32_t)(50 * pow(0.9, dbps_ratio));
1227+
1228+ cmd->dw20.vbr_deviation_threshold0 = (uint32_t)(-50 * pow(0.9, dbps_ratio));
1229+ cmd->dw20.vbr_deviation_threshold1 = (uint32_t)(-50 * pow(0.7, dbps_ratio));
1230+ cmd->dw20.vbr_deviation_threshold2 = (uint32_t)(-50 * pow(0.5, dbps_ratio));
1231+ cmd->dw20.vbr_deviation_threshold3 = (uint32_t)(-50 * pow(0.3, dbps_ratio));
1232+ cmd->dw21.vbr_deviation_threshold4 = (uint32_t)(100 * pow(0.4, dbps_ratio));
1233+ cmd->dw21.vbr_deviation_threshold5 = (uint32_t)(100 * pow(0.5, dbps_ratio));
1234+ cmd->dw21.vbr_deviation_threshold6 = (uint32_t)(100 * pow(0.75, dbps_ratio));
1235+ cmd->dw21.vbr_deviation_threshold7 = (uint32_t)(100 * pow(0.9, dbps_ratio));
1236+
1237+ cmd->dw22.kframe_deviation_threshold0 = (uint32_t)(-50 * pow(0.8, dbps_ratio));
1238+ cmd->dw22.kframe_deviation_threshold1 = (uint32_t)(-50 * pow(0.6, dbps_ratio));
1239+ cmd->dw22.kframe_deviation_threshold2 = (uint32_t)(-50 * pow(0.34, dbps_ratio));
1240+ cmd->dw22.kframe_deviation_threshold3 = (uint32_t)(-50 * pow(0.2, dbps_ratio));
1241+ cmd->dw23.kframe_deviation_threshold4 = (uint32_t)(50 * pow(0.2, dbps_ratio));
1242+ cmd->dw23.kframe_deviation_threshold5 = (uint32_t)(50 * pow(0.4, dbps_ratio));
1243+ cmd->dw23.kframe_deviation_threshold6 = (uint32_t)(50 * pow(0.66, dbps_ratio));
1244+ cmd->dw23.kframe_deviation_threshold7 = (uint32_t)(50 * pow(0.9, dbps_ratio));
1245+
1246+ break;
1247+ }
1248+ case VP9_MEDIA_STATE_BRC_UPDATE:
1249+ {
1250+ cmd->dw15.min_qp = 0;
1251+ cmd->dw15.max_qp = 255;
1252+
1253+ cmd->dw25.frame_number = param->frame_number;
1254+
1255+ // Used in dynamic scaling. set to zero for now
1256+ cmd->dw27.hrd_buffer_fullness_upper_limit = 0;
1257+ cmd->dw28.hrd_buffer_fullness_lower_limit = 0;
1258+
1259+ if (pic_param->pic_flags.bits.segmentation_enabled) {
1260+ cmd->dw32.seg_delta_qp0 = segment_param->seg_data[0].segment_qindex_delta;
1261+ cmd->dw32.seg_delta_qp1 = segment_param->seg_data[1].segment_qindex_delta;
1262+ cmd->dw32.seg_delta_qp2 = segment_param->seg_data[2].segment_qindex_delta;
1263+ cmd->dw32.seg_delta_qp3 = segment_param->seg_data[3].segment_qindex_delta;
1264+
1265+ cmd->dw33.seg_delta_qp4 = segment_param->seg_data[4].segment_qindex_delta;
1266+ cmd->dw33.seg_delta_qp5 = segment_param->seg_data[5].segment_qindex_delta;
1267+ cmd->dw33.seg_delta_qp6 = segment_param->seg_data[6].segment_qindex_delta;
1268+ cmd->dw33.seg_delta_qp7 = segment_param->seg_data[7].segment_qindex_delta;
1269+ }
1270+
1271+ //cmd->dw34.temporal_id = pPicParams->temporal_idi;
1272+ cmd->dw34.temporal_id = 0;
1273+ cmd->dw34.multi_ref_qp_check = param->multi_ref_qp_check;
1274+
1275+ cmd->dw35.max_num_pak_passes = param->brc_num_pak_passes;
1276+ cmd->dw35.sync_async = 0;
1277+ cmd->dw35.mbrc = param->mbbrc_enabled;
1278+ if (*param->pbrc_init_current_target_buf_full_in_bits >
1279+ ((double)(*param->pbrc_init_reset_buf_size_in_bits))) {
1280+ *param->pbrc_init_current_target_buf_full_in_bits -=
1281+ (double)(*param->pbrc_init_reset_buf_size_in_bits);
1282+ cmd->dw35.overflow = 1;
1283+ }
1284+ else
1285+ cmd->dw35.overflow = 0;
1286+
1287+ cmd->dw24.target_size = (uint32_t)(*param->pbrc_init_current_target_buf_full_in_bits);
1288+
1289+ cmd->dw36.segmentation = pic_param->pic_flags.bits.segmentation_enabled;
1290+
1291+ *param->pbrc_init_current_target_buf_full_in_bits += *param->pbrc_init_reset_input_bits_per_frame;
1292+
1293+ cmd->dw38.qdelta_ydc = pic_param->luma_dc_qindex_delta;
1294+ cmd->dw38.qdelta_uvdc = pic_param->chroma_dc_qindex_delta;
1295+ cmd->dw38.qdelta_uvac = pic_param->chroma_ac_qindex_delta;
1296+
1297+ break;
1298+ }
1299+ case VP9_MEDIA_STATE_ENC_I_FRAME_DIST:
1300+ cmd->dw2.intra_mode_disable = 0;
1301+ break;
1302+ default:
1303+ break;
1304+ }
1305+
1306+ cmd->dw48.brc_y4x_input_bti = VP9_BTI_BRC_SRCY4X_G9;
1307+ cmd->dw49.brc_vme_coarse_intra_input_bti = VP9_BTI_BRC_VME_COARSE_INTRA_G9;
1308+ cmd->dw50.brc_history_buffer_bti = VP9_BTI_BRC_HISTORY_G9;
1309+ cmd->dw51.brc_const_data_input_bti = VP9_BTI_BRC_CONSTANT_DATA_G9;
1310+ cmd->dw52.brc_distortion_bti = VP9_BTI_BRC_DISTORTION_G9;
1311+ cmd->dw53.brc_mmdk_pak_output_bti = VP9_BTI_BRC_MMDK_PAK_OUTPUT_G9;
1312+ cmd->dw54.brc_enccurbe_input_bti = VP9_BTI_BRC_MBENC_CURBE_INPUT_G9;
1313+ cmd->dw55.brc_enccurbe_output_bti = VP9_BTI_BRC_MBENC_CURBE_OUTPUT_G9;
1314+ cmd->dw56.brc_pic_state_input_bti = VP9_BTI_BRC_PIC_STATE_INPUT_G9;
1315+ cmd->dw57.brc_pic_state_output_bti = VP9_BTI_BRC_PIC_STATE_OUTPUT_G9;
1316+ cmd->dw58.brc_seg_state_input_bti = VP9_BTI_BRC_SEGMENT_STATE_INPUT_G9;
1317+ cmd->dw59.brc_seg_state_output_bti = VP9_BTI_BRC_SEGMENT_STATE_OUTPUT_G9;
1318+ cmd->dw60.brc_bitstream_size_data_bti = VP9_BTI_BRC_BITSTREAM_SIZE_G9;
1319+ cmd->dw61.brc_hfw_data_output_bti = VP9_BTI_BRC_HFW_DATA_G9;
1320+
1321+ gen8p_gpe_context_unmap_curbe(gpe_context);
1322+ return;
1323+}
1324+
1325+static void
1326+gen9_brc_init_reset_add_surfaces_vp9(VADriverContextP ctx,
1327+ struct encode_state *encode_state,
1328+ struct intel_encoder_context *encoder_context,
1329+ struct i965_gpe_context *gpe_context)
1330+{
1331+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
1332+
1333+ gen9_add_buffer_gpe_surface(ctx,
1334+ gpe_context,
1335+ &vme_context->res_brc_history_buffer,
1336+ 0,
1337+ vme_context->res_brc_history_buffer.size,
1338+ 0,
1339+ VP9_BTI_BRC_HISTORY_G9);
1340+
1341+ gen9_add_buffer_2d_gpe_surface(ctx,
1342+ gpe_context,
1343+ &vme_context->s4x_memv_distortion_buffer,
1344+ 1,
1345+ I965_SURFACEFORMAT_R8_UNORM,
1346+ VP9_BTI_BRC_DISTORTION_G9);
1347+}
1348+
1349+/* The function related with BRC */
1350+static VAStatus
1351+gen9_vp9_brc_init_reset_kernel(VADriverContextP ctx,
1352+ struct encode_state *encode_state,
1353+ struct intel_encoder_context *encoder_context)
1354+{
1355+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
1356+ struct vp9_brc_context *brc_context = &vme_context->brc_context;
1357+ struct gpe_media_object_parameter media_object_param;
1358+ struct i965_gpe_context *gpe_context;
1359+ int gpe_index = VP9_BRC_INIT;
1360+ int media_function = VP9_MEDIA_STATE_BRC_INIT_RESET;
1361+ struct gen9_vp9_brc_curbe_param brc_initreset_curbe;
1362+ VAEncPictureParameterBufferVP9 *pic_param;
1363+ struct gen9_vp9_state *vp9_state;
1364+
1365+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
1366+
1367+ if (!vp9_state || !vp9_state->pic_param)
1368+ return VA_STATUS_ERROR_INVALID_PARAMETER;
1369+
1370+ pic_param = vp9_state->pic_param;
1371+
1372+ if (vp9_state->brc_inited)
1373+ gpe_index = VP9_BRC_RESET;
1374+
1375+ gpe_context = &brc_context->gpe_contexts[gpe_index];
1376+
1377+ gen8_gpe_context_init(ctx, gpe_context);
1378+ gen9_gpe_reset_binding_table(ctx, gpe_context);
1379+
1380+ brc_initreset_curbe.media_state_type = media_function;
1381+ brc_initreset_curbe.curr_frame = pic_param->reconstructed_frame;
1382+ brc_initreset_curbe.ppic_param = vp9_state->pic_param;
1383+ brc_initreset_curbe.pseq_param = vp9_state->seq_param;
1384+ brc_initreset_curbe.psegment_param = vp9_state->segment_param;
1385+ brc_initreset_curbe.frame_width = vp9_state->frame_width;
1386+ brc_initreset_curbe.frame_height = vp9_state->frame_height;
1387+ brc_initreset_curbe.pbrc_init_current_target_buf_full_in_bits =
1388+ &vp9_state->brc_init_current_target_buf_full_in_bits;
1389+ brc_initreset_curbe.pbrc_init_reset_buf_size_in_bits =
1390+ &vp9_state->brc_init_reset_buf_size_in_bits;
1391+ brc_initreset_curbe.pbrc_init_reset_input_bits_per_frame =
1392+ &vp9_state->brc_init_reset_input_bits_per_frame;
1393+ brc_initreset_curbe.picture_coding_type = vp9_state->picture_coding_type;
1394+ brc_initreset_curbe.initbrc = !vp9_state->brc_inited;
1395+ brc_initreset_curbe.mbbrc_enabled = 0;
1396+ brc_initreset_curbe.ref_frame_flag = vp9_state->ref_frame_flag;
1397+ brc_initreset_curbe.frame_rate = vp9_state->frame_rate;
1398+
1399+ vme_context->pfn_set_curbe_brc(ctx, encode_state,
1400+ gpe_context,
1401+ encoder_context,
1402+ &brc_initreset_curbe);
1403+
1404+ gen9_brc_init_reset_add_surfaces_vp9(ctx, encode_state, encoder_context, gpe_context);
1405+ gen8_gpe_setup_interface_data(ctx, gpe_context);
1406+
1407+ memset(&media_object_param, 0, sizeof(media_object_param));
1408+ gen9_run_kernel_media_object(ctx, encoder_context, gpe_context, media_function, &media_object_param);
1409+
1410+ return VA_STATUS_SUCCESS;
1411+}
1412+
1413+static void
1414+gen9_brc_intra_dist_add_surfaces_vp9(VADriverContextP ctx,
1415+ struct encode_state *encode_state,
1416+ struct intel_encoder_context *encoder_context,
1417+ struct i965_gpe_context *gpe_context)
1418+{
1419+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
1420+
1421+ struct object_surface *obj_surface;
1422+ struct gen9_surface_vp9 *vp9_priv_surface;
1423+
1424+ /* sScaled4xSurface surface */
1425+ obj_surface = encode_state->reconstructed_object;
1426+
1427+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
1428+
1429+ obj_surface = vp9_priv_surface->scaled_4x_surface_obj;
1430+ gen9_add_2d_gpe_surface(ctx, gpe_context,
1431+ obj_surface,
1432+ 0, 1,
1433+ I965_SURFACEFORMAT_R8_UNORM,
1434+ VP9_BTI_BRC_SRCY4X_G9
1435+ );
1436+
1437+ gen9_add_adv_gpe_surface(ctx, gpe_context,
1438+ obj_surface,
1439+ VP9_BTI_BRC_VME_COARSE_INTRA_G9);
1440+
1441+ gen9_add_buffer_2d_gpe_surface(ctx,
1442+ gpe_context,
1443+ &vme_context->s4x_memv_distortion_buffer,
1444+ 1,
1445+ I965_SURFACEFORMAT_R8_UNORM,
1446+ VP9_BTI_BRC_DISTORTION_G9);
1447+
1448+ return;
1449+}
1450+
1451+/* The function related with BRC */
1452+static VAStatus
1453+gen9_vp9_brc_intra_dist_kernel(VADriverContextP ctx,
1454+ struct encode_state *encode_state,
1455+ struct intel_encoder_context *encoder_context)
1456+{
1457+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
1458+ struct vp9_brc_context *brc_context = &vme_context->brc_context;
1459+ struct i965_gpe_context *gpe_context;
1460+ int gpe_index = VP9_BRC_INTRA_DIST;
1461+ int media_function = VP9_MEDIA_STATE_ENC_I_FRAME_DIST;
1462+ struct gen9_vp9_brc_curbe_param brc_intra_dist_curbe;
1463+ VAEncPictureParameterBufferVP9 *pic_param;
1464+ struct gen9_vp9_state *vp9_state;
1465+ struct gpe_media_object_walker_parameter media_object_walker_param;
1466+ struct vp9_encoder_kernel_walker_parameter kernel_walker_param;
1467+
1468+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
1469+
1470+ if (!vp9_state || !vp9_state->pic_param)
1471+ return VA_STATUS_ERROR_INVALID_PARAMETER;
1472+
1473+ pic_param = vp9_state->pic_param;
1474+
1475+ gpe_context = &brc_context->gpe_contexts[gpe_index];
1476+
1477+ gen8_gpe_context_init(ctx, gpe_context);
1478+ gen9_gpe_reset_binding_table(ctx, gpe_context);
1479+
1480+ brc_intra_dist_curbe.media_state_type = media_function;
1481+ brc_intra_dist_curbe.curr_frame = pic_param->reconstructed_frame;
1482+ brc_intra_dist_curbe.ppic_param = vp9_state->pic_param;
1483+ brc_intra_dist_curbe.pseq_param = vp9_state->seq_param;
1484+ brc_intra_dist_curbe.psegment_param = vp9_state->segment_param;
1485+ brc_intra_dist_curbe.frame_width = vp9_state->frame_width;
1486+ brc_intra_dist_curbe.frame_height = vp9_state->frame_height;
1487+ brc_intra_dist_curbe.pbrc_init_current_target_buf_full_in_bits =
1488+ &vp9_state->brc_init_current_target_buf_full_in_bits;
1489+ brc_intra_dist_curbe.pbrc_init_reset_buf_size_in_bits =
1490+ &vp9_state->brc_init_reset_buf_size_in_bits;
1491+ brc_intra_dist_curbe.pbrc_init_reset_input_bits_per_frame =
1492+ &vp9_state->brc_init_reset_input_bits_per_frame;
1493+ brc_intra_dist_curbe.picture_coding_type = vp9_state->picture_coding_type;
1494+ brc_intra_dist_curbe.initbrc = !vp9_state->brc_inited;
1495+ brc_intra_dist_curbe.mbbrc_enabled = 0;
1496+ brc_intra_dist_curbe.ref_frame_flag = vp9_state->ref_frame_flag;
1497+ brc_intra_dist_curbe.frame_rate = vp9_state->frame_rate;
1498+
1499+ vme_context->pfn_set_curbe_brc(ctx, encode_state,
1500+ gpe_context,
1501+ encoder_context,
1502+ &brc_intra_dist_curbe);
1503+
1504+ /* zero distortion buffer */
1505+ i965_zero_gpe_resource(&vme_context->s4x_memv_distortion_buffer);
1506+
1507+ gen9_brc_intra_dist_add_surfaces_vp9(ctx, encode_state, encoder_context, gpe_context);
1508+ gen8_gpe_setup_interface_data(ctx, gpe_context);
1509+
1510+ memset(&kernel_walker_param, 0, sizeof(kernel_walker_param));
1511+ kernel_walker_param.resolution_x = vme_context->downscaled_width_in_mb4x;
1512+ kernel_walker_param.resolution_y = vme_context->downscaled_height_in_mb4x;
1513+ kernel_walker_param.no_dependency = 1;
1514+
1515+ gen9_init_media_object_walker_parameter(encoder_context, &kernel_walker_param, &media_object_walker_param);
1516+
1517+ gen9_run_kernel_media_object_walker(ctx, encoder_context,
1518+ gpe_context,
1519+ media_function,
1520+ &media_object_walker_param);
1521+
1522+ return VA_STATUS_SUCCESS;
1523+}
1524+
1525+static void
1526+intel_vp9enc_construct_picstate_batchbuf(VADriverContextP ctx,
1527+ struct encode_state *encode_state,
1528+ struct intel_encoder_context *encoder_context,
1529+ struct i965_gpe_resource *gpe_resource)
1530+{
1531+ struct gen9_vp9_state *vp9_state;
1532+ VAEncPictureParameterBufferVP9 *pic_param;
1533+ int frame_width_minus1, frame_height_minus1;
1534+ int is_lossless = 0;
1535+ int is_intra_only = 0;
1536+ unsigned int last_frame_type;
1537+ unsigned int ref_flags;
1538+ unsigned int use_prev_frame_mvs, adapt_flag;
1539+ struct gen9_surface_vp9 *vp9_surface = NULL;
1540+ struct object_surface *obj_surface = NULL;
1541+ uint32_t scale_h = 0;
1542+ uint32_t scale_w = 0;
1543+
1544+ char *pdata;
1545+ int i, j;
1546+ unsigned int *cmd_ptr, cmd_value, tmp;
1547+
1548+ pdata = i965_map_gpe_resource(gpe_resource);
1549+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
1550+
1551+ if (!vp9_state || !vp9_state->pic_param)
1552+ return;
1553+
1554+ pic_param = vp9_state->pic_param;
1555+ frame_width_minus1 = ALIGN(pic_param->frame_width_dst, 8) - 1;
1556+ frame_height_minus1 = ALIGN(pic_param->frame_height_dst, 8) - 1;
1557+ if ((pic_param->luma_ac_qindex == 0) &&
1558+ (pic_param->luma_dc_qindex_delta == 0) &&
1559+ (pic_param->chroma_ac_qindex_delta == 0) &&
1560+ (pic_param->chroma_dc_qindex_delta == 0))
1561+ is_lossless = 1;
1562+
1563+ if (pic_param->pic_flags.bits.frame_type)
1564+ is_intra_only = pic_param->pic_flags.bits.intra_only;
1565+
1566+ last_frame_type = vp9_state->vp9_last_frame.frame_type;
1567+
1568+ use_prev_frame_mvs = 0;
1569+ if (pic_param->pic_flags.bits.frame_type == HCP_VP9_KEY_FRAME) {
1570+ last_frame_type = 0;
1571+ ref_flags = 0;
1572+ } else {
1573+ ref_flags = ((pic_param->ref_flags.bits.ref_arf_sign_bias << 9) |
1574+ (pic_param->ref_flags.bits.ref_gf_sign_bias << 8) |
1575+ (pic_param->ref_flags.bits.ref_last_sign_bias << 7)
1576+ );
1577+ if (!pic_param->pic_flags.bits.error_resilient_mode &&
1578+ (pic_param->frame_width_dst == vp9_state->vp9_last_frame.frame_width) &&
1579+ (pic_param->frame_height_dst == vp9_state->vp9_last_frame.frame_height) &&
1580+ !pic_param->pic_flags.bits.intra_only &&
1581+ vp9_state->vp9_last_frame.show_frame &&
1582+ ((vp9_state->vp9_last_frame.frame_type == HCP_VP9_INTER_FRAME) &&
1583+ !vp9_state->vp9_last_frame.intra_only)
1584+ )
1585+ use_prev_frame_mvs = 1;
1586+ }
1587+ adapt_flag = 0;
1588+ if (!pic_param->pic_flags.bits.error_resilient_mode &&
1589+ !pic_param->pic_flags.bits.frame_parallel_decoding_mode)
1590+ adapt_flag = 1;
1591+
1592+ for (i = 0; i < 4; i++) {
1593+ uint32_t non_first_pass;
1594+ non_first_pass = 1;
1595+ if (i == 0)
1596+ non_first_pass = 0;
1597+
1598+ cmd_ptr =(unsigned int *)(pdata + i * VP9_PIC_STATE_BUFFER_SIZE);
1599+
1600+ *cmd_ptr++ = (HCP_VP9_PIC_STATE | (33 - 2));
1601+ *cmd_ptr++ = (frame_height_minus1 << 16 |
1602+ frame_width_minus1);
1603+ /* dw2 */
1604+ *cmd_ptr++ = ( 0 << 31 | /* disable segment_in */
1605+ 0 << 30 | /* disable segment_out */
1606+ is_lossless << 29 | /* loseless */
1607+ (pic_param->pic_flags.bits.segmentation_enabled && pic_param->pic_flags.bits.segmentation_temporal_update) << 28 | /* temporal update */
1608+ (pic_param->pic_flags.bits.segmentation_enabled && pic_param->pic_flags.bits.segmentation_update_map) << 27 | /* temporal update */
1609+ (pic_param->pic_flags.bits.segmentation_enabled << 26) |
1610+ (pic_param->sharpness_level << 23) |
1611+ (pic_param->filter_level << 17) |
1612+ (pic_param->pic_flags.bits.frame_parallel_decoding_mode << 16) |
1613+ (pic_param->pic_flags.bits.error_resilient_mode << 15) |
1614+ (pic_param->pic_flags.bits.refresh_frame_context << 14) |
1615+ (last_frame_type << 13) |
1616+ (vp9_state->tx_mode == TX_MODE_SELECT) << 12 |
1617+ (pic_param->pic_flags.bits.comp_prediction_mode == REFERENCE_MODE_SELECT) << 11 |
1618+ (use_prev_frame_mvs) << 10 |
1619+ ref_flags |
1620+ (pic_param->pic_flags.bits.mcomp_filter_type << 4) |
1621+ (pic_param->pic_flags.bits.allow_high_precision_mv << 3) |
1622+ (is_intra_only << 2) |
1623+ (adapt_flag << 1) |
1624+ (pic_param->pic_flags.bits.frame_type) << 0);
1625+
1626+ *cmd_ptr++ =((0 << 28) | /* VP9Profile0 */
1627+ (0 << 24) | /* 8-bit depth */
1628+ (0 << 22) | /* only 420 format */
1629+ (0 << 0) | /* sse statistics */
1630+ (pic_param->log2_tile_rows << 8) |
1631+ (pic_param->log2_tile_columns << 0));
1632+
1633+ /* dw4..6 */
1634+ if (pic_param->pic_flags.bits.frame_type &&
1635+ !pic_param->pic_flags.bits.intra_only) {
1636+ for (j = 0; j < 3; j++) {
1637+ obj_surface = encode_state->reference_objects[j];
1638+ scale_w = 0;
1639+ scale_h = 0;
1640+ if (obj_surface && obj_surface->private_data) {
1641+ vp9_surface = obj_surface->private_data;
1642+ scale_w = (vp9_surface->frame_width << 14) / pic_param->frame_width_dst;
1643+ scale_h = (vp9_surface->frame_height << 14) / pic_param->frame_height_dst;
1644+ *cmd_ptr++ = (scale_w << 16 |
1645+ scale_h);
1646+ } else
1647+ *cmd_ptr++ = 0;
1648+ }
1649+ } else {
1650+ *cmd_ptr++ = 0;
1651+ *cmd_ptr++ = 0;
1652+ *cmd_ptr++ = 0;
1653+ }
1654+ /* dw7..9 */
1655+ for(j = 0; j < 3; j++) {
1656+ obj_surface = encode_state->reference_objects[j];
1657+ vp9_surface = NULL;
1658+
1659+ if (obj_surface && obj_surface->private_data) {
1660+ vp9_surface = obj_surface->private_data;
1661+ *cmd_ptr++ = (vp9_surface->frame_height - 1) << 16 |
1662+ (vp9_surface->frame_width - 1);
1663+ } else
1664+ *cmd_ptr++ = 0;
1665+ }
1666+ /* dw10 */
1667+ *cmd_ptr++ = 0;
1668+ /* dw11 */
1669+ *cmd_ptr++ = (1 << 1);
1670+ *cmd_ptr++ = 0;
1671+
1672+ /* dw13 */
1673+ *cmd_ptr++ = ((1 << 25) | /* header insertation for VP9 */
1674+ (0 << 24) | /* tail insertation */
1675+ (pic_param->luma_ac_qindex << 16) |
1676+ 0 /* compressed header bin count */);
1677+
1678+ /* dw14 */
1679+ tmp = intel_convert_sign_mag(pic_param->luma_dc_qindex_delta, 5);
1680+ cmd_value = (tmp << 16);
1681+ tmp = intel_convert_sign_mag(pic_param->chroma_dc_qindex_delta, 5);
1682+ cmd_value |= (tmp << 8);
1683+ tmp = intel_convert_sign_mag(pic_param->chroma_ac_qindex_delta, 5);
1684+ cmd_value |= tmp;
1685+ *cmd_ptr++ = cmd_value;
1686+
1687+ tmp = intel_convert_sign_mag(pic_param->ref_lf_delta[0], 7);
1688+ cmd_value = tmp;
1689+ tmp = intel_convert_sign_mag(pic_param->ref_lf_delta[1], 7);
1690+ cmd_value |= (tmp << 8);
1691+ tmp = intel_convert_sign_mag(pic_param->ref_lf_delta[2], 7);
1692+ cmd_value |= (tmp << 16);
1693+ tmp = intel_convert_sign_mag(pic_param->ref_lf_delta[3], 7);
1694+ cmd_value |= (tmp << 24);
1695+ *cmd_ptr++ = cmd_value;
1696+
1697+ /* dw16 */
1698+ tmp = intel_convert_sign_mag(pic_param->mode_lf_delta[0], 7);
1699+ cmd_value = tmp;
1700+ tmp = intel_convert_sign_mag(pic_param->mode_lf_delta[1], 7);
1701+ cmd_value |= (tmp << 8);
1702+ *cmd_ptr++ = cmd_value;
1703+
1704+ /* dw17 */
1705+ *cmd_ptr++ = vp9_state->frame_header.bit_offset_ref_lf_delta |
1706+ (vp9_state->frame_header.bit_offset_mode_lf_delta << 16);
1707+ *cmd_ptr++ = vp9_state->frame_header.bit_offset_qindex |
1708+ (vp9_state->frame_header.bit_offset_lf_level << 16);
1709+
1710+ /* dw19 */
1711+ *cmd_ptr++ = (1 << 26 | (1 << 25) |
1712+ non_first_pass << 16);
1713+ /* dw20 */
1714+ *cmd_ptr++ = (1 << 31) | (256);
1715+
1716+ /* dw21 */
1717+ *cmd_ptr++ = (0 << 31) | 1;
1718+
1719+ /* dw22-dw24. Frame_delta_qindex_range */
1720+ *cmd_ptr++ = 0;
1721+ *cmd_ptr++ = 0;
1722+ *cmd_ptr++ = 0;
1723+
1724+ /* dw25-26. frame_delta_lf_range */
1725+ *cmd_ptr++ = 0;
1726+ *cmd_ptr++ = 0;
1727+
1728+ /* dw27. frame_delta_lf_min */
1729+ *cmd_ptr++ = 0;
1730+
1731+ /* dw28..30 */
1732+ *cmd_ptr++ = 0;
1733+ *cmd_ptr++ = 0;
1734+ *cmd_ptr++ = 0;
1735+
1736+ /* dw31 */
1737+ *cmd_ptr++ = (0 << 30) | 1;
1738+ /* dw32 */
1739+ *cmd_ptr++ = vp9_state->frame_header.bit_offset_first_partition_size;
1740+
1741+ *cmd_ptr++ = 0;
1742+ *cmd_ptr++ = MI_BATCH_BUFFER_END;
1743+ }
1744+
1745+ i965_unmap_gpe_resource(gpe_resource);
1746+}
1747+
1748+static void
1749+gen9_brc_update_add_surfaces_vp9(VADriverContextP ctx,
1750+ struct encode_state *encode_state,
1751+ struct intel_encoder_context *encoder_context,
1752+ struct i965_gpe_context *brc_gpe_context,
1753+ struct i965_gpe_context *mbenc_gpe_context)
1754+{
1755+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
1756+
1757+ /* 0. BRC history buffer */
1758+ gen9_add_buffer_gpe_surface(ctx,
1759+ brc_gpe_context,
1760+ &vme_context->res_brc_history_buffer,
1761+ 0,
1762+ vme_context->res_brc_history_buffer.size,
1763+ 0,
1764+ VP9_BTI_BRC_HISTORY_G9);
1765+
1766+ /* 1. Constant data buffer */
1767+ gen9_add_buffer_gpe_surface(ctx,
1768+ brc_gpe_context,
1769+ &vme_context->res_brc_const_data_buffer,
1770+ 0,
1771+ vme_context->res_brc_const_data_buffer.size,
1772+ 0,
1773+ VP9_BTI_BRC_CONSTANT_DATA_G9);
1774+
1775+ /* 2. Distortion 2D surface buffer */
1776+ gen9_add_buffer_2d_gpe_surface(ctx,
1777+ brc_gpe_context,
1778+ &vme_context->s4x_memv_distortion_buffer,
1779+ 1,
1780+ I965_SURFACEFORMAT_R8_UNORM,
1781+ VP9_BTI_BRC_DISTORTION_G9);
1782+
1783+ /* 3. pak buffer */
1784+ gen9_add_buffer_gpe_surface(ctx,
1785+ brc_gpe_context,
1786+ &vme_context->res_brc_mmdk_pak_buffer,
1787+ 0,
1788+ vme_context->res_brc_mmdk_pak_buffer.size,
1789+ 0,
1790+ VP9_BTI_BRC_MMDK_PAK_OUTPUT_G9);
1791+ /* 4. Mbenc curbe input buffer */
1792+ gen9_add_dri_buffer_gpe_surface(ctx,
1793+ brc_gpe_context,
1794+ mbenc_gpe_context->dynamic_state.bo,
1795+ 0,
1796+ ALIGN(mbenc_gpe_context->curbe_size, 64),
1797+ mbenc_gpe_context->curbe_offset,
1798+ VP9_BTI_BRC_MBENC_CURBE_INPUT_G9);
1799+ /* 5. Mbenc curbe output buffer */
1800+ gen9_add_dri_buffer_gpe_surface(ctx,
1801+ brc_gpe_context,
1802+ mbenc_gpe_context->dynamic_state.bo,
1803+ 0,
1804+ ALIGN(mbenc_gpe_context->curbe_size, 64),
1805+ mbenc_gpe_context->curbe_offset,
1806+ VP9_BTI_BRC_MBENC_CURBE_OUTPUT_G9);
1807+
1808+ /* 6. BRC_PIC_STATE read buffer */
1809+ gen9_add_buffer_gpe_surface(ctx, brc_gpe_context,
1810+ &vme_context->res_pic_state_brc_read_buffer,
1811+ 0,
1812+ vme_context->res_pic_state_brc_read_buffer.size,
1813+ 0,
1814+ VP9_BTI_BRC_PIC_STATE_INPUT_G9);
1815+
1816+ /* 7. BRC_PIC_STATE write buffer */
1817+ gen9_add_buffer_gpe_surface(ctx, brc_gpe_context,
1818+ &vme_context->res_pic_state_brc_write_hfw_read_buffer,
1819+ 0,
1820+ vme_context->res_pic_state_brc_write_hfw_read_buffer.size,
1821+ 0,
1822+ VP9_BTI_BRC_PIC_STATE_OUTPUT_G9);
1823+
1824+ /* 8. SEGMENT_STATE read buffer */
1825+ gen9_add_buffer_gpe_surface(ctx, brc_gpe_context,
1826+ &vme_context->res_seg_state_brc_read_buffer,
1827+ 0,
1828+ vme_context->res_seg_state_brc_read_buffer.size,
1829+ 0,
1830+ VP9_BTI_BRC_SEGMENT_STATE_INPUT_G9);
1831+
1832+ /* 9. SEGMENT_STATE write buffer */
1833+ gen9_add_buffer_gpe_surface(ctx, brc_gpe_context,
1834+ &vme_context->res_seg_state_brc_write_buffer,
1835+ 0,
1836+ vme_context->res_seg_state_brc_write_buffer.size,
1837+ 0,
1838+ VP9_BTI_BRC_SEGMENT_STATE_OUTPUT_G9);
1839+
1840+ /* 10. Bitstream size buffer */
1841+ gen9_add_buffer_gpe_surface(ctx, brc_gpe_context,
1842+ &vme_context->res_brc_bitstream_size_buffer,
1843+ 0,
1844+ vme_context->res_brc_bitstream_size_buffer.size,
1845+ 0,
1846+ VP9_BTI_BRC_BITSTREAM_SIZE_G9);
1847+
1848+ gen9_add_buffer_gpe_surface(ctx, brc_gpe_context,
1849+ &vme_context->res_brc_hfw_data_buffer,
1850+ 0,
1851+ vme_context->res_brc_hfw_data_buffer.size,
1852+ 0,
1853+ VP9_BTI_BRC_HFW_DATA_G9);
1854+
1855+ return;
1856+}
1857+
1858+static VAStatus
1859+gen9_vp9_brc_update_kernel(VADriverContextP ctx,
1860+ struct encode_state *encode_state,
1861+ struct intel_encoder_context *encoder_context)
1862+{
1863+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
1864+ struct vp9_brc_context *brc_context = &vme_context->brc_context;
1865+ struct i965_gpe_context *brc_gpe_context, *mbenc_gpe_context;
1866+ int mbenc_index, gpe_index = VP9_BRC_UPDATE;
1867+ int media_function = VP9_MEDIA_STATE_BRC_UPDATE;
1868+ int mbenc_function;
1869+ struct gen9_vp9_brc_curbe_param brc_update_curbe_param;
1870+ VAEncPictureParameterBufferVP9 *pic_param;
1871+ struct gen9_vp9_state *vp9_state;
1872+ struct gen9_vp9_mbenc_curbe_param mbenc_curbe_param;
1873+ struct gpe_media_object_parameter media_object_param;
1874+
1875+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
1876+ if (!vp9_state || !vp9_state->pic_param)
1877+ return VA_STATUS_ERROR_INVALID_PARAMETER;
1878+
1879+ pic_param = vp9_state->pic_param;
1880+ // Setup VP9 MbEnc Curbe
1881+ if (vp9_state->picture_coding_type) {
1882+ mbenc_function = VP9_MEDIA_STATE_MBENC_P;
1883+ mbenc_index = VP9_MBENC_IDX_INTER;
1884+ } else {
1885+ mbenc_function = VP9_MEDIA_STATE_MBENC_I_32x32;
1886+ mbenc_index = VP9_MBENC_IDX_KEY_32x32;
1887+ }
1888+
1889+ mbenc_gpe_context = &(vme_context->mbenc_context.gpe_contexts[mbenc_index]);
1890+
1891+ memset(&mbenc_curbe_param, 0, sizeof(mbenc_curbe_param));
1892+
1893+ mbenc_curbe_param.ppic_param = vp9_state->pic_param;
1894+ mbenc_curbe_param.pseq_param = vp9_state->seq_param;
1895+ mbenc_curbe_param.psegment_param = vp9_state->segment_param;
1896+ //mbenc_curbe_param.ppRefList = &(vp9_state->pRefList[0]);
1897+ mbenc_curbe_param.last_ref_obj = vp9_state->last_ref_obj;
1898+ mbenc_curbe_param.golden_ref_obj = vp9_state->golden_ref_obj;
1899+ mbenc_curbe_param.alt_ref_obj = vp9_state->alt_ref_obj;
1900+ mbenc_curbe_param.frame_width_in_mb = ALIGN(vp9_state->frame_width, 16) / 16;
1901+ mbenc_curbe_param.frame_height_in_mb = ALIGN(vp9_state->frame_height, 16) / 16;
1902+ mbenc_curbe_param.hme_enabled = vp9_state->hme_enabled;
1903+ mbenc_curbe_param.ref_frame_flag = vp9_state->ref_frame_flag;
1904+ mbenc_curbe_param.multi_ref_qp_check = vp9_state->multi_ref_qp_check;
1905+ mbenc_curbe_param.picture_coding_type = vp9_state->picture_coding_type;
1906+ mbenc_curbe_param.media_state_type = mbenc_function;
1907+
1908+ vme_context->pfn_set_curbe_mbenc(ctx, encode_state,
1909+ mbenc_gpe_context,
1910+ encoder_context,
1911+ &mbenc_curbe_param);
1912+
1913+ vp9_state->mbenc_curbe_set_in_brc_update = true;
1914+
1915+ brc_gpe_context = &brc_context->gpe_contexts[gpe_index];
1916+
1917+ gen8_gpe_context_init(ctx, brc_gpe_context);
1918+ gen9_gpe_reset_binding_table(ctx, brc_gpe_context);
1919+
1920+ memset(&brc_update_curbe_param, 0, sizeof(brc_update_curbe_param));
1921+
1922+ // Setup BRC Update Curbe
1923+ brc_update_curbe_param.media_state_type = media_function;
1924+ brc_update_curbe_param.curr_frame = pic_param->reconstructed_frame;
1925+ brc_update_curbe_param.ppic_param = vp9_state->pic_param;
1926+ brc_update_curbe_param.pseq_param = vp9_state->seq_param;
1927+ brc_update_curbe_param.psegment_param = vp9_state->segment_param;
1928+ brc_update_curbe_param.picture_coding_type = vp9_state->picture_coding_type;
1929+ brc_update_curbe_param.frame_width_in_mb = ALIGN(vp9_state->frame_width, 16) / 16;
1930+ brc_update_curbe_param.frame_height_in_mb = ALIGN(vp9_state->frame_height, 16) / 16;
1931+ brc_update_curbe_param.hme_enabled = vp9_state->hme_enabled;
1932+ brc_update_curbe_param.b_used_ref = 1;
1933+ brc_update_curbe_param.frame_number = vp9_state->frame_number;
1934+ brc_update_curbe_param.ref_frame_flag = vp9_state->ref_frame_flag;
1935+ brc_update_curbe_param.mbbrc_enabled = 0;
1936+ brc_update_curbe_param.multi_ref_qp_check = vp9_state->multi_ref_qp_check;
1937+ brc_update_curbe_param.brc_num_pak_passes = vp9_state->num_pak_passes;
1938+
1939+ brc_update_curbe_param.pbrc_init_current_target_buf_full_in_bits =
1940+ &vp9_state->brc_init_current_target_buf_full_in_bits;
1941+ brc_update_curbe_param.pbrc_init_reset_buf_size_in_bits =
1942+ &vp9_state->brc_init_reset_buf_size_in_bits;
1943+ brc_update_curbe_param.pbrc_init_reset_input_bits_per_frame =
1944+ &vp9_state->brc_init_reset_input_bits_per_frame;
1945+
1946+ vme_context->pfn_set_curbe_brc(ctx, encode_state,
1947+ brc_gpe_context,
1948+ encoder_context,
1949+ &brc_update_curbe_param);
1950+
1951+
1952+ // Check if the constant data surface is present
1953+ if (vp9_state->brc_constant_buffer_supported)
1954+ {
1955+ char *brc_const_buffer;
1956+ brc_const_buffer = i965_map_gpe_resource(&vme_context->res_brc_const_data_buffer);
1957+ if (vp9_state->picture_coding_type)
1958+ memcpy(brc_const_buffer, vp9_brc_const_data_p_g9,
1959+ sizeof(vp9_brc_const_data_p_g9));
1960+ else
1961+ memcpy(brc_const_buffer, vp9_brc_const_data_i_g9,
1962+ sizeof(vp9_brc_const_data_i_g9));
1963+
1964+ i965_unmap_gpe_resource(&vme_context->res_brc_const_data_buffer);
1965+ }
1966+
1967+ if (pic_param->pic_flags.bits.segmentation_enabled)
1968+ {
1969+ //reallocate the vme_state->mb_segment_map_surface
1970+ /* this will be added later */
1971+ }
1972+
1973+ {
1974+ pic_param->filter_level = 0;
1975+ // clear the filter level value in picParams ebfore programming pic state, as this value will be determined and updated by BRC.
1976+ intel_vp9enc_construct_picstate_batchbuf(ctx, encode_state,
1977+ encoder_context, &vme_context->res_pic_state_brc_read_buffer);
1978+ }
1979+
1980+ gen9_brc_update_add_surfaces_vp9(ctx, encode_state,
1981+ encoder_context,
1982+ brc_gpe_context,
1983+ mbenc_gpe_context);
1984+
1985+ gen8_gpe_setup_interface_data(ctx, brc_gpe_context);
1986+ memset(&media_object_param, 0, sizeof(media_object_param));
1987+ gen9_run_kernel_media_object(ctx, encoder_context,
1988+ brc_gpe_context,
1989+ media_function,
1990+ &media_object_param);
1991+ return VA_STATUS_SUCCESS;
1992+}
1993+
1994+static
1995+void gen9_vp9_set_curbe_me(VADriverContextP ctx,
1996+ struct encode_state *encode_state,
1997+ struct i965_gpe_context *gpe_context,
1998+ struct intel_encoder_context *encoder_context,
1999+ struct gen9_vp9_me_curbe_param *param)
2000+{
2001+ vp9_me_curbe_data *me_cmd;
2002+ int enc_media_state;
2003+ int me_mode;
2004+ unsigned int width, height;
2005+ uint32_t l0_ref_frames;
2006+ uint32_t scale_factor;
2007+
2008+ if (param->b16xme_enabled) {
2009+ if (param->use_16x_me)
2010+ me_mode = VP9_ENC_ME16X_BEFORE_ME4X;
2011+ else
2012+ me_mode = VP9_ENC_ME4X_AFTER_ME16X;
2013+ } else {
2014+ me_mode = VP9_ENC_ME4X_ONLY;
2015+ }
2016+
2017+ if (me_mode == VP9_ENC_ME16X_BEFORE_ME4X)
2018+ scale_factor = 16;
2019+ else
2020+ scale_factor = 4;
2021+
2022+ if (param->use_16x_me)
2023+ enc_media_state = VP9_MEDIA_STATE_16X_ME;
2024+ else
2025+ enc_media_state = VP9_MEDIA_STATE_4X_ME;
2026+
2027+ me_cmd = gen8p_gpe_context_map_curbe(gpe_context);
2028+ memset(me_cmd, 0, sizeof(vp9_me_curbe_data));
2029+
2030+ me_cmd->dw1.max_num_mvs = 0x10;
2031+ me_cmd->dw1.bi_weight = 0x00;
2032+
2033+ me_cmd->dw2.max_num_su = 0x39;
2034+ me_cmd->dw2.max_len_sp = 0x39;
2035+
2036+ me_cmd->dw3.sub_mb_part_mask = 0x77;
2037+ me_cmd->dw3.inter_sad = 0x00;
2038+ me_cmd->dw3.intra_sad = 0x00;
2039+ me_cmd->dw3.bme_disable_fbr = 0x01;
2040+ me_cmd->dw3.sub_pel_mode = 0x03;
2041+
2042+ width = param->frame_width / scale_factor;
2043+ height = param->frame_height / scale_factor;
2044+
2045+ me_cmd->dw4.picture_width = ALIGN(width, 16) / 16;
2046+ me_cmd->dw4.picture_height_minus1 = ALIGN(height, 16) / 16 - 1;
2047+
2048+ me_cmd->dw5.ref_width = 0x30;
2049+ me_cmd->dw5.ref_height = 0x28;
2050+
2051+ if (enc_media_state == VP9_MEDIA_STATE_4X_ME)
2052+ me_cmd->dw6.write_distortions = 0x01;
2053+
2054+ me_cmd->dw6.use_mv_from_prev_step = me_mode == VP9_ENC_ME4X_AFTER_ME16X ? 1 : 0;
2055+ me_cmd->dw6.super_combine_dist = 0x5;
2056+ me_cmd->dw6.max_vmvr = 0x7fc;
2057+
2058+ l0_ref_frames = (param->ref_frame_flag & 0x01) +
2059+ !!(param->ref_frame_flag & 0x02) +
2060+ !!(param->ref_frame_flag & 0x04);
2061+ me_cmd->dw13.num_ref_idx_l0_minus1 = (l0_ref_frames > 0) ? l0_ref_frames - 1 : 0;
2062+ me_cmd->dw13.num_ref_idx_l1_minus1 = 0;
2063+
2064+ me_cmd->dw14.l0_ref_pic_polarity_bits = 0;
2065+ me_cmd->dw14.l1_ref_pic_polarity_bits = 0;
2066+
2067+ me_cmd->dw15.mv_shift_factor = 0x02;
2068+
2069+ {
2070+ memcpy((void *)((char *)me_cmd + 64),
2071+ vp9_diamond_ime_search_path_delta,
2072+ sizeof(vp9_diamond_ime_search_path_delta));
2073+ }
2074+
2075+
2076+ me_cmd->dw32._4x_memv_output_data_surf_index = VP9_BTI_ME_MV_DATA_SURFACE;
2077+ me_cmd->dw33._16x_32x_memv_input_data_surf_index = VP9_BTI_16XME_MV_DATA_SURFACE;
2078+ me_cmd->dw34._4x_me_output_dist_surf_index = VP9_BTI_ME_DISTORTION_SURFACE;
2079+ me_cmd->dw35._4x_me_output_brc_dist_surf_index = VP9_BTI_ME_BRC_DISTORTION_SURFACE;
2080+ me_cmd->dw36.vme_fwd_inter_pred_surf_index = VP9_BTI_ME_CURR_PIC_L0;
2081+ me_cmd->dw37.vme_bdw_inter_pred_surf_index = VP9_BTI_ME_CURR_PIC_L1;
2082+
2083+ gen8p_gpe_context_unmap_curbe(gpe_context);
2084+}
2085+
2086+static void
2087+gen9_vp9_send_me_surface(VADriverContextP ctx,
2088+ struct encode_state *encode_state,
2089+ struct i965_gpe_context *gpe_context,
2090+ struct intel_encoder_context *encoder_context,
2091+ struct gen9_vp9_me_surface_param *param)
2092+{
2093+ struct i965_driver_data *i965 = i965_driver_data(ctx);
2094+ struct object_surface *obj_surface;
2095+ struct gen9_surface_vp9 *vp9_priv_surface;
2096+ struct object_surface *input_surface;
2097+ struct i965_gpe_resource *gpe_resource;
2098+ int ref_bti;
2099+
2100+ obj_surface = SURFACE(param->curr_pic);
2101+
2102+ if (!obj_surface || !obj_surface->private_data)
2103+ return;
2104+
2105+ vp9_priv_surface = obj_surface->private_data;
2106+ if (param->use_16x_me)
2107+ {
2108+ gpe_resource = param->pres_16x_memv_data_buffer;
2109+ }
2110+ else
2111+ {
2112+ gpe_resource = param->pres_4x_memv_data_buffer;
2113+ }
2114+
2115+ gen9_add_buffer_2d_gpe_surface(ctx, gpe_context,
2116+ gpe_resource,
2117+ 1,
2118+ I965_SURFACEFORMAT_R8_UNORM,
2119+ VP9_BTI_ME_MV_DATA_SURFACE);
2120+
2121+ if (param->b16xme_enabled) {
2122+ gpe_resource = param->pres_16x_memv_data_buffer;
2123+ gen9_add_buffer_2d_gpe_surface(ctx, gpe_context,
2124+ gpe_resource,
2125+ 1,
2126+ I965_SURFACEFORMAT_R8_UNORM,
2127+ VP9_BTI_16XME_MV_DATA_SURFACE);
2128+ }
2129+
2130+ if (!param->use_16x_me) {
2131+ gpe_resource = param->pres_me_brc_distortion_buffer;
2132+
2133+ gen9_add_buffer_2d_gpe_surface(ctx, gpe_context,
2134+ gpe_resource,
2135+ 1,
2136+ I965_SURFACEFORMAT_R8_UNORM,
2137+ VP9_BTI_ME_BRC_DISTORTION_SURFACE);
2138+
2139+ gpe_resource = param->pres_me_distortion_buffer;
2140+
2141+ gen9_add_buffer_2d_gpe_surface(ctx, gpe_context,
2142+ gpe_resource,
2143+ 1,
2144+ I965_SURFACEFORMAT_R8_UNORM,
2145+ VP9_BTI_ME_DISTORTION_SURFACE);
2146+ }
2147+
2148+ if (param->use_16x_me)
2149+ input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2150+ else
2151+ input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2152+
2153+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2154+ input_surface,
2155+ VP9_BTI_ME_CURR_PIC_L0);
2156+
2157+ ref_bti = VP9_BTI_ME_CURR_PIC_L0 + 1;
2158+
2159+
2160+ if (param->last_ref_pic) {
2161+ obj_surface = param->last_ref_pic;
2162+ vp9_priv_surface = obj_surface->private_data;
2163+
2164+ if (param->use_16x_me)
2165+ input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2166+ else
2167+ input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2168+
2169+ if (param->dys_enabled &&
2170+ ((vp9_priv_surface->frame_width != param->frame_width) ||
2171+ (vp9_priv_surface->frame_height != param->frame_height))) {
2172+ if (param->use_16x_me)
2173+ input_surface = vp9_priv_surface->dys_16x_surface_obj;
2174+ else
2175+ input_surface = vp9_priv_surface->dys_4x_surface_obj;
2176+ }
2177+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2178+ input_surface,
2179+ ref_bti);
2180+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2181+ input_surface,
2182+ ref_bti + 1);
2183+ ref_bti += 2;
2184+ }
2185+
2186+ if (param->golden_ref_pic) {
2187+ obj_surface = param->golden_ref_pic;
2188+ vp9_priv_surface = obj_surface->private_data;
2189+
2190+ if (param->use_16x_me)
2191+ input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2192+ else
2193+ input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2194+
2195+ if (param->dys_enabled &&
2196+ ((vp9_priv_surface->frame_width != param->frame_width) ||
2197+ (vp9_priv_surface->frame_height != param->frame_height))) {
2198+ if (param->use_16x_me)
2199+ input_surface = vp9_priv_surface->dys_16x_surface_obj;
2200+ else
2201+ input_surface = vp9_priv_surface->dys_4x_surface_obj;
2202+ }
2203+
2204+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2205+ input_surface,
2206+ ref_bti);
2207+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2208+ input_surface,
2209+ ref_bti + 1);
2210+ ref_bti += 2;
2211+ }
2212+
2213+ if (param->alt_ref_pic) {
2214+ obj_surface = param->alt_ref_pic;
2215+ vp9_priv_surface = obj_surface->private_data;
2216+
2217+ if (param->use_16x_me)
2218+ input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2219+ else
2220+ input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2221+
2222+ if (param->dys_enabled &&
2223+ ((vp9_priv_surface->frame_width != param->frame_width) ||
2224+ (vp9_priv_surface->frame_height != param->frame_height))) {
2225+ if (param->use_16x_me)
2226+ input_surface = vp9_priv_surface->dys_16x_surface_obj;
2227+ else
2228+ input_surface = vp9_priv_surface->dys_4x_surface_obj;
2229+ }
2230+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2231+ input_surface,
2232+ ref_bti);
2233+ gen9_add_adv_gpe_surface(ctx, gpe_context,
2234+ input_surface,
2235+ ref_bti + 1);
2236+ ref_bti += 2;
2237+ }
2238+
2239+ return;
2240+}
2241+
2242+static
2243+void gen9_me_add_surfaces_vp9(VADriverContextP ctx,
2244+ struct encode_state *encode_state,
2245+ struct intel_encoder_context *encoder_context,
2246+ struct i965_gpe_context *gpe_context,
2247+ int use_16x_me)
2248+{
2249+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
2250+ struct gen9_vp9_me_surface_param me_surface_param;
2251+ struct gen9_vp9_state *vp9_state;
2252+
2253+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
2254+
2255+ /* sScaled4xSurface surface */
2256+ memset(&me_surface_param, 0, sizeof(me_surface_param));
2257+ me_surface_param.last_ref_pic = vp9_state->last_ref_obj;
2258+ me_surface_param.golden_ref_pic = vp9_state->golden_ref_obj;
2259+ me_surface_param.alt_ref_pic = vp9_state->alt_ref_obj;
2260+ me_surface_param.curr_pic = vp9_state->curr_frame;
2261+ me_surface_param.pres_4x_memv_data_buffer = &vme_context->s4x_memv_data_buffer;
2262+ me_surface_param.pres_16x_memv_data_buffer = &vme_context->s16x_memv_data_buffer;
2263+ me_surface_param.pres_me_distortion_buffer = &vme_context->s4x_memv_distortion_buffer;
2264+ me_surface_param.pres_me_brc_distortion_buffer = &vme_context->s4x_memv_distortion_buffer;
2265+
2266+ if (use_16x_me) {
2267+ me_surface_param.downscaled_width_in_mb = vp9_state->downscaled_width_16x_in_mb;
2268+ me_surface_param.downscaled_height_in_mb = vp9_state->downscaled_height_16x_in_mb;
2269+ } else {
2270+ me_surface_param.downscaled_width_in_mb = vp9_state->downscaled_width_4x_in_mb;
2271+ me_surface_param.downscaled_height_in_mb = vp9_state->downscaled_height_4x_in_mb;
2272+ }
2273+ me_surface_param.frame_width = vp9_state->frame_width;
2274+ me_surface_param.frame_height = vp9_state->frame_height;
2275+
2276+ me_surface_param.use_16x_me = use_16x_me;
2277+ me_surface_param.b16xme_enabled = vp9_state->b16xme_enabled;
2278+ me_surface_param.dys_enabled = vp9_state->dys_in_use;
2279+
2280+ vme_context->pfn_send_me_surface(ctx, encode_state,
2281+ gpe_context,
2282+ encoder_context,
2283+ &me_surface_param);
2284+ return;
2285+}
2286+
2287+static VAStatus
2288+gen9_vp9_me_kernel(VADriverContextP ctx,
2289+ struct encode_state *encode_state,
2290+ struct intel_encoder_context *encoder_context,
2291+ int use_16x_me)
2292+{
2293+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
2294+ struct i965_gpe_context *gpe_context;
2295+ int media_function;
2296+ struct gen9_vp9_me_curbe_param me_curbe_param;
2297+ struct gen9_vp9_state *vp9_state;
2298+ struct gpe_media_object_walker_parameter media_object_walker_param;
2299+ struct vp9_encoder_kernel_walker_parameter kernel_walker_param;
2300+
2301+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
2302+ if (!vp9_state || !vp9_state->pic_param)
2303+ return VA_STATUS_ERROR_INVALID_PARAMETER;
2304+
2305+ if (use_16x_me)
2306+ media_function = VP9_MEDIA_STATE_16X_ME;
2307+ else
2308+ media_function = VP9_MEDIA_STATE_4X_ME;
2309+
2310+ gpe_context = &(vme_context->me_context.gpe_context);
2311+
2312+ gen8_gpe_context_init(ctx, gpe_context);
2313+ gen9_gpe_reset_binding_table(ctx, gpe_context);
2314+
2315+ memset(&me_curbe_param, 0, sizeof(me_curbe_param));
2316+ me_curbe_param.ppic_param = vp9_state->pic_param;
2317+ me_curbe_param.pseq_param = vp9_state->seq_param;
2318+ me_curbe_param.frame_width = vp9_state->frame_width;
2319+ me_curbe_param.frame_height = vp9_state->frame_height;
2320+ me_curbe_param.ref_frame_flag = vp9_state->ref_frame_flag;
2321+ me_curbe_param.use_16x_me = use_16x_me;
2322+ me_curbe_param.b16xme_enabled = vp9_state->b16xme_enabled;
2323+ vme_context->pfn_set_curbe_me(ctx, encode_state,
2324+ gpe_context,
2325+ encoder_context,
2326+ &me_curbe_param);
2327+
2328+ gen9_me_add_surfaces_vp9(ctx, encode_state,
2329+ encoder_context,
2330+ gpe_context,
2331+ use_16x_me);
2332+
2333+ gen8_gpe_setup_interface_data(ctx, gpe_context);
2334+
2335+ memset(&kernel_walker_param, 0, sizeof(kernel_walker_param));
2336+ if (use_16x_me) {
2337+ kernel_walker_param.resolution_x = vp9_state->downscaled_width_16x_in_mb;
2338+ kernel_walker_param.resolution_y = vp9_state->downscaled_height_16x_in_mb;
2339+ } else {
2340+ kernel_walker_param.resolution_x = vp9_state->downscaled_width_4x_in_mb;
2341+ kernel_walker_param.resolution_y = vp9_state->downscaled_height_4x_in_mb;
2342+ }
2343+ kernel_walker_param.no_dependency = 1;
2344+
2345+ gen9_init_media_object_walker_parameter(encoder_context, &kernel_walker_param, &media_object_walker_param);
2346+
2347+ gen9_run_kernel_media_object_walker(ctx, encoder_context,
2348+ gpe_context,
2349+ media_function,
2350+ &media_object_walker_param);
2351+
2352+ return VA_STATUS_SUCCESS;
2353+}
2354+
2355+static void
2356+gen9_vp9_set_curbe_scaling_cm(VADriverContextP ctx,
2357+ struct encode_state *encode_state,
2358+ struct i965_gpe_context *gpe_context,
2359+ struct intel_encoder_context *encoder_context,
2360+ struct gen9_vp9_scaling_curbe_param *curbe_param)
2361+{
2362+ vp9_scaling4x_curbe_data_cm *curbe_cmd;
2363+
2364+ curbe_cmd = gen8p_gpe_context_map_curbe(gpe_context);
2365+ memset(curbe_cmd, 0, sizeof(vp9_scaling4x_curbe_data_cm));
2366+
2367+ curbe_cmd->dw0.input_picture_width = curbe_param->input_picture_width;
2368+ curbe_cmd->dw0.input_picture_height = curbe_param->input_picture_height;
2369+
2370+ curbe_cmd->dw1.input_y_bti = VP9_BTI_SCALING_FRAME_SRC_Y;
2371+ curbe_cmd->dw2.output_y_bti = VP9_BTI_SCALING_FRAME_DST_Y;
2372+
2373+
2374+ curbe_cmd->dw6.enable_mb_variance_output = 0;
2375+ curbe_cmd->dw6.enable_mb_pixel_average_output = 0;
2376+ curbe_cmd->dw6.enable_blk8x8_stat_output = 0;
2377+
2378+ if (curbe_param->mb_variance_output_enabled ||
2379+ curbe_param->mb_pixel_average_output_enabled)
2380+ {
2381+ curbe_cmd->dw10.mbv_proc_stat_bti = VP9_BTI_SCALING_FRAME_MBVPROCSTATS_DST_CM;
2382+ }
2383+
2384+ gen8p_gpe_context_unmap_curbe(gpe_context);
2385+ return;
2386+}
2387+
2388+static void
2389+gen9_vp9_send_scaling_surface(VADriverContextP ctx,
2390+ struct encode_state *encode_state,
2391+ struct i965_gpe_context *gpe_context,
2392+ struct intel_encoder_context *encoder_context,
2393+ struct gen9_vp9_scaling_surface_param *scaling_surface_param)
2394+{
2395+ vp9_bti_scaling_offset *scaling_bti;
2396+ unsigned int surface_format;
2397+
2398+ scaling_bti = scaling_surface_param->p_scaling_bti;
2399+
2400+ if (scaling_surface_param->scaling_out_use_32unorm_surf_fmt)
2401+ surface_format = I965_SURFACEFORMAT_R32_UNORM;
2402+ else if (scaling_surface_param->scaling_out_use_16unorm_surf_fmt)
2403+ surface_format = I965_SURFACEFORMAT_R16_UNORM;
2404+ else
2405+ surface_format = I965_SURFACEFORMAT_R8_UNORM;
2406+
2407+ gen9_add_2d_gpe_surface(ctx, gpe_context,
2408+ scaling_surface_param->input_surface,
2409+ 0, 1, surface_format,
2410+ scaling_bti->scaling_frame_src_y);
2411+
2412+ gen9_add_2d_gpe_surface(ctx, gpe_context,
2413+ scaling_surface_param->output_surface,
2414+ 0, 1, surface_format,
2415+ scaling_bti->scaling_frame_dst_y);
2416+
2417+
2418+ return;
2419+}
2420+
2421+static VAStatus
2422+gen9_vp9_scaling_kernel(VADriverContextP ctx,
2423+ struct encode_state *encode_state,
2424+ struct intel_encoder_context *encoder_context,
2425+ int use_16x_scaling)
2426+{
2427+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
2428+ struct i965_gpe_context *gpe_context;
2429+ int media_function;
2430+ struct gen9_vp9_scaling_curbe_param scaling_curbe_param;
2431+ struct gen9_vp9_scaling_surface_param scaling_surface_param;
2432+ struct gen9_vp9_state *vp9_state;
2433+ VAEncPictureParameterBufferVP9 *pic_param;
2434+ struct gpe_media_object_walker_parameter media_object_walker_param;
2435+ struct vp9_encoder_kernel_walker_parameter kernel_walker_param;
2436+ struct object_surface *obj_surface;
2437+ struct object_surface *input_surface, *output_surface;
2438+ struct gen9_surface_vp9 *vp9_priv_surface;
2439+ unsigned int downscaled_width_in_mb, downscaled_height_in_mb;
2440+ unsigned int input_frame_width, input_frame_height;
2441+ unsigned int output_frame_width, output_frame_height;
2442+
2443+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
2444+ if (!vp9_state || !vp9_state->pic_param)
2445+ return VA_STATUS_ERROR_INVALID_PARAMETER;
2446+
2447+ pic_param = vp9_state->pic_param;
2448+
2449+ if (use_16x_scaling)
2450+ media_function = VP9_MEDIA_STATE_16X_SCALING;
2451+ else
2452+ media_function = VP9_MEDIA_STATE_4X_SCALING;
2453+
2454+ gpe_context = &(vme_context->scaling_context.gpe_contexts[0]);
2455+
2456+ gen8_gpe_context_init(ctx, gpe_context);
2457+ gen9_gpe_reset_binding_table(ctx, gpe_context);
2458+
2459+ obj_surface = encode_state->reconstructed_object;
2460+ vp9_priv_surface = obj_surface->private_data;
2461+
2462+ if (use_16x_scaling)
2463+ {
2464+ downscaled_width_in_mb = vp9_state->downscaled_width_16x_in_mb;
2465+ downscaled_height_in_mb = vp9_state->downscaled_height_16x_in_mb;
2466+
2467+ input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2468+ input_frame_width = vp9_state->frame_width_4x;
2469+ input_frame_height = vp9_state->frame_height_4x;
2470+
2471+ output_surface = vp9_priv_surface->scaled_16x_surface_obj;
2472+ output_frame_width = vp9_state->frame_width_16x;
2473+ output_frame_height = vp9_state->frame_height_16x;
2474+ } else {
2475+ downscaled_width_in_mb = vp9_state->downscaled_width_4x_in_mb;
2476+ downscaled_height_in_mb = vp9_state->downscaled_height_4x_in_mb;
2477+
2478+ if (vp9_state->dys_in_use &&
2479+ ((pic_param->frame_width_src != pic_param->frame_width_dst) ||
2480+ (pic_param->frame_height_src != pic_param->frame_height_dst)))
2481+ input_surface = vp9_priv_surface->dys_surface_obj;
2482+ else
2483+ input_surface = encode_state->input_yuv_object;
2484+
2485+ input_frame_width = vp9_state->frame_width;
2486+ input_frame_height = vp9_state->frame_height;
2487+
2488+ output_surface = vp9_priv_surface->scaled_4x_surface_obj;
2489+ output_frame_width = vp9_state->frame_width_4x;
2490+ output_frame_height = vp9_state->frame_height_4x;
2491+ }
2492+
2493+ memset(&scaling_curbe_param, 0, sizeof(scaling_curbe_param));
2494+
2495+ scaling_curbe_param.input_picture_width = input_frame_width;
2496+ scaling_curbe_param.input_picture_height = input_frame_height;
2497+
2498+ scaling_curbe_param.use_16x_scaling = use_16x_scaling;
2499+ scaling_curbe_param.use_32x_scaling = 0;
2500+
2501+ if (use_16x_scaling)
2502+ scaling_curbe_param.mb_variance_output_enabled = 0;
2503+ else
2504+ scaling_curbe_param.mb_variance_output_enabled = vp9_state->adaptive_transform_decision_enabled;
2505+
2506+ scaling_curbe_param.blk8x8_stat_enabled = 0;
2507+
2508+ vme_context->pfn_set_curbe_scaling(ctx, encode_state,
2509+ gpe_context,
2510+ encoder_context,
2511+ &scaling_curbe_param);
2512+
2513+ memset(&scaling_surface_param, 0, sizeof(scaling_surface_param));
2514+ scaling_surface_param.p_scaling_bti = (void *)(&vme_context->scaling_context.scaling_4x_bti);
2515+ scaling_surface_param.input_surface = input_surface;
2516+ scaling_surface_param.input_frame_width = input_frame_width;
2517+ scaling_surface_param.input_frame_height = input_frame_height;
2518+
2519+ scaling_surface_param.output_surface = output_surface;
2520+ scaling_surface_param.output_frame_width = output_frame_width;
2521+ scaling_surface_param.output_frame_height = output_frame_height;
2522+ scaling_surface_param.scaling_out_use_16unorm_surf_fmt = 0;
2523+ scaling_surface_param.scaling_out_use_32unorm_surf_fmt = 1;
2524+
2525+ vme_context->pfn_send_scaling_surface(ctx, encode_state,
2526+ gpe_context,
2527+ encoder_context,
2528+ &scaling_surface_param);
2529+
2530+ gen8_gpe_setup_interface_data(ctx, gpe_context);
2531+
2532+ memset(&kernel_walker_param, 0, sizeof(kernel_walker_param));
2533+ /* the scaling is based on 8x8 blk level */
2534+ kernel_walker_param.resolution_x = downscaled_width_in_mb * 2;
2535+ kernel_walker_param.resolution_y = downscaled_height_in_mb * 2;
2536+ kernel_walker_param.no_dependency = 1;
2537+
2538+ gen9_init_media_object_walker_parameter(encoder_context, &kernel_walker_param, &media_object_walker_param);
2539+
2540+ gen9_run_kernel_media_object_walker(ctx, encoder_context,
2541+ gpe_context,
2542+ media_function,
2543+ &media_object_walker_param);
2544+
2545+ return VA_STATUS_SUCCESS;
2546+}
2547+
2548+static void
2549+gen9_vp9_dys_set_sampler_state(struct i965_gpe_context *gpe_context)
2550+{
2551+ struct gen9_sampler_8x8_avs *sampler_cmd;
2552+ dri_bo_map(gpe_context->dynamic_state.bo, 1);
2553+
2554+ sampler_cmd = (struct gen9_sampler_8x8_avs *)
2555+ (gpe_context->dynamic_state.bo->virtual + gpe_context->sampler_offset);
2556+
2557+ memset(sampler_cmd, 0, sizeof(struct gen9_sampler_8x8_avs));
2558+
2559+ sampler_cmd->dw0.r3c_coefficient = 15;
2560+ sampler_cmd->dw0.r3x_coefficient = 6;
2561+ sampler_cmd->dw0.strong_edge_threshold = 8;
2562+ sampler_cmd->dw0.weak_edge_threshold = 1;
2563+ sampler_cmd->dw0.gain_factor = 32;
2564+
2565+ sampler_cmd->dw2.r5c_coefficient = 3;
2566+ sampler_cmd->dw2.r5cx_coefficient = 8;
2567+ sampler_cmd->dw2.r5x_coefficient = 9;
2568+ sampler_cmd->dw2.strong_edge_weight = 6;
2569+ sampler_cmd->dw2.regular_weight = 3;
2570+ sampler_cmd->dw2.non_edge_weight = 2;
2571+ sampler_cmd->dw2.global_noise_estimation = 255;
2572+
2573+ sampler_cmd->dw3.enable_8tap_adaptive_filter = 0;
2574+ sampler_cmd->dw3.cos_alpha = 79;
2575+ sampler_cmd->dw3.sin_alpha = 101;
2576+
2577+ sampler_cmd->dw5.diamond_du = 0;
2578+ sampler_cmd->dw5.hs_margin = 3;
2579+ sampler_cmd->dw5.diamond_alpha = 100;
2580+
2581+ sampler_cmd->dw7.inv_margin_vyl = 3300;
2582+
2583+ sampler_cmd->dw8.inv_margin_vyu = 1600;
2584+
2585+ sampler_cmd->dw10.y_slope2 = 24;
2586+ sampler_cmd->dw10.s0l = 1792;
2587+
2588+ sampler_cmd->dw12.y_slope1 = 24;
2589+
2590+ sampler_cmd->dw14.s0u = 256;
2591+
2592+ sampler_cmd->dw15.s2u = 1792;
2593+ sampler_cmd->dw15.s1u = 0;
2594+
2595+ memcpy(sampler_cmd->coefficients,
2596+ &gen9_vp9_avs_coeffs[0],
2597+ 17 * sizeof(struct gen8_sampler_8x8_avs_coefficients));
2598+
2599+ sampler_cmd->dw152.default_sharpness_level = 255;
2600+ sampler_cmd->dw152.max_derivative_4_pixels = 7;
2601+ sampler_cmd->dw152.max_derivative_8_pixels = 20;
2602+ sampler_cmd->dw152.transition_area_with_4_pixels = 4;
2603+ sampler_cmd->dw152.transition_area_with_8_pixels = 5;
2604+
2605+ sampler_cmd->dw153.bypass_x_adaptive_filtering = 1;
2606+ sampler_cmd->dw153.bypass_y_adaptive_filtering = 1;
2607+ sampler_cmd->dw153.adaptive_filter_for_all_channel = 0;
2608+
2609+ memcpy(sampler_cmd->extra_coefficients,
2610+ &gen9_vp9_avs_coeffs[17 * 8],
2611+ 15 * sizeof(struct gen8_sampler_8x8_avs_coefficients));
2612+
2613+ dri_bo_unmap(gpe_context->dynamic_state.bo);
2614+}
2615+
2616+static void
2617+gen9_vp9_set_curbe_dys(VADriverContextP ctx,
2618+ struct encode_state *encode_state,
2619+ struct i965_gpe_context *gpe_context,
2620+ struct intel_encoder_context *encoder_context,
2621+ struct gen9_vp9_dys_curbe_param *curbe_param)
2622+{
2623+ vp9_dys_curbe_data *curbe_cmd;
2624+
2625+ curbe_cmd = gen8p_gpe_context_map_curbe(gpe_context);
2626+ memset(curbe_cmd, 0, sizeof(vp9_dys_curbe_data));
2627+
2628+ curbe_cmd->dw0.input_frame_width = curbe_param->input_width;
2629+ curbe_cmd->dw0.input_frame_height = curbe_param->input_height;
2630+
2631+ curbe_cmd->dw1.output_frame_width = curbe_param->output_width;
2632+ curbe_cmd->dw1.output_frame_height = curbe_param->output_height;
2633+
2634+ curbe_cmd->dw2.delta_u = 1.0f / curbe_param->output_width;
2635+ curbe_cmd->dw3.delta_v = 1.0f / curbe_param->output_height;
2636+
2637+ curbe_cmd->dw16.input_frame_nv12_bti = VP9_BTI_DYS_INPUT_NV12;
2638+ curbe_cmd->dw17.output_frame_y_bti = VP9_BTI_DYS_OUTPUT_Y;
2639+ curbe_cmd->dw18.avs_sample_idx = 0;
2640+
2641+ gen8p_gpe_context_unmap_curbe(gpe_context);
2642+}
2643+
2644+static void
2645+gen9_vp9_send_dys_surface(VADriverContextP ctx,
2646+ struct encode_state *encode_state,
2647+ struct i965_gpe_context *gpe_context,
2648+ struct intel_encoder_context *encoder_context,
2649+ struct gen9_vp9_dys_surface_param *surface_param)
2650+{
2651+
2652+ if (surface_param->input_frame)
2653+ gen9_add_adv_gpe_surface(ctx,
2654+ gpe_context,
2655+ surface_param->input_frame,
2656+ VP9_BTI_DYS_INPUT_NV12);
2657+
2658+ if (surface_param->output_frame) {
2659+ gen9_add_2d_gpe_surface(ctx,
2660+ gpe_context,
2661+ surface_param->output_frame,
2662+ 0,
2663+ 1,
2664+ I965_SURFACEFORMAT_R8_UNORM,
2665+ VP9_BTI_DYS_OUTPUT_Y);
2666+
2667+ gen9_add_2d_gpe_surface(ctx,
2668+ gpe_context,
2669+ surface_param->output_frame,
2670+ 1,
2671+ 1,
2672+ I965_SURFACEFORMAT_R16_UINT,
2673+ VP9_BTI_DYS_OUTPUT_UV);
2674+ }
2675+
2676+ return;
2677+}
2678+
2679+static VAStatus
2680+gen9_vp9_dys_kernel(VADriverContextP ctx,
2681+ struct encode_state *encode_state,
2682+ struct intel_encoder_context *encoder_context,
2683+ gen9_vp9_dys_kernel_param *dys_kernel_param)
2684+{
2685+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
2686+ struct i965_gpe_context *gpe_context;
2687+ int media_function;
2688+ struct gen9_vp9_dys_curbe_param curbe_param;
2689+ struct gen9_vp9_dys_surface_param surface_param;
2690+ struct gpe_media_object_walker_parameter media_object_walker_param;
2691+ struct vp9_encoder_kernel_walker_parameter kernel_walker_param;
2692+ unsigned int resolution_x, resolution_y;
2693+
2694+ media_function = VP9_MEDIA_STATE_DYS;
2695+ gpe_context = &vme_context->dys_context.gpe_context;
2696+
2697+ //gen8_gpe_context_init(ctx, gpe_context);
2698+ gen9_gpe_reset_binding_table(ctx, gpe_context);
2699+
2700+ /* sampler state is configured only when initializing the GPE context */
2701+
2702+ memset(&curbe_param, 0, sizeof(curbe_param));
2703+ curbe_param.input_width = dys_kernel_param->input_width;
2704+ curbe_param.input_height = dys_kernel_param->input_height;
2705+ curbe_param.output_width = dys_kernel_param->output_width;
2706+ curbe_param.output_height = dys_kernel_param->output_height;
2707+ vme_context->pfn_set_curbe_dys(ctx, encode_state,
2708+ gpe_context,
2709+ encoder_context,
2710+ &curbe_param);
2711+
2712+ // Add surface states
2713+ memset(&surface_param, 0, sizeof(surface_param));
2714+ surface_param.input_frame = dys_kernel_param->input_surface;
2715+ surface_param.output_frame = dys_kernel_param->output_surface;
2716+ surface_param.vert_line_stride = 0;
2717+ surface_param.vert_line_stride_offset = 0;
2718+
2719+ vme_context->pfn_send_dys_surface(ctx,
2720+ encode_state,
2721+ gpe_context,
2722+ encoder_context,
2723+ &surface_param);
2724+
2725+ resolution_x = ALIGN(dys_kernel_param->output_width, 16) / 16;
2726+ resolution_y = ALIGN(dys_kernel_param->output_height, 16) / 16;
2727+
2728+ gen8_gpe_setup_interface_data(ctx, gpe_context);
2729+
2730+ memset(&kernel_walker_param, 0, sizeof(kernel_walker_param));
2731+ kernel_walker_param.resolution_x = resolution_x;
2732+ kernel_walker_param.resolution_y = resolution_y;
2733+ kernel_walker_param.no_dependency = 1;
2734+
2735+ gen9_init_media_object_walker_parameter(encoder_context, &kernel_walker_param, &media_object_walker_param);
2736+
2737+ gen9_run_kernel_media_object_walker(ctx, encoder_context,
2738+ gpe_context,
2739+ media_function,
2740+ &media_object_walker_param);
2741+
2742+ return VA_STATUS_SUCCESS;
2743+}
2744+
2745+static VAStatus
2746+gen9_vp9_run_dys_refframes(VADriverContextP ctx,
2747+ struct encode_state *encode_state,
2748+ struct intel_encoder_context *encoder_context)
2749+{
2750+ struct gen9_vp9_state *vp9_state;
2751+ VAEncPictureParameterBufferVP9 *pic_param;
2752+ gen9_vp9_dys_kernel_param dys_kernel_param;
2753+ struct object_surface *obj_surface;
2754+ struct object_surface *input_surface, *output_surface;
2755+ struct gen9_surface_vp9 *vp9_priv_surface;
2756+
2757+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
2758+
2759+ if (!vp9_state || !vp9_state->pic_param)
2760+ return VA_STATUS_ERROR_INVALID_PARAMETER;
2761+
2762+ pic_param = vp9_state->pic_param;
2763+
2764+ if ((pic_param->frame_width_src != pic_param->frame_width_dst) ||
2765+ (pic_param->frame_height_src != pic_param->frame_height_dst)) {
2766+ input_surface = encode_state->input_yuv_object;
2767+ obj_surface = encode_state->reconstructed_object;
2768+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
2769+ output_surface = vp9_priv_surface->dys_surface_obj;
2770+
2771+ memset(&dys_kernel_param, 0, sizeof(dys_kernel_param));
2772+ dys_kernel_param.input_width = pic_param->frame_width_src;
2773+ dys_kernel_param.input_height = pic_param->frame_height_src;
2774+ dys_kernel_param.input_surface = input_surface;
2775+ dys_kernel_param.output_width = pic_param->frame_width_dst;
2776+ dys_kernel_param.output_height = pic_param->frame_height_dst;
2777+ dys_kernel_param.output_surface = output_surface;
2778+ gen9_vp9_dys_kernel(ctx, encode_state,
2779+ encoder_context,
2780+ &dys_kernel_param);
2781+ }
2782+
2783+ if (vp9_state->dys_ref_frame_flag & VP9_LAST_REF) {
2784+ obj_surface = vp9_state->last_ref_obj;
2785+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
2786+
2787+ input_surface = obj_surface;
2788+ output_surface = vp9_priv_surface->dys_surface_obj;
2789+
2790+ dys_kernel_param.input_width = vp9_priv_surface->frame_width;
2791+ dys_kernel_param.input_height = vp9_priv_surface->frame_height;
2792+ dys_kernel_param.input_surface = input_surface;
2793+
2794+ dys_kernel_param.output_width = pic_param->frame_width_dst;
2795+ dys_kernel_param.output_height = pic_param->frame_height_dst;
2796+ dys_kernel_param.output_surface = output_surface;
2797+
2798+ gen9_vp9_dys_kernel(ctx, encode_state,
2799+ encoder_context,
2800+ &dys_kernel_param);
2801+
2802+ if (vp9_state->hme_enabled) {
2803+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_width / 4), 16);
2804+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_height / 4), 16);
2805+ dys_kernel_param.input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2806+
2807+ dys_kernel_param.output_width = vp9_state->frame_width_4x;
2808+ dys_kernel_param.output_height = vp9_state->frame_height_4x;
2809+ dys_kernel_param.output_surface = vp9_priv_surface->dys_4x_surface_obj;
2810+
2811+ gen9_vp9_dys_kernel(ctx, encode_state,
2812+ encoder_context,
2813+ &dys_kernel_param);
2814+
2815+ /* Does it really need to do the 16x HME if the
2816+ * resolution is different?
2817+ * Maybe it should be restricted
2818+ */
2819+ if (vp9_state->b16xme_enabled) {
2820+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_width / 16), 16);
2821+ dys_kernel_param.input_height = ALIGN((vp9_priv_surface->frame_height / 16), 16);
2822+ dys_kernel_param.input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2823+
2824+ dys_kernel_param.output_width = vp9_state->frame_width_16x;
2825+ dys_kernel_param.output_height = vp9_state->frame_height_16x;
2826+ dys_kernel_param.output_surface = vp9_priv_surface->dys_16x_surface_obj;
2827+
2828+ gen9_vp9_dys_kernel(ctx, encode_state,
2829+ encoder_context,
2830+ &dys_kernel_param);
2831+ }
2832+ }
2833+ }
2834+
2835+ if (vp9_state->dys_ref_frame_flag & VP9_GOLDEN_REF) {
2836+ obj_surface = vp9_state->golden_ref_obj;
2837+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
2838+
2839+ input_surface = obj_surface;
2840+ output_surface = vp9_priv_surface->dys_surface_obj;
2841+
2842+ dys_kernel_param.input_width = vp9_priv_surface->frame_width;
2843+ dys_kernel_param.input_height = vp9_priv_surface->frame_height;
2844+ dys_kernel_param.input_surface = input_surface;
2845+
2846+ dys_kernel_param.output_width = pic_param->frame_width_dst;
2847+ dys_kernel_param.output_height = pic_param->frame_height_dst;
2848+ dys_kernel_param.output_surface = output_surface;
2849+
2850+ gen9_vp9_dys_kernel(ctx, encode_state,
2851+ encoder_context,
2852+ &dys_kernel_param);
2853+
2854+ if (vp9_state->hme_enabled) {
2855+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_width / 4), 16);
2856+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_height / 4), 16);
2857+ dys_kernel_param.input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2858+
2859+ dys_kernel_param.output_width = vp9_state->frame_width_4x;
2860+ dys_kernel_param.output_height = vp9_state->frame_height_4x;
2861+ dys_kernel_param.output_surface = vp9_priv_surface->dys_4x_surface_obj;
2862+
2863+ gen9_vp9_dys_kernel(ctx, encode_state,
2864+ encoder_context,
2865+ &dys_kernel_param);
2866+
2867+ /* Does it really need to do the 16x HME if the
2868+ * resolution is different?
2869+ * Maybe it should be restricted
2870+ */
2871+ if (vp9_state->b16xme_enabled) {
2872+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_width / 16), 16);
2873+ dys_kernel_param.input_height = ALIGN((vp9_priv_surface->frame_height / 16), 16);
2874+ dys_kernel_param.input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2875+
2876+ dys_kernel_param.output_width = vp9_state->frame_width_16x;
2877+ dys_kernel_param.output_height = vp9_state->frame_height_16x;
2878+ dys_kernel_param.output_surface = vp9_priv_surface->dys_16x_surface_obj;
2879+
2880+ gen9_vp9_dys_kernel(ctx, encode_state,
2881+ encoder_context,
2882+ &dys_kernel_param);
2883+ }
2884+ }
2885+ }
2886+
2887+ if (vp9_state->dys_ref_frame_flag & VP9_ALT_REF) {
2888+ obj_surface = vp9_state->alt_ref_obj;
2889+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
2890+
2891+ input_surface = obj_surface;
2892+ output_surface = vp9_priv_surface->dys_surface_obj;
2893+
2894+ dys_kernel_param.input_width = vp9_priv_surface->frame_width;
2895+ dys_kernel_param.input_height = vp9_priv_surface->frame_height;
2896+ dys_kernel_param.input_surface = input_surface;
2897+
2898+ dys_kernel_param.output_width = pic_param->frame_width_dst;
2899+ dys_kernel_param.output_height = pic_param->frame_height_dst;
2900+ dys_kernel_param.output_surface = output_surface;
2901+
2902+ gen9_vp9_dys_kernel(ctx, encode_state,
2903+ encoder_context,
2904+ &dys_kernel_param);
2905+
2906+ if (vp9_state->hme_enabled) {
2907+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_width / 4), 16);
2908+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_height / 4), 16);
2909+ dys_kernel_param.input_surface = vp9_priv_surface->scaled_4x_surface_obj;
2910+
2911+ dys_kernel_param.output_width = vp9_state->frame_width_4x;
2912+ dys_kernel_param.output_height = vp9_state->frame_height_4x;
2913+ dys_kernel_param.output_surface = vp9_priv_surface->dys_4x_surface_obj;
2914+
2915+ gen9_vp9_dys_kernel(ctx, encode_state,
2916+ encoder_context,
2917+ &dys_kernel_param);
2918+
2919+ /* Does it really need to do the 16x HME if the
2920+ * resolution is different?
2921+ * Maybe it should be restricted
2922+ */
2923+ if (vp9_state->b16xme_enabled) {
2924+ dys_kernel_param.input_width = ALIGN((vp9_priv_surface->frame_width / 16), 16);
2925+ dys_kernel_param.input_height = ALIGN((vp9_priv_surface->frame_height / 16), 16);
2926+ dys_kernel_param.input_surface = vp9_priv_surface->scaled_16x_surface_obj;
2927+
2928+ dys_kernel_param.output_width = vp9_state->frame_width_16x;
2929+ dys_kernel_param.output_height = vp9_state->frame_height_16x;
2930+ dys_kernel_param.output_surface = vp9_priv_surface->dys_16x_surface_obj;
2931+
2932+ gen9_vp9_dys_kernel(ctx, encode_state,
2933+ encoder_context,
2934+ &dys_kernel_param);
2935+ }
2936+ }
2937+ }
2938+
2939+ return VA_STATUS_SUCCESS;
2940+}
2941+
2942+static void
2943+gen9_vp9_set_curbe_mbenc(VADriverContextP ctx,
2944+ struct encode_state *encode_state,
2945+ struct i965_gpe_context *gpe_context,
2946+ struct intel_encoder_context *encoder_context,
2947+ struct gen9_vp9_mbenc_curbe_param *curbe_param)
2948+{
2949+ struct gen9_vp9_state *vp9_state;
2950+ VAEncMiscParameterTypeVP9PerSegmantParam *seg_param, tmp_seg_param;
2951+ vp9_mbenc_curbe_data *curbe_cmd;
2952+ VAEncPictureParameterBufferVP9 *pic_param;
2953+ int i, segment_count;
2954+ int seg_qindex;
2955+ struct object_surface *obj_surface;
2956+ struct gen9_surface_vp9 *vp9_priv_surface;
2957+
2958+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
2959+
2960+ if (!vp9_state || !vp9_state->pic_param)
2961+ return;
2962+
2963+ pic_param = curbe_param->ppic_param;
2964+ seg_param = curbe_param->psegment_param;
2965+
2966+ if (!seg_param) {
2967+ memset(&tmp_seg_param, 0, sizeof(tmp_seg_param));
2968+ seg_param = &tmp_seg_param;
2969+ }
2970+
2971+ curbe_cmd = gen8p_gpe_context_map_curbe(gpe_context);
2972+ memset(curbe_cmd, 0, sizeof(vp9_mbenc_curbe_data));
2973+
2974+ if (vp9_state->dys_in_use)
2975+ {
2976+ curbe_cmd->dw0.frame_width = pic_param->frame_width_dst;
2977+ curbe_cmd->dw0.frame_height = pic_param->frame_height_dst;
2978+ }
2979+ else
2980+ {
2981+ curbe_cmd->dw0.frame_width = pic_param->frame_width_src;
2982+ curbe_cmd->dw0.frame_height = pic_param->frame_height_src;
2983+ }
2984+
2985+ curbe_cmd->dw1.frame_type = curbe_param->picture_coding_type;
2986+
2987+ curbe_cmd->dw1.segmentation_enable = pic_param->pic_flags.bits.segmentation_enabled;
2988+ if (pic_param->pic_flags.bits.segmentation_enabled)
2989+ segment_count = 8;
2990+ else
2991+ segment_count = 1;
2992+
2993+ curbe_cmd->dw1.ref_frame_flags = curbe_param->ref_frame_flag;
2994+
2995+ //right now set them to normal settings
2996+ if (curbe_param->picture_coding_type)
2997+ {
2998+ switch (vp9_state->target_usage)
2999+ {
3000+ case INTEL_ENC_VP9_TU_QUALITY:
3001+ curbe_cmd->dw1.min_16for32_check = 0x00;
3002+ curbe_cmd->dw2.multi_pred = 0x02;
3003+ curbe_cmd->dw2.len_sp = 0x39;
3004+ curbe_cmd->dw2.search_x = 0x30;
3005+ curbe_cmd->dw2.search_y = 0x28;
3006+ curbe_cmd->dw3.min_ref_for32_check = 0x01;
3007+ curbe_cmd->dw4.skip16_threshold = 0x000A;
3008+ curbe_cmd->dw4.disable_mr_threshold = 0x000C;
3009+
3010+ memcpy(&curbe_cmd->dw16,
3011+ vp9_diamond_ime_search_path_delta,
3012+ 14 * sizeof(unsigned int));
3013+ break;
3014+ case INTEL_ENC_VP9_TU_PERFORMANCE:
3015+ curbe_cmd->dw1.min_16for32_check = 0x02;
3016+ curbe_cmd->dw2.multi_pred = 0x00;
3017+ curbe_cmd->dw2.len_sp = 0x10;
3018+ curbe_cmd->dw2.search_x = 0x20;
3019+ curbe_cmd->dw2.search_y = 0x20;
3020+ curbe_cmd->dw3.min_ref_for32_check = 0x03;
3021+ curbe_cmd->dw4.skip16_threshold = 0x0014;
3022+ curbe_cmd->dw4.disable_mr_threshold = 0x0016;
3023+
3024+ memcpy(&curbe_cmd->dw16,
3025+ vp9_fullspiral_ime_search_path_delta,
3026+ 14 * sizeof(unsigned int));
3027+
3028+ break;
3029+ default: // normal settings
3030+ curbe_cmd->dw1.min_16for32_check = 0x01;
3031+ curbe_cmd->dw2.multi_pred = 0x00;
3032+ curbe_cmd->dw2.len_sp = 0x19;
3033+ curbe_cmd->dw2.search_x = 0x30;
3034+ curbe_cmd->dw2.search_y = 0x28;
3035+ curbe_cmd->dw3.min_ref_for32_check = 0x02;
3036+ curbe_cmd->dw4.skip16_threshold = 0x000F;
3037+ curbe_cmd->dw4.disable_mr_threshold = 0x0011;
3038+
3039+ memcpy(&curbe_cmd->dw16,
3040+ vp9_diamond_ime_search_path_delta,
3041+ 14 * sizeof(unsigned int));
3042+ break;
3043+ }
3044+
3045+ curbe_cmd->dw3.hme_enabled = curbe_param->hme_enabled;
3046+ curbe_cmd->dw3.multi_ref_qp_check = curbe_param->multi_ref_qp_check;
3047+ // co-located predictor must be disabled when dynamic scaling is enabled
3048+ curbe_cmd->dw3.disable_temp_pred = vp9_state->dys_in_use;
3049+ }
3050+
3051+ curbe_cmd->dw5.inter_round = 0;
3052+ curbe_cmd->dw5.intra_round = 4;
3053+ curbe_cmd->dw5.frame_qpindex = pic_param->luma_ac_qindex;
3054+
3055+ for (i = 0; i < segment_count; i++)
3056+ {
3057+ seg_qindex = pic_param->luma_ac_qindex + pic_param->luma_dc_qindex_delta
3058+ + seg_param->seg_data[i].segment_qindex_delta;
3059+
3060+ seg_qindex = CLAMP(0, 255, seg_qindex);
3061+
3062+ if (curbe_param->picture_coding_type)
3063+ memcpy(&curbe_cmd->segments[i],
3064+ &intel_vp9_costlut_p[seg_qindex * 16],
3065+ 16 * sizeof(unsigned int));
3066+ else
3067+ memcpy(&curbe_cmd->segments[i],
3068+ &intel_vp9_costlut_key[seg_qindex * 16],
3069+ 16 * sizeof(unsigned int));
3070+ }
3071+
3072+ if (curbe_param->picture_coding_type)
3073+ {
3074+ if (curbe_cmd->dw3.multi_ref_qp_check)
3075+ {
3076+ if (curbe_param->ref_frame_flag & 0x01)
3077+ {
3078+ obj_surface = curbe_param->last_ref_obj;
3079+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3080+ curbe_cmd->dw8.last_ref_qp = vp9_quant_dc[vp9_priv_surface->qp_value];
3081+ }
3082+
3083+ if (curbe_param->ref_frame_flag & 0x02)
3084+ {
3085+ obj_surface = curbe_param->golden_ref_obj;
3086+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3087+ curbe_cmd->dw8.golden_ref_qp = vp9_quant_dc[vp9_priv_surface->qp_value];
3088+ }
3089+
3090+ if (curbe_param->ref_frame_flag & 0x04)
3091+ {
3092+ obj_surface = curbe_param->alt_ref_obj;
3093+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3094+ curbe_cmd->dw9.alt_ref_qp = vp9_quant_dc[vp9_priv_surface->qp_value];
3095+ }
3096+ }
3097+ }
3098+ curbe_cmd->dw160.enc_curr_y_surf_bti = VP9_BTI_MBENC_CURR_Y_G9;
3099+ curbe_cmd->dw162.enc_curr_nv12_surf_bti = VP9_BTI_MBENC_CURR_NV12_G9;
3100+ curbe_cmd->dw166.segmentation_map_bti = VP9_BTI_MBENC_SEGMENTATION_MAP_G9;
3101+ curbe_cmd->dw172.mode_decision_bti = VP9_BTI_MBENC_MODE_DECISION_G9;
3102+ curbe_cmd->dw167.tx_curbe_bti = VP9_BTI_MBENC_TX_CURBE_G9;
3103+ curbe_cmd->dw168.hme_mvdata_bti = VP9_BTI_MBENC_HME_MV_DATA_G9;
3104+ curbe_cmd->dw169.hme_distortion_bti = VP9_BTI_MBENC_HME_DISTORTION_G9;
3105+ curbe_cmd->dw171.mode_decision_prev_bti = VP9_BTI_MBENC_MODE_DECISION_PREV_G9;
3106+ curbe_cmd->dw172.mode_decision_bti = VP9_BTI_MBENC_MODE_DECISION_G9;
3107+ curbe_cmd->dw173.output_16x16_inter_modes_bti = VP9_BTI_MBENC_OUT_16x16_INTER_MODES_G9;
3108+ curbe_cmd->dw174.cu_record_bti = VP9_BTI_MBENC_CU_RECORDS_G9;
3109+ curbe_cmd->dw175.pak_data_bti = VP9_BTI_MBENC_PAK_DATA_G9;
3110+
3111+ gen8p_gpe_context_unmap_curbe(gpe_context);
3112+ return;
3113+}
3114+
3115+static void
3116+gen9_vp9_send_mbenc_surface(VADriverContextP ctx,
3117+ struct encode_state *encode_state,
3118+ struct i965_gpe_context *gpe_context,
3119+ struct intel_encoder_context *encoder_context,
3120+ struct gen9_vp9_mbenc_surface_param *mbenc_param)
3121+{
3122+ struct gen9_vp9_state *vp9_state;
3123+ unsigned int res_size;
3124+ unsigned int frame_width_in_sb, frame_height_in_sb;
3125+ struct object_surface *obj_surface, *tmp_input;
3126+ struct gen9_surface_vp9 *vp9_priv_surface;
3127+ int media_function;
3128+
3129+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
3130+
3131+ if (!vp9_state || !vp9_state->pic_param)
3132+ return;
3133+
3134+ frame_width_in_sb = ALIGN(mbenc_param->frame_width, 64) / 64;
3135+ frame_height_in_sb = ALIGN(mbenc_param->frame_height, 64) / 64;
3136+ media_function = mbenc_param->media_state_type;
3137+
3138+ switch (media_function)
3139+ {
3140+ case VP9_MEDIA_STATE_MBENC_I_32x32:
3141+ {
3142+ obj_surface = mbenc_param->curr_frame_obj;
3143+
3144+ gen9_add_2d_gpe_surface(ctx,
3145+ gpe_context,
3146+ obj_surface,
3147+ 0,
3148+ 1,
3149+ I965_SURFACEFORMAT_R8_UNORM,
3150+ VP9_BTI_MBENC_CURR_Y_G9);
3151+
3152+ gen9_add_2d_gpe_surface(ctx,
3153+ gpe_context,
3154+ obj_surface,
3155+ 1,
3156+ 1,
3157+ I965_SURFACEFORMAT_R16_UINT,
3158+ VP9_BTI_MBENC_CURR_UV_G9);
3159+
3160+
3161+ if (mbenc_param->segmentation_enabled)
3162+ {
3163+ gen9_add_buffer_2d_gpe_surface(ctx,
3164+ gpe_context,
3165+ mbenc_param->pres_segmentation_map,
3166+ 1,
3167+ I965_SURFACEFORMAT_R8_UNORM,
3168+ VP9_BTI_MBENC_SEGMENTATION_MAP_G9);
3169+
3170+ }
3171+
3172+ res_size = 16 * mbenc_param->frame_width_in_mb *
3173+ mbenc_param->frame_height_in_mb * sizeof(unsigned int);
3174+ gen9_add_buffer_gpe_surface(ctx,
3175+ gpe_context,
3176+ mbenc_param->pres_mode_decision,
3177+ 0,
3178+ res_size / 4,
3179+ 0,
3180+ VP9_BTI_MBENC_MODE_DECISION_G9);
3181+
3182+ break;
3183+ }
3184+ case VP9_MEDIA_STATE_MBENC_I_16x16:
3185+ {
3186+ obj_surface = mbenc_param->curr_frame_obj;
3187+
3188+ gen9_add_2d_gpe_surface(ctx,
3189+ gpe_context,
3190+ obj_surface,
3191+ 0,
3192+ 1,
3193+ I965_SURFACEFORMAT_R8_UNORM,
3194+ VP9_BTI_MBENC_CURR_Y_G9);
3195+
3196+ gen9_add_2d_gpe_surface(ctx,
3197+ gpe_context,
3198+ obj_surface,
3199+ 1,
3200+ 1,
3201+ I965_SURFACEFORMAT_R16_UINT,
3202+ VP9_BTI_MBENC_CURR_UV_G9);
3203+
3204+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3205+ obj_surface,
3206+ VP9_BTI_MBENC_CURR_NV12_G9);
3207+
3208+ if (mbenc_param->segmentation_enabled)
3209+ {
3210+ gen9_add_buffer_2d_gpe_surface(ctx,
3211+ gpe_context,
3212+ mbenc_param->pres_segmentation_map,
3213+ 1,
3214+ I965_SURFACEFORMAT_R8_UNORM,
3215+ VP9_BTI_MBENC_SEGMENTATION_MAP_G9);
3216+
3217+ }
3218+
3219+ res_size = 16 * mbenc_param->frame_width_in_mb *
3220+ mbenc_param->frame_height_in_mb * sizeof(unsigned int);
3221+ gen9_add_buffer_gpe_surface(ctx,
3222+ gpe_context,
3223+ mbenc_param->pres_mode_decision,
3224+ 0,
3225+ res_size / 4,
3226+ 0,
3227+ VP9_BTI_MBENC_MODE_DECISION_G9);
3228+
3229+ res_size = 160;
3230+
3231+ gen9_add_dri_buffer_gpe_surface(ctx,
3232+ gpe_context,
3233+ mbenc_param->gpe_context_tx->dynamic_state.bo,
3234+ 0,
3235+ ALIGN(res_size, 64),
3236+ mbenc_param->gpe_context_tx->curbe_offset,
3237+ VP9_BTI_MBENC_TX_CURBE_G9);
3238+
3239+ break;
3240+ }
3241+ case VP9_MEDIA_STATE_MBENC_P:
3242+ {
3243+ obj_surface = mbenc_param->curr_frame_obj;
3244+
3245+ gen9_add_2d_gpe_surface(ctx,
3246+ gpe_context,
3247+ obj_surface,
3248+ 0,
3249+ 1,
3250+ I965_SURFACEFORMAT_R8_UNORM,
3251+ VP9_BTI_MBENC_CURR_Y_G9);
3252+
3253+ gen9_add_2d_gpe_surface(ctx, gpe_context,
3254+ obj_surface,
3255+ 1,
3256+ 1,
3257+ I965_SURFACEFORMAT_R16_UINT,
3258+ VP9_BTI_MBENC_CURR_UV_G9);
3259+
3260+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3261+ obj_surface,
3262+ VP9_BTI_MBENC_CURR_NV12_G9);
3263+
3264+ if (mbenc_param->last_ref_obj)
3265+ {
3266+ obj_surface = mbenc_param->last_ref_obj;
3267+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3268+
3269+ if (vp9_state->dys_in_use &&
3270+ ((vp9_priv_surface->frame_width != vp9_state->frame_width) ||
3271+ (vp9_priv_surface->frame_height != vp9_state->frame_height)))
3272+ tmp_input = vp9_priv_surface->dys_surface_obj;
3273+ else
3274+ tmp_input = obj_surface;
3275+
3276+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3277+ tmp_input,
3278+ VP9_BTI_MBENC_LAST_NV12_G9);
3279+
3280+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3281+ tmp_input,
3282+ VP9_BTI_MBENC_LAST_NV12_G9 + 1);
3283+
3284+ }
3285+
3286+ if (mbenc_param->golden_ref_obj)
3287+ {
3288+ obj_surface = mbenc_param->golden_ref_obj;
3289+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3290+
3291+ if (vp9_state->dys_in_use &&
3292+ ((vp9_priv_surface->frame_width != vp9_state->frame_width) ||
3293+ (vp9_priv_surface->frame_height != vp9_state->frame_height)))
3294+ tmp_input = vp9_priv_surface->dys_surface_obj;
3295+ else
3296+ tmp_input = obj_surface;
3297+
3298+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3299+ tmp_input,
3300+ VP9_BTI_MBENC_GOLD_NV12_G9);
3301+
3302+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3303+ tmp_input,
3304+ VP9_BTI_MBENC_GOLD_NV12_G9 + 1);
3305+
3306+ }
3307+
3308+ if (mbenc_param->alt_ref_obj)
3309+ {
3310+ obj_surface = mbenc_param->alt_ref_obj;
3311+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3312+
3313+ if (vp9_state->dys_in_use &&
3314+ ((vp9_priv_surface->frame_width != vp9_state->frame_width) ||
3315+ (vp9_priv_surface->frame_height != vp9_state->frame_height)))
3316+ tmp_input = vp9_priv_surface->dys_surface_obj;
3317+ else
3318+ tmp_input = obj_surface;
3319+
3320+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3321+ tmp_input,
3322+ VP9_BTI_MBENC_ALTREF_NV12_G9);
3323+
3324+ gen9_add_adv_gpe_surface(ctx, gpe_context,
3325+ tmp_input,
3326+ VP9_BTI_MBENC_ALTREF_NV12_G9 + 1);
3327+
3328+ }
3329+
3330+ if (mbenc_param->hme_enabled)
3331+ {
3332+ gen9_add_buffer_2d_gpe_surface(ctx, gpe_context,
3333+ mbenc_param->ps4x_memv_data_buffer,
3334+ 1,
3335+ I965_SURFACEFORMAT_R8_UNORM,
3336+ VP9_BTI_MBENC_HME_MV_DATA_G9);
3337+
3338+ gen9_add_buffer_2d_gpe_surface(ctx, gpe_context,
3339+ mbenc_param->ps4x_memv_distortion_buffer,
3340+ 1,
3341+ I965_SURFACEFORMAT_R8_UNORM,
3342+ VP9_BTI_MBENC_HME_DISTORTION_G9);
3343+ }
3344+
3345+ if (mbenc_param->segmentation_enabled)
3346+ {
3347+ gen9_add_buffer_2d_gpe_surface(ctx,
3348+ gpe_context,
3349+ mbenc_param->pres_segmentation_map,
3350+ 1,
3351+ I965_SURFACEFORMAT_R8_UNORM,
3352+ VP9_BTI_MBENC_SEGMENTATION_MAP_G9);
3353+
3354+ }
3355+
3356+ res_size = 16 * mbenc_param->frame_width_in_mb *
3357+ mbenc_param->frame_height_in_mb * sizeof(unsigned int);
3358+ gen9_add_buffer_gpe_surface(ctx,
3359+ gpe_context,
3360+ mbenc_param->pres_mode_decision_prev,
3361+ 0,
3362+ res_size / 4,
3363+ 0,
3364+ VP9_BTI_MBENC_MODE_DECISION_PREV_G9);
3365+
3366+ gen9_add_buffer_gpe_surface(ctx,
3367+ gpe_context,
3368+ mbenc_param->pres_mode_decision,
3369+ 0,
3370+ res_size / 4,
3371+ 0,
3372+ VP9_BTI_MBENC_MODE_DECISION_G9);
3373+
3374+ gen9_add_buffer_2d_gpe_surface(ctx,
3375+ gpe_context,
3376+ mbenc_param->pres_output_16x16_inter_modes,
3377+ 1,
3378+ I965_SURFACEFORMAT_R8_UNORM,
3379+ VP9_BTI_MBENC_OUT_16x16_INTER_MODES_G9);
3380+
3381+ res_size = 160;
3382+
3383+ gen9_add_dri_buffer_gpe_surface(ctx,
3384+ gpe_context,
3385+ mbenc_param->gpe_context_tx->dynamic_state.bo,
3386+ 0,
3387+ ALIGN(res_size, 64),
3388+ mbenc_param->gpe_context_tx->curbe_offset,
3389+ VP9_BTI_MBENC_TX_CURBE_G9);
3390+
3391+
3392+ break;
3393+ }
3394+ case VP9_MEDIA_STATE_MBENC_TX:
3395+ {
3396+ obj_surface = mbenc_param->curr_frame_obj;
3397+
3398+ gen9_add_2d_gpe_surface(ctx,
3399+ gpe_context,
3400+ obj_surface,
3401+ 0,
3402+ 1,
3403+ I965_SURFACEFORMAT_R8_UNORM,
3404+ VP9_BTI_MBENC_CURR_Y_G9);
3405+
3406+ gen9_add_2d_gpe_surface(ctx,
3407+ gpe_context,
3408+ obj_surface,
3409+ 1,
3410+ 1,
3411+ I965_SURFACEFORMAT_R16_UINT,
3412+ VP9_BTI_MBENC_CURR_UV_G9);
3413+
3414+ if (mbenc_param->segmentation_enabled)
3415+ {
3416+ gen9_add_buffer_2d_gpe_surface(ctx,
3417+ gpe_context,
3418+ mbenc_param->pres_segmentation_map,
3419+ 1,
3420+ I965_SURFACEFORMAT_R8_UNORM,
3421+ VP9_BTI_MBENC_SEGMENTATION_MAP_G9);
3422+
3423+ }
3424+
3425+ res_size = 16 * mbenc_param->frame_width_in_mb *
3426+ mbenc_param->frame_height_in_mb * sizeof(unsigned int);
3427+ gen9_add_buffer_gpe_surface(ctx,
3428+ gpe_context,
3429+ mbenc_param->pres_mode_decision,
3430+ 0,
3431+ res_size / 4,
3432+ 0,
3433+ VP9_BTI_MBENC_MODE_DECISION_G9);
3434+
3435+ res_size = frame_width_in_sb * frame_height_in_sb * 4 * sizeof(unsigned int);
3436+ gen9_add_buffer_gpe_surface(ctx,
3437+ gpe_context,
3438+ mbenc_param->pres_mb_code_surface,
3439+ 0,
3440+ res_size / 4,
3441+ 0,
3442+ VP9_BTI_MBENC_PAK_DATA_G9);
3443+
3444+ // CU Record
3445+ res_size = frame_width_in_sb * frame_height_in_sb *
3446+ 64 * 16 * sizeof(unsigned int);
3447+
3448+ gen9_add_buffer_gpe_surface(ctx,
3449+ gpe_context,
3450+ mbenc_param->pres_mb_code_surface,
3451+ 0,
3452+ res_size / 4,
3453+ mbenc_param->mb_data_offset,
3454+ VP9_BTI_MBENC_CU_RECORDS_G9);
3455+ }
3456+ default:
3457+ break;
3458+ }
3459+
3460+ return;
3461+}
3462+
3463+static VAStatus
3464+gen9_vp9_mbenc_kernel(VADriverContextP ctx,
3465+ struct encode_state *encode_state,
3466+ struct intel_encoder_context *encoder_context,
3467+ int media_function)
3468+{
3469+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
3470+ struct i965_gpe_context *gpe_context, *tx_gpe_context;
3471+ struct gpe_media_object_walker_parameter media_object_walker_param;
3472+ struct vp9_encoder_kernel_walker_parameter kernel_walker_param;
3473+ unsigned int resolution_x, resolution_y;
3474+ struct gen9_vp9_state *vp9_state;
3475+ VAEncPictureParameterBufferVP9 *pic_param;
3476+ struct gen9_vp9_mbenc_curbe_param curbe_param;
3477+ struct gen9_vp9_mbenc_surface_param surface_param;
3478+ VAStatus va_status = VA_STATUS_SUCCESS;
3479+ int mbenc_gpe_index = 0;
3480+ struct object_surface *obj_surface;
3481+ struct gen9_surface_vp9 *vp9_priv_surface;
3482+
3483+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
3484+
3485+ if (!vp9_state || !vp9_state->pic_param)
3486+ return VA_STATUS_ERROR_ENCODING_ERROR;
3487+
3488+ pic_param = vp9_state->pic_param;
3489+
3490+ switch (media_function)
3491+ {
3492+ case VP9_MEDIA_STATE_MBENC_I_32x32:
3493+ mbenc_gpe_index = VP9_MBENC_IDX_KEY_32x32;
3494+ break;
3495+
3496+ case VP9_MEDIA_STATE_MBENC_I_16x16:
3497+ mbenc_gpe_index = VP9_MBENC_IDX_KEY_16x16;
3498+ break;
3499+
3500+ case VP9_MEDIA_STATE_MBENC_P:
3501+ mbenc_gpe_index = VP9_MBENC_IDX_INTER;
3502+ break;
3503+
3504+ case VP9_MEDIA_STATE_MBENC_TX:
3505+ mbenc_gpe_index = VP9_MBENC_IDX_TX;
3506+ break;
3507+
3508+ default:
3509+ va_status = VA_STATUS_ERROR_OPERATION_FAILED;
3510+ return va_status;
3511+ }
3512+
3513+ gpe_context = &(vme_context->mbenc_context.gpe_contexts[mbenc_gpe_index]);
3514+ tx_gpe_context = &(vme_context->mbenc_context.gpe_contexts[VP9_MBENC_IDX_TX]);
3515+
3516+ gen9_gpe_reset_binding_table(ctx, gpe_context);
3517+
3518+ // Set curbe
3519+ if (!vp9_state->mbenc_curbe_set_in_brc_update)
3520+ {
3521+ if(media_function == VP9_MEDIA_STATE_MBENC_I_32x32 ||
3522+ media_function == VP9_MEDIA_STATE_MBENC_P)
3523+ {
3524+ memset(&curbe_param, 0, sizeof(curbe_param));
3525+ curbe_param.ppic_param = vp9_state->pic_param;
3526+ curbe_param.pseq_param = vp9_state->seq_param;
3527+ curbe_param.psegment_param = vp9_state->segment_param;
3528+ curbe_param.frame_width_in_mb = vp9_state->frame_width_in_mb;
3529+ curbe_param.frame_height_in_mb = vp9_state->frame_height_in_mb;
3530+ curbe_param.last_ref_obj = vp9_state->last_ref_obj;
3531+ curbe_param.golden_ref_obj = vp9_state->golden_ref_obj;
3532+ curbe_param.alt_ref_obj = vp9_state->alt_ref_obj;
3533+ curbe_param.hme_enabled = vp9_state->hme_enabled;
3534+ curbe_param.ref_frame_flag = vp9_state->ref_frame_flag;
3535+ curbe_param.picture_coding_type = vp9_state->picture_coding_type;
3536+ curbe_param.media_state_type = media_function;
3537+ curbe_param.mbenc_curbe_set_in_brc_update = vp9_state->mbenc_curbe_set_in_brc_update;
3538+
3539+ vme_context->pfn_set_curbe_mbenc(ctx,
3540+ encode_state,
3541+ gpe_context,
3542+ encoder_context,
3543+ &curbe_param);
3544+ }
3545+ }
3546+
3547+ memset(&surface_param, 0, sizeof(surface_param));
3548+ surface_param.media_state_type = media_function;
3549+ surface_param.picture_coding_type = vp9_state->picture_coding_type;
3550+ surface_param.frame_width = vp9_state->frame_width;
3551+ surface_param.frame_height = vp9_state->frame_height;
3552+ surface_param.frame_width_in_mb = vp9_state->frame_width_in_mb;
3553+ surface_param.frame_height_in_mb = vp9_state->frame_height_in_mb;
3554+ surface_param.hme_enabled = vp9_state->hme_enabled;
3555+ surface_param.segmentation_enabled = pic_param->pic_flags.bits.segmentation_enabled;
3556+ surface_param.pres_segmentation_map = &vme_context->mb_segment_map_surface;
3557+ surface_param.ps4x_memv_data_buffer = &vme_context->s4x_memv_data_buffer;
3558+ surface_param.ps4x_memv_distortion_buffer = &vme_context->s4x_memv_distortion_buffer;
3559+ surface_param.pres_mode_decision =
3560+ &vme_context->res_mode_decision[vp9_state->curr_mode_decision_index];
3561+ surface_param.pres_mode_decision_prev =
3562+ &vme_context->res_mode_decision[!vp9_state->curr_mode_decision_index];
3563+ surface_param.pres_output_16x16_inter_modes = &vme_context->res_output_16x16_inter_modes;
3564+ surface_param.pres_mbenc_curbe_buffer = NULL;
3565+ surface_param.last_ref_obj = vp9_state->last_ref_obj;
3566+ surface_param.golden_ref_obj = vp9_state->golden_ref_obj;
3567+ surface_param.alt_ref_obj = vp9_state->alt_ref_obj;
3568+ surface_param.pres_mb_code_surface = &vme_context->res_mb_code_surface;
3569+ surface_param.gpe_context_tx = tx_gpe_context;
3570+ surface_param.mb_data_offset = vp9_state->mb_data_offset;
3571+
3572+ obj_surface = encode_state->reconstructed_object;
3573+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3574+ if (vp9_state->dys_in_use &&
3575+ (pic_param->frame_width_src != pic_param->frame_height_dst ||
3576+ pic_param->frame_height_src != pic_param->frame_height_dst)) {
3577+ obj_surface = vp9_priv_surface->dys_surface_obj;
3578+ } else
3579+ obj_surface = encode_state->input_yuv_object;
3580+
3581+ surface_param.curr_frame_obj = obj_surface;
3582+
3583+ vme_context->pfn_send_mbenc_surface(ctx,
3584+ encode_state,
3585+ gpe_context,
3586+ encoder_context,
3587+ &surface_param);
3588+
3589+ if (media_function == VP9_MEDIA_STATE_MBENC_I_32x32) {
3590+ resolution_x = ALIGN(vp9_state->frame_width, 32) / 32;
3591+ resolution_y = ALIGN(vp9_state->frame_height, 32) / 32;
3592+ } else {
3593+ resolution_x = ALIGN(vp9_state->frame_width, 16) / 16;
3594+ resolution_y = ALIGN(vp9_state->frame_height, 16) / 16;
3595+ }
3596+
3597+ memset(&kernel_walker_param, 0, sizeof(kernel_walker_param));
3598+ kernel_walker_param.resolution_x = resolution_x;
3599+ kernel_walker_param.resolution_y = resolution_y;
3600+
3601+ if (media_function == VP9_MEDIA_STATE_MBENC_P ||
3602+ media_function == VP9_MEDIA_STATE_MBENC_I_16x16) {
3603+ kernel_walker_param.use_scoreboard = 1;
3604+ kernel_walker_param.no_dependency = 0;
3605+ kernel_walker_param.walker_degree = VP9_45Z_DEGREE;
3606+ } else {
3607+ kernel_walker_param.use_scoreboard = 0;
3608+ kernel_walker_param.no_dependency = 1;
3609+ }
3610+
3611+ gen8_gpe_setup_interface_data(ctx, gpe_context);
3612+
3613+ gen9_init_media_object_walker_parameter(encoder_context, &kernel_walker_param, &media_object_walker_param);
3614+
3615+ gen9_run_kernel_media_object_walker(ctx, encoder_context,
3616+ gpe_context,
3617+ media_function,
3618+ &media_object_walker_param);
3619+ return va_status;
3620+}
3621+
3622+static void
3623+gen9_init_gpe_context_vp9(struct i965_gpe_context *gpe_context,
3624+ struct vp9_encoder_kernel_parameter *kernel_param)
3625+{
3626+ gpe_context->curbe.length = kernel_param->curbe_size; // in bytes
3627+
3628+ gpe_context->curbe_size = ALIGN(kernel_param->curbe_size, 64);
3629+
3630+ gpe_context->sampler_size = 0;
3631+ if (kernel_param->sampler_size) {
3632+ gpe_context->sampler_size = ALIGN(kernel_param->sampler_size, 64);
3633+ }
3634+
3635+ gpe_context->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64); // 8 dws, 1 register
3636+ gpe_context->idrt.max_entries = NUM_KERNELS_PER_GPE_CONTEXT;
3637+ gpe_context->idrt_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64) *
3638+ NUM_KERNELS_PER_GPE_CONTEXT;
3639+
3640+ gpe_context->surface_state_binding_table.max_entries = MAX_VP9_ENCODER_SURFACES;
3641+ gpe_context->surface_state_binding_table.binding_table_offset = 0;
3642+ gpe_context->surface_state_binding_table.surface_state_offset = ALIGN(MAX_VP9_ENCODER_SURFACES * 4, 64);
3643+ gpe_context->surface_state_binding_table.length = ALIGN(MAX_VP9_ENCODER_SURFACES * 4, 64) + ALIGN(MAX_VP9_ENCODER_SURFACES * SURFACE_STATE_PADDED_SIZE_GEN9, 64);
3644+
3645+ gpe_context->vfe_state.max_num_threads = 112; // 16 EU * 7 threads
3646+ gpe_context->vfe_state.curbe_allocation_size = MAX(1, ALIGN(gpe_context->curbe.length, 32) >> 5); // in registers
3647+ gpe_context->vfe_state.urb_entry_size = MAX(1, ALIGN(kernel_param->inline_data_size, 32) >> 5); // in registers
3648+ gpe_context->vfe_state.num_urb_entries = (MAX_URB_SIZE -
3649+ gpe_context->vfe_state.curbe_allocation_size -
3650+ ((gpe_context->idrt.entry_size >> 5) *
3651+ gpe_context->idrt.max_entries)) / gpe_context->vfe_state.urb_entry_size;
3652+ gpe_context->vfe_state.num_urb_entries = CLAMP(1, 127, gpe_context->vfe_state.num_urb_entries);
3653+ gpe_context->vfe_state.gpgpu_mode = 0;
3654+}
3655+
3656+static void
3657+gen9_init_vfe_scoreboard_vp9(struct i965_gpe_context *gpe_context,
3658+ struct vp9_encoder_scoreboard_parameter *scoreboard_param)
3659+{
3660+ gpe_context->vfe_desc5.scoreboard0.mask = scoreboard_param->mask;
3661+ gpe_context->vfe_desc5.scoreboard0.type = scoreboard_param->type;
3662+ gpe_context->vfe_desc5.scoreboard0.enable = scoreboard_param->enable;
3663+
3664+ if (scoreboard_param->walkpat_flag) {
3665+ gpe_context->vfe_desc5.scoreboard0.mask = 0x0F;
3666+ gpe_context->vfe_desc5.scoreboard0.type = 1;
3667+
3668+ gpe_context->vfe_desc6.scoreboard1.delta_x0 = 0x0;
3669+ gpe_context->vfe_desc6.scoreboard1.delta_y0 = 0xF;
3670+
3671+ gpe_context->vfe_desc6.scoreboard1.delta_x1 = 0x0;
3672+ gpe_context->vfe_desc6.scoreboard1.delta_y1 = 0xE;
3673+
3674+ gpe_context->vfe_desc6.scoreboard1.delta_x2 = 0xF;
3675+ gpe_context->vfe_desc6.scoreboard1.delta_y2 = 0x3;
3676+
3677+ gpe_context->vfe_desc6.scoreboard1.delta_x3 = 0xF;
3678+ gpe_context->vfe_desc6.scoreboard1.delta_y3 = 0x1;
3679+ } else {
3680+ // Scoreboard 0
3681+ gpe_context->vfe_desc6.scoreboard1.delta_x0 = 0xF;
3682+ gpe_context->vfe_desc6.scoreboard1.delta_y0 = 0x0;
3683+
3684+ // Scoreboard 1
3685+ gpe_context->vfe_desc6.scoreboard1.delta_x1 = 0x0;
3686+ gpe_context->vfe_desc6.scoreboard1.delta_y1 = 0xF;
3687+
3688+ // Scoreboard 2
3689+ gpe_context->vfe_desc6.scoreboard1.delta_x2 = 0x1;
3690+ gpe_context->vfe_desc6.scoreboard1.delta_y2 = 0xF;
3691+
3692+ // Scoreboard 3
3693+ gpe_context->vfe_desc6.scoreboard1.delta_x3 = 0xF;
3694+ gpe_context->vfe_desc6.scoreboard1.delta_y3 = 0xF;
3695+
3696+ // Scoreboard 4
3697+ gpe_context->vfe_desc7.scoreboard2.delta_x4 = 0xF;
3698+ gpe_context->vfe_desc7.scoreboard2.delta_y4 = 0x1;
3699+
3700+ // Scoreboard 5
3701+ gpe_context->vfe_desc7.scoreboard2.delta_x5 = 0x0;
3702+ gpe_context->vfe_desc7.scoreboard2.delta_y5 = 0xE;
3703+
3704+ // Scoreboard 6
3705+ gpe_context->vfe_desc7.scoreboard2.delta_x6 = 0x1;
3706+ gpe_context->vfe_desc7.scoreboard2.delta_y6 = 0xE;
3707+
3708+ // Scoreboard 7
3709+ gpe_context->vfe_desc7.scoreboard2.delta_x6 = 0xF;
3710+ gpe_context->vfe_desc7.scoreboard2.delta_y6 = 0xE;
3711+ }
3712+}
3713+
3714+#define VP9_MI_BLOCK_MASK 0x07
3715+#define VP9_VME_REF_WIN 48
3716+
3717+static VAStatus
3718+gen9_encode_vp9_check_parameter(VADriverContextP ctx,
3719+ struct encode_state *encode_state,
3720+ struct intel_encoder_context *encoder_context)
3721+{
3722+ struct i965_driver_data *i965 = i965_driver_data(ctx);
3723+ struct gen9_vp9_state *vp9_state;
3724+ VAEncPictureParameterBufferVP9 *pic_param;
3725+ VAEncMiscParameterTypeVP9PerSegmantParam *seg_param;
3726+ VAEncSequenceParameterBufferVP9 *seq_param;
3727+ struct object_surface *obj_surface;
3728+ struct object_buffer *obj_buffer;
3729+ struct gen9_surface_vp9 *vp9_priv_surface;
3730+
3731+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
3732+
3733+ if (!encode_state->pic_param_ext ||
3734+ !encode_state->pic_param_ext->buffer) {
3735+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3736+ }
3737+ pic_param = (VAEncPictureParameterBufferVP9 *)encode_state->pic_param_ext->buffer;
3738+
3739+ if (pic_param->frame_width_src & VP9_MI_BLOCK_MASK ||
3740+ pic_param->frame_height_src & VP9_MI_BLOCK_MASK ||
3741+ pic_param->frame_width_dst & VP9_MI_BLOCK_MASK ||
3742+ pic_param->frame_height_dst & VP9_MI_BLOCK_MASK)
3743+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3744+
3745+ obj_buffer = BUFFER(pic_param->coded_buf);
3746+
3747+ if (!obj_buffer ||
3748+ !obj_buffer->buffer_store ||
3749+ !obj_buffer->buffer_store->bo)
3750+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3751+
3752+ encode_state->coded_buf_object = obj_buffer;
3753+
3754+ vp9_state->status_buffer.bo = obj_buffer->buffer_store->bo;
3755+
3756+ encode_state->reconstructed_object = SURFACE(pic_param->reconstructed_frame);
3757+ encode_state->input_yuv_object = SURFACE(encode_state->current_render_target);
3758+
3759+ if (!encode_state->reconstructed_object ||
3760+ !encode_state->input_yuv_object)
3761+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3762+
3763+ vp9_state->curr_frame = pic_param->reconstructed_frame;
3764+ vp9_state->ref_frame_flag = 0;
3765+ if (pic_param->pic_flags.bits.frame_type == KEY_FRAME ||
3766+ pic_param->pic_flags.bits.intra_only) {
3767+ /* this will be regarded as I-frame type */
3768+ vp9_state->picture_coding_type = 0;
3769+ vp9_state->last_ref_obj = NULL;
3770+ vp9_state->golden_ref_obj = NULL;
3771+ vp9_state->alt_ref_obj = NULL;
3772+ } else {
3773+ vp9_state->picture_coding_type = 1;
3774+ vp9_state->ref_frame_flag = pic_param->ref_flags.bits.ref_frame_ctrl_l0 |
3775+ pic_param->ref_flags.bits.ref_frame_ctrl_l1;
3776+
3777+ obj_surface = SURFACE(pic_param->reference_frames[pic_param->ref_flags.bits.ref_last_idx]);
3778+ vp9_state->last_ref_obj = obj_surface;
3779+ if (!obj_surface ||
3780+ !obj_surface->bo ||
3781+ !obj_surface->private_data) {
3782+ vp9_state->last_ref_obj = NULL;
3783+ vp9_state->ref_frame_flag &= ~(VP9_LAST_REF);
3784+ }
3785+
3786+ obj_surface = SURFACE(pic_param->reference_frames[pic_param->ref_flags.bits.ref_gf_idx]);
3787+ vp9_state->golden_ref_obj = obj_surface;
3788+ if (!obj_surface ||
3789+ !obj_surface->bo ||
3790+ !obj_surface->private_data) {
3791+ vp9_state->golden_ref_obj = NULL;
3792+ vp9_state->ref_frame_flag &= ~(VP9_GOLDEN_REF);
3793+ }
3794+
3795+ obj_surface = SURFACE(pic_param->reference_frames[pic_param->ref_flags.bits.ref_arf_idx]);
3796+ vp9_state->alt_ref_obj = obj_surface;
3797+ if (!obj_surface ||
3798+ !obj_surface->bo ||
3799+ !obj_surface->private_data) {
3800+ vp9_state->alt_ref_obj = NULL;
3801+ vp9_state->ref_frame_flag &= ~(VP9_ALT_REF);
3802+ }
3803+
3804+ /* remove the duplicated flag and ref frame list */
3805+ if (vp9_state->ref_frame_flag & VP9_LAST_REF) {
3806+ if (pic_param->reference_frames[pic_param->ref_flags.bits.ref_last_idx] ==
3807+ pic_param->reference_frames[pic_param->ref_flags.bits.ref_gf_idx]) {
3808+ vp9_state->ref_frame_flag &= ~(VP9_GOLDEN_REF);
3809+ vp9_state->golden_ref_obj = NULL;
3810+ }
3811+
3812+ if (pic_param->reference_frames[pic_param->ref_flags.bits.ref_last_idx] ==
3813+ pic_param->reference_frames[pic_param->ref_flags.bits.ref_arf_idx]) {
3814+ vp9_state->ref_frame_flag &= ~(VP9_ALT_REF);
3815+ vp9_state->alt_ref_obj = NULL;
3816+ }
3817+ }
3818+
3819+ if (vp9_state->ref_frame_flag & VP9_GOLDEN_REF) {
3820+ if (pic_param->reference_frames[pic_param->ref_flags.bits.ref_gf_idx] ==
3821+ pic_param->reference_frames[pic_param->ref_flags.bits.ref_arf_idx]) {
3822+ vp9_state->ref_frame_flag &= ~(VP9_ALT_REF);
3823+ vp9_state->alt_ref_obj = NULL;
3824+ }
3825+ }
3826+
3827+ if (vp9_state->ref_frame_flag == 0)
3828+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3829+ }
3830+
3831+ seg_param = NULL;
3832+ if (pic_param->pic_flags.bits.segmentation_enabled) {
3833+ if (!encode_state->q_matrix ||
3834+ !encode_state->q_matrix->buffer) {
3835+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3836+ }
3837+ seg_param = (VAEncMiscParameterTypeVP9PerSegmantParam *)
3838+ encode_state->q_matrix->buffer;
3839+ }
3840+
3841+ seq_param = NULL;
3842+ if (encode_state->seq_param_ext &&
3843+ encode_state->seq_param_ext->buffer)
3844+ seq_param = (VAEncSequenceParameterBufferVP9 *)encode_state->seq_param_ext->buffer;
3845+
3846+ vp9_state->pic_param = pic_param;
3847+ vp9_state->segment_param = seg_param;
3848+ vp9_state->seq_param = seq_param;
3849+
3850+ obj_surface = encode_state->reconstructed_object;
3851+ if (pic_param->frame_width_dst > obj_surface->orig_width ||
3852+ pic_param->frame_height_dst > obj_surface->orig_height)
3853+ return VA_STATUS_ERROR_INVALID_SURFACE;
3854+
3855+ if (!vp9_state->dys_enabled &&
3856+ ((pic_param->frame_width_src != pic_param->frame_width_dst) ||
3857+ (pic_param->frame_height_src != pic_param->frame_height_dst)))
3858+ return VA_STATUS_ERROR_UNIMPLEMENTED;
3859+
3860+ if (vp9_state->brc_enabled) {
3861+ if (!vp9_state->target_bit_rate && seq_param) {
3862+ vp9_state->brc_reset = 1;
3863+ vp9_state->target_bit_rate = seq_param->bits_per_second;
3864+ vp9_state->gop_size = seq_param->intra_period;
3865+ }
3866+
3867+ if (vp9_state->target_bit_rate != seq_param->bits_per_second) {
3868+ vp9_state->brc_reset = 1;
3869+ vp9_state->target_bit_rate = seq_param->bits_per_second;
3870+ }
3871+ if (vp9_state->gop_size != seq_param->intra_period) {
3872+ vp9_state->brc_reset = 1;
3873+ vp9_state->gop_size = seq_param->intra_period;
3874+ }
3875+
3876+ /* check Misc Rate_Control, Frame_rate buffer */
3877+ }
3878+
3879+ vp9_state->frame_width = pic_param->frame_width_dst;
3880+ vp9_state->frame_height = pic_param->frame_height_dst;
3881+
3882+ vp9_state->frame_width_4x = ALIGN(vp9_state->frame_width / 4, 16);
3883+ vp9_state->frame_height_4x = ALIGN(vp9_state->frame_height / 4, 16);
3884+
3885+ vp9_state->frame_width_16x = ALIGN(vp9_state->frame_width / 16, 16);
3886+ vp9_state->frame_height_16x = ALIGN(vp9_state->frame_height / 16, 16);
3887+
3888+ vp9_state->frame_width_in_mb = ALIGN(vp9_state->frame_width, 16) / 16;
3889+ vp9_state->frame_height_in_mb = ALIGN(vp9_state->frame_height, 16) / 16;
3890+
3891+ vp9_state->downscaled_width_4x_in_mb = vp9_state->frame_width_4x / 16;
3892+ vp9_state->downscaled_height_4x_in_mb = vp9_state->frame_height_4x / 16;
3893+ vp9_state->downscaled_width_16x_in_mb = vp9_state->frame_width_16x / 16;
3894+ vp9_state->downscaled_height_16x_in_mb = vp9_state->frame_height_16x / 16;
3895+
3896+ vp9_state->dys_in_use = 0;
3897+ if(pic_param->frame_width_src != pic_param->frame_width_dst ||
3898+ pic_param->frame_height_src != pic_param->frame_height_dst)
3899+ vp9_state->dys_in_use = 1;
3900+ vp9_state->dys_ref_frame_flag = 0;
3901+ /* check the dys setting. The dys is supported by default. */
3902+ if (pic_param->pic_flags.bits.frame_type != KEY_FRAME &&
3903+ !pic_param->pic_flags.bits.intra_only) {
3904+ vp9_state->dys_ref_frame_flag = vp9_state->ref_frame_flag;
3905+
3906+ if (vp9_state->ref_frame_flag & VP9_LAST_REF) {
3907+ obj_surface = vp9_state->last_ref_obj;
3908+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3909+
3910+ if (vp9_state->frame_width == vp9_priv_surface->frame_width &&
3911+ vp9_state->frame_height == vp9_priv_surface->frame_height)
3912+ vp9_state->dys_ref_frame_flag &= ~(VP9_LAST_REF);
3913+ }
3914+ if (vp9_state->ref_frame_flag & VP9_GOLDEN_REF) {
3915+ obj_surface = vp9_state->golden_ref_obj;
3916+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3917+
3918+ if (vp9_state->frame_width == vp9_priv_surface->frame_width &&
3919+ vp9_state->frame_height == vp9_priv_surface->frame_height)
3920+ vp9_state->dys_ref_frame_flag &= ~(VP9_GOLDEN_REF);
3921+ }
3922+ if (vp9_state->ref_frame_flag & VP9_ALT_REF) {
3923+ obj_surface = vp9_state->alt_ref_obj;
3924+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
3925+
3926+ if (vp9_state->frame_width == vp9_priv_surface->frame_width &&
3927+ vp9_state->frame_height == vp9_priv_surface->frame_height)
3928+ vp9_state->dys_ref_frame_flag &= ~(VP9_ALT_REF);
3929+ }
3930+ if (vp9_state->dys_ref_frame_flag)
3931+ vp9_state->dys_in_use = 1;
3932+ }
3933+
3934+ if (vp9_state->hme_supported) {
3935+ vp9_state->hme_enabled = 1;
3936+ } else {
3937+ vp9_state->hme_enabled = 0;
3938+ }
3939+
3940+ if (vp9_state->b16xme_supported) {
3941+ vp9_state->b16xme_enabled = 1;
3942+ } else {
3943+ vp9_state->b16xme_enabled = 0;
3944+ }
3945+
3946+ /* disable HME/16xME if the size is too small */
3947+ if (vp9_state->frame_width_4x <= VP9_VME_REF_WIN ||
3948+ vp9_state->frame_height_4x <= VP9_VME_REF_WIN) {
3949+ vp9_state->hme_enabled = 0;
3950+ vp9_state->b16xme_enabled = 0;
3951+ }
3952+
3953+ if (vp9_state->frame_width_16x < VP9_VME_REF_WIN ||
3954+ vp9_state->frame_height_16x < VP9_VME_REF_WIN)
3955+ vp9_state->b16xme_enabled = 0;
3956+
3957+ if (pic_param->pic_flags.bits.frame_type == HCP_VP9_KEY_FRAME ||
3958+ pic_param->pic_flags.bits.intra_only) {
3959+ vp9_state->hme_enabled = 0;
3960+ vp9_state->b16xme_enabled = 0;
3961+ }
3962+
3963+ if (vp9_state->picture_coding_type &&
3964+ vp9_state->brc_distortion_buffer_supported)
3965+ vp9_state->mbenc_keyframe_dist_enabled = 1;
3966+
3967+ return VA_STATUS_SUCCESS;
3968+}
3969+
3970+static VAStatus
3971+gen9_vme_gpe_kernel_prepare_vp9(VADriverContextP ctx,
3972+ struct encode_state *encode_state,
3973+ struct intel_encoder_context *encoder_context)
3974+{
3975+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
3976+ struct vp9_surface_param surface_param;
3977+ struct gen9_vp9_state *vp9_state;
3978+ VAEncPictureParameterBufferVP9 *pic_param;
3979+ struct object_surface *obj_surface;
3980+ struct gen9_surface_vp9 *vp9_surface;
3981+ int driver_header_flag = 0;
3982+ VAStatus va_status;
3983+
3984+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
3985+
3986+ if (!vp9_state || !vp9_state->pic_param)
3987+ return VA_STATUS_ERROR_INVALID_PARAMETER;
3988+
3989+ pic_param = vp9_state->pic_param;
3990+
3991+ /* this is to check whether the driver should generate the uncompressed header */
3992+ driver_header_flag = 1;
3993+ if (encode_state->packed_header_data_ext &&
3994+ encode_state->packed_header_data_ext[0] &&
3995+ pic_param->bit_offset_first_partition_size) {
3996+ VAEncPackedHeaderParameterBuffer *param = NULL;
3997+
3998+ param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_params_ext[0]->buffer;
3999+
4000+ if (param->type == VAEncPackedHeaderRawData) {
4001+ char *header_data;
4002+ unsigned int length_in_bits;
4003+
4004+ header_data = (char *)encode_state->packed_header_data_ext[0]->buffer;
4005+ length_in_bits = param->bit_length;
4006+ driver_header_flag = 0;
4007+
4008+ vp9_state->frame_header.bit_offset_first_partition_size =
4009+ pic_param->bit_offset_first_partition_size;
4010+ vp9_state->header_length = ALIGN(length_in_bits, 8) >> 3;
4011+ vp9_state->alias_insert_data = header_data;
4012+
4013+ vp9_state->frame_header.bit_offset_ref_lf_delta = pic_param->bit_offset_ref_lf_delta;
4014+ vp9_state->frame_header.bit_offset_mode_lf_delta = pic_param->bit_offset_mode_lf_delta;
4015+ vp9_state->frame_header.bit_offset_lf_level = pic_param->bit_offset_lf_level;
4016+ vp9_state->frame_header.bit_offset_qindex = pic_param->bit_offset_qindex;
4017+ vp9_state->frame_header.bit_offset_segmentation = pic_param->bit_offset_segmentation;
4018+ vp9_state->frame_header.bit_size_segmentation = pic_param->bit_size_segmentation;
4019+ }
4020+ }
4021+
4022+ if (driver_header_flag) {
4023+ memset(&vp9_state->frame_header, 0, sizeof(vp9_state->frame_header));
4024+ intel_write_uncompressed_header(encode_state,
4025+ VAProfileVP9Profile0,
4026+ vme_context->frame_header_data,
4027+ &vp9_state->header_length,
4028+ &vp9_state->frame_header);
4029+ vp9_state->alias_insert_data = vme_context->frame_header_data;
4030+ }
4031+
4032+ va_status = i965_check_alloc_surface_bo(ctx, encode_state->input_yuv_object,
4033+ 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420);
4034+ if (va_status != VA_STATUS_SUCCESS)
4035+ return va_status;
4036+
4037+ va_status = i965_check_alloc_surface_bo(ctx, encode_state->reconstructed_object,
4038+ 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420);
4039+
4040+ if (va_status != VA_STATUS_SUCCESS)
4041+ return va_status;
4042+
4043+ surface_param.frame_width = vp9_state->frame_width;
4044+ surface_param.frame_height = vp9_state->frame_height;
4045+ va_status = gen9_vp9_init_check_surfaces(ctx,
4046+ encode_state->reconstructed_object,
4047+ &surface_param);
4048+
4049+ {
4050+ vp9_surface = (struct gen9_surface_vp9*)encode_state->reconstructed_object;
4051+
4052+ vp9_surface->qp_value = pic_param->luma_ac_qindex + pic_param->luma_dc_qindex_delta;
4053+ }
4054+ if (vp9_state->dys_in_use &&
4055+ (pic_param->frame_width_src != pic_param->frame_width_dst ||
4056+ pic_param->frame_height_src != pic_param->frame_height_dst)) {
4057+ surface_param.frame_width = pic_param->frame_width_dst;
4058+ surface_param.frame_height = pic_param->frame_height_dst;
4059+ va_status = gen9_vp9_check_dys_surfaces(ctx,
4060+ encode_state->reconstructed_object,
4061+ &surface_param);
4062+
4063+ if (va_status)
4064+ return va_status;
4065+ }
4066+
4067+ if (vp9_state->dys_ref_frame_flag) {
4068+ if (vp9_state->dys_ref_frame_flag & VP9_LAST_REF) {
4069+ obj_surface = vp9_state->last_ref_obj;
4070+ surface_param.frame_width = vp9_state->frame_width;
4071+ surface_param.frame_height = vp9_state->frame_height;
4072+ va_status = gen9_vp9_check_dys_surfaces(ctx,
4073+ obj_surface,
4074+ &surface_param);
4075+
4076+ if (va_status)
4077+ return va_status;
4078+ }
4079+ if (vp9_state->dys_ref_frame_flag & VP9_GOLDEN_REF) {
4080+ obj_surface = vp9_state->golden_ref_obj;
4081+ surface_param.frame_width = vp9_state->frame_width;
4082+ surface_param.frame_height = vp9_state->frame_height;
4083+ va_status = gen9_vp9_check_dys_surfaces(ctx,
4084+ obj_surface,
4085+ &surface_param);
4086+
4087+ if (va_status)
4088+ return va_status;
4089+ }
4090+ if (vp9_state->dys_ref_frame_flag & VP9_ALT_REF) {
4091+ obj_surface = vp9_state->alt_ref_obj;
4092+ surface_param.frame_width = vp9_state->frame_width;
4093+ surface_param.frame_height = vp9_state->frame_height;
4094+ va_status = gen9_vp9_check_dys_surfaces(ctx,
4095+ obj_surface,
4096+ &surface_param);
4097+
4098+ if (va_status)
4099+ return va_status;
4100+ }
4101+ }
4102+
4103+ if (va_status != VA_STATUS_SUCCESS)
4104+ return va_status;
4105+ /* check the corresponding ref_frame_flag && dys_ref_frame_flag */
4106+
4107+ return VA_STATUS_SUCCESS;
4108+}
4109+
4110+static VAStatus
4111+gen9_vme_gpe_kernel_init_vp9(VADriverContextP ctx,
4112+ struct encode_state *encode_state,
4113+ struct intel_encoder_context *encoder_context)
4114+{
4115+ struct i965_driver_data *i965 = i965_driver_data(ctx);
4116+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
4117+ struct vp9_mbenc_context *mbenc_context = &vme_context->mbenc_context;
4118+ struct vp9_dys_context *dys_context = &vme_context->dys_context;
4119+ struct gpe_dynamic_state_parameter ds_param;
4120+ int i;
4121+
4122+ /*
4123+ * BRC will update MBEnc curbe data buffer, so initialize GPE context for
4124+ * MBEnc first
4125+ */
4126+ for (i = 0; i < NUM_VP9_MBENC; i++) {
4127+ gen8_gpe_context_init(ctx, &mbenc_context->gpe_contexts[i]);
4128+ }
4129+
4130+ /*
4131+ * VP9_MBENC_XXX uses the same dynamic state buffer as they share the same
4132+ * curbe_buffer.
4133+ */
4134+ ds_param.bo_size = ALIGN(sizeof(vp9_mbenc_curbe_data), 64) + 128 +
4135+ ALIGN(sizeof(struct gen8_interface_descriptor_data), 64) * NUM_VP9_MBENC;
4136+ mbenc_context->mbenc_bo_dys = dri_bo_alloc(i965->intel.bufmgr,
4137+ "mbenc_dys",
4138+ ds_param.bo_size,
4139+ 0x1000);
4140+ mbenc_context->mbenc_bo_size = ds_param.bo_size;
4141+
4142+ ds_param.bo = mbenc_context->mbenc_bo_dys;
4143+ ds_param.curbe_offset = 0;
4144+ ds_param.sampler_offset = ALIGN(sizeof(vp9_mbenc_curbe_data), 64);
4145+ for (i = 0; i < NUM_VP9_MBENC; i++) {
4146+ ds_param.idrt_offset = ds_param.sampler_offset + 128 +
4147+ ALIGN(sizeof(struct gen8_interface_descriptor_data), 64) * i;
4148+
4149+ gen8_gpe_context_set_dynamic_buffer(ctx,
4150+ &mbenc_context->gpe_contexts[i],
4151+ &ds_param);
4152+ }
4153+
4154+ gen8_gpe_context_init(ctx, &dys_context->gpe_context);
4155+ gen9_vp9_dys_set_sampler_state(&dys_context->gpe_context);
4156+
4157+ return VA_STATUS_SUCCESS;
4158+}
4159+
4160+static VAStatus
4161+gen9_vme_gpe_kernel_final_vp9(VADriverContextP ctx,
4162+ struct encode_state *encode_state,
4163+ struct intel_encoder_context *encoder_context)
4164+{
4165+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
4166+ struct vp9_mbenc_context *mbenc_context = &vme_context->mbenc_context;
4167+
4168+ dri_bo_unreference(mbenc_context->mbenc_bo_dys);
4169+ mbenc_context->mbenc_bo_dys = NULL;
4170+
4171+ return VA_STATUS_SUCCESS;
4172+}
4173+
4174+static VAStatus
4175+gen9_vme_gpe_kernel_run_vp9(VADriverContextP ctx,
4176+ struct encode_state *encode_state,
4177+ struct intel_encoder_context *encoder_context)
4178+{
4179+ struct gen9_encoder_context_vp9 *vme_context = encoder_context->vme_context;
4180+ struct gen9_vp9_state *vp9_state;
4181+ int i;
4182+
4183+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
4184+
4185+ if (!vp9_state || !vp9_state->pic_param)
4186+ return VA_STATUS_ERROR_INVALID_PARAMETER;
4187+
4188+ if (vp9_state->dys_in_use) {
4189+ gen9_vp9_run_dys_refframes(ctx, encode_state, encoder_context);
4190+ }
4191+
4192+ if (vp9_state->brc_enabled && (vp9_state->brc_reset || !vp9_state->brc_inited)) {
4193+ gen9_vp9_brc_init_reset_kernel(ctx, encode_state, encoder_context);
4194+ }
4195+
4196+ if (vp9_state->picture_coding_type == KEY_FRAME) {
4197+ for (i = 0; i < 2; i++)
4198+ i965_zero_gpe_resource(&vme_context->res_mode_decision[i]);
4199+ }
4200+
4201+ if (vp9_state->hme_supported) {
4202+ gen9_vp9_scaling_kernel(ctx, encode_state,
4203+ encoder_context,
4204+ 0);
4205+ if (vp9_state->b16xme_supported) {
4206+ gen9_vp9_scaling_kernel(ctx, encode_state,
4207+ encoder_context,
4208+ 1);
4209+ }
4210+ }
4211+
4212+ if (vp9_state->picture_coding_type && vp9_state->hme_enabled) {
4213+ if (vp9_state->b16xme_enabled)
4214+ gen9_vp9_me_kernel(ctx, encode_state,
4215+ encoder_context,
4216+ 1);
4217+
4218+ gen9_vp9_me_kernel(ctx, encode_state,
4219+ encoder_context,
4220+ 0);
4221+ }
4222+
4223+ if (vp9_state->brc_enabled) {
4224+ if (vp9_state->mbenc_keyframe_dist_enabled)
4225+ gen9_vp9_brc_intra_dist_kernel(ctx,
4226+ encode_state,
4227+ encoder_context);
4228+
4229+ gen9_vp9_brc_update_kernel(ctx, encode_state,
4230+ encoder_context);
4231+ }
4232+
4233+ if (vp9_state->picture_coding_type == KEY_FRAME) {
4234+ gen9_vp9_mbenc_kernel(ctx, encode_state,
4235+ encoder_context,
4236+ VP9_MEDIA_STATE_MBENC_I_32x32);
4237+ gen9_vp9_mbenc_kernel(ctx, encode_state,
4238+ encoder_context,
4239+ VP9_MEDIA_STATE_MBENC_I_16x16);
4240+ } else {
4241+ gen9_vp9_mbenc_kernel(ctx, encode_state,
4242+ encoder_context,
4243+ VP9_MEDIA_STATE_MBENC_P);
4244+ }
4245+
4246+ gen9_vp9_mbenc_kernel(ctx, encode_state,
4247+ encoder_context,
4248+ VP9_MEDIA_STATE_MBENC_TX);
4249+
4250+ vp9_state->curr_mode_decision_index ^= 1;
4251+ if (vp9_state->brc_enabled) {
4252+ vp9_state->brc_inited = 1;
4253+ vp9_state->brc_reset = 0;
4254+ }
4255+
4256+ return VA_STATUS_SUCCESS;
4257+}
4258+
4259+static VAStatus
4260+gen9_vme_pipeline_vp9(VADriverContextP ctx,
4261+ VAProfile profile,
4262+ struct encode_state *encode_state,
4263+ struct intel_encoder_context *encoder_context)
4264+{
4265+ VAStatus va_status;
4266+ struct gen9_vp9_state *vp9_state;
4267+
4268+ vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state;
4269+
4270+ if (!vp9_state)
4271+ return VA_STATUS_ERROR_INVALID_CONTEXT;
4272+
4273+ va_status = gen9_encode_vp9_check_parameter(ctx, encode_state, encoder_context);
4274+ if (va_status != VA_STATUS_SUCCESS)
4275+ return va_status;
4276+
4277+ va_status = gen9_vp9_allocate_resources(ctx, encode_state,
4278+ encoder_context,
4279+ !vp9_state->brc_allocated);
4280+
4281+ if (va_status != VA_STATUS_SUCCESS)
4282+ return va_status;
4283+ vp9_state->brc_allocated = 1;
4284+
4285+ va_status = gen9_vme_gpe_kernel_prepare_vp9(ctx, encode_state, encoder_context);
4286+
4287+ if (va_status != VA_STATUS_SUCCESS)
4288+ return va_status;
4289+
4290+ va_status = gen9_vme_gpe_kernel_init_vp9(ctx, encode_state, encoder_context);
4291+ if (va_status != VA_STATUS_SUCCESS)
4292+ return va_status;
4293+
4294+ va_status = gen9_vme_gpe_kernel_run_vp9(ctx, encode_state, encoder_context);
4295+ if (va_status != VA_STATUS_SUCCESS)
4296+ return va_status;
4297+
4298+ gen9_vme_gpe_kernel_final_vp9(ctx, encode_state, encoder_context);
4299+
4300+ return VA_STATUS_SUCCESS;
4301+}
4302+
4303+static void
4304+gen9_vme_brc_context_destroy_vp9(struct vp9_brc_context *brc_context)
4305+{
4306+ int i;
4307+
4308+ for (i = 0; i < NUM_VP9_BRC; i++)
4309+ gen8_gpe_context_destroy(&brc_context->gpe_contexts[i]);
4310+}
4311+
4312+static void
4313+gen9_vme_scaling_context_destroy_vp9(struct vp9_scaling_context *scaling_context)
4314+{
4315+ int i;
4316+
4317+ for (i = 0; i < NUM_VP9_SCALING; i++)
4318+ gen8_gpe_context_destroy(&scaling_context->gpe_contexts[i]);
4319+}
4320+
4321+static void
4322+gen9_vme_me_context_destroy_vp9(struct vp9_me_context *me_context)
4323+{
4324+ gen8_gpe_context_destroy(&me_context->gpe_context);
4325+}
4326+
4327+static void
4328+gen9_vme_mbenc_context_destroy_vp9(struct vp9_mbenc_context *mbenc_context)
4329+{
4330+ int i;
4331+
4332+ for (i = 0; i < NUM_VP9_MBENC; i++)
4333+ gen8_gpe_context_destroy(&mbenc_context->gpe_contexts[i]);
4334+ dri_bo_unreference(mbenc_context->mbenc_bo_dys);
4335+ mbenc_context->mbenc_bo_size = 0;
4336+}
4337+
4338+static void
4339+gen9_vme_dys_context_destroy_vp9(struct vp9_dys_context *dys_context)
4340+{
4341+ gen8_gpe_context_destroy(&dys_context->gpe_context);
4342+}
4343+
4344+static void
4345+gen9_vme_kernel_context_destroy_vp9(struct gen9_encoder_context_vp9 *vme_context)
4346+{
4347+ gen9_vp9_free_resources(vme_context);
4348+ gen9_vme_scaling_context_destroy_vp9(&vme_context->scaling_context);
4349+ gen9_vme_me_context_destroy_vp9(&vme_context->me_context);
4350+ gen9_vme_mbenc_context_destroy_vp9(&vme_context->mbenc_context);
4351+ gen9_vme_brc_context_destroy_vp9(&vme_context->brc_context);
4352+ gen9_vme_dys_context_destroy_vp9(&vme_context->dys_context);
4353+
4354+ return;
4355+}
4356+
4357+static void
4358+gen9_vme_context_destroy_vp9(void *context)
4359+{
4360+ struct gen9_encoder_context_vp9 *vme_context = context;
4361+
4362+ if (!vme_context)
4363+ return;
4364+
4365+ gen9_vme_kernel_context_destroy_vp9(vme_context);
4366+
4367+ free(vme_context);
4368+
4369+ return;
4370+}
4371+
4372+static void
4373+gen9_vme_scaling_context_init_vp9(VADriverContextP ctx,
4374+ struct gen9_encoder_context_vp9 *vme_context,
4375+ struct vp9_scaling_context *scaling_context)
4376+{
4377+ struct i965_gpe_context *gpe_context = NULL;
4378+ struct vp9_encoder_kernel_parameter kernel_param;
4379+ struct vp9_encoder_scoreboard_parameter scoreboard_param;
4380+ struct i965_kernel scale_kernel;
4381+
4382+ kernel_param.curbe_size = sizeof(vp9_scaling4x_curbe_data_cm);
4383+ kernel_param.inline_data_size = sizeof(vp9_scaling4x_inline_data_cm);
4384+ kernel_param.sampler_size = 0;
4385+
4386+ memset(&scoreboard_param, 0, sizeof(scoreboard_param));
4387+ scoreboard_param.mask = 0xFF;
4388+ scoreboard_param.enable = vme_context->use_hw_scoreboard;
4389+ scoreboard_param.type = vme_context->use_hw_non_stalling_scoreboard;
4390+ scoreboard_param.walkpat_flag = 0;
4391+
4392+ gpe_context = &scaling_context->gpe_contexts[0];
4393+ gen9_init_gpe_context_vp9(gpe_context, &kernel_param);
4394+ gen9_init_vfe_scoreboard_vp9(gpe_context, &scoreboard_param);
4395+
4396+ scaling_context->scaling_4x_bti.scaling_frame_src_y = VP9_BTI_SCALING_FRAME_SRC_Y;
4397+ scaling_context->scaling_4x_bti.scaling_frame_dst_y = VP9_BTI_SCALING_FRAME_DST_Y;
4398+ scaling_context->scaling_4x_bti.scaling_frame_mbv_proc_stat_dst =
4399+ VP9_BTI_SCALING_FRAME_MBVPROCSTATS_DST_CM;
4400+
4401+ memset(&scale_kernel, 0, sizeof(scale_kernel));
4402+
4403+ intel_vp9_get_kernel_header_and_size((void *)media_vp9_kernels,
4404+ sizeof(media_vp9_kernels),
4405+ INTEL_VP9_ENC_SCALING4X,
4406+ 0,
4407+ &scale_kernel);
4408+
4409+ gen8_gpe_load_kernels(ctx,
4410+ gpe_context,
4411+ &scale_kernel,
4412+ 1);
4413+
4414+ kernel_param.curbe_size = sizeof(vp9_scaling2x_curbe_data_cm);
4415+ kernel_param.inline_data_size = 0;
4416+ kernel_param.sampler_size = 0;
4417+
4418+ gpe_context = &scaling_context->gpe_contexts[1];
4419+ gen9_init_gpe_context_vp9(gpe_context, &kernel_param);
4420+ gen9_init_vfe_scoreboard_vp9(gpe_context, &scoreboard_param);
4421+
4422+ memset(&scale_kernel, 0, sizeof(scale_kernel));
4423+
4424+ intel_vp9_get_kernel_header_and_size((void *)media_vp9_kernels,
4425+ sizeof(media_vp9_kernels),
4426+ INTEL_VP9_ENC_SCALING2X,
4427+ 0,
4428+ &scale_kernel);
4429+
4430+ gen8_gpe_load_kernels(ctx,
4431+ gpe_context,
4432+ &scale_kernel,
4433+ 1);
4434+
4435+ scaling_context->scaling_2x_bti.scaling_frame_src_y = VP9_BTI_SCALING_FRAME_SRC_Y;
4436+ scaling_context->scaling_2x_bti.scaling_frame_dst_y = VP9_BTI_SCALING_FRAME_DST_Y;
4437+ return;
4438+}
4439+
4440+static void
4441+gen9_vme_me_context_init_vp9(VADriverContextP ctx,
4442+ struct gen9_encoder_context_vp9 *vme_context,
4443+ struct vp9_me_context *me_context)
4444+{
4445+ struct i965_gpe_context *gpe_context = NULL;
4446+ struct vp9_encoder_kernel_parameter kernel_param;
4447+ struct vp9_encoder_scoreboard_parameter scoreboard_param;
4448+ struct i965_kernel scale_kernel;
4449+
4450+ kernel_param.curbe_size = sizeof(vp9_me_curbe_data);
4451+ kernel_param.inline_data_size = 0;
4452+ kernel_param.sampler_size = 0;
4453+
4454+ memset(&scoreboard_param, 0, sizeof(scoreboard_param));
4455+ scoreboard_param.mask = 0xFF;
4456+ scoreboard_param.enable = vme_context->use_hw_scoreboard;
4457+ scoreboard_param.type = vme_context->use_hw_non_stalling_scoreboard;
4458+ scoreboard_param.walkpat_flag = 0;
4459+
4460+ gpe_context = &me_context->gpe_context;
4461+ gen9_init_gpe_context_vp9(gpe_context, &kernel_param);
4462+ gen9_init_vfe_scoreboard_vp9(gpe_context, &scoreboard_param);
4463+
4464+ memset(&scale_kernel, 0, sizeof(scale_kernel));
4465+
4466+ intel_vp9_get_kernel_header_and_size((void *)media_vp9_kernels,
4467+ sizeof(media_vp9_kernels),
4468+ INTEL_VP9_ENC_ME,
4469+ 0,
4470+ &scale_kernel);
4471+
4472+ gen8_gpe_load_kernels(ctx,
4473+ gpe_context,
4474+ &scale_kernel,
4475+ 1);
4476+
4477+ return;
4478+}
4479+
4480+static void
4481+gen9_vme_mbenc_context_init_vp9(VADriverContextP ctx,
4482+ struct gen9_encoder_context_vp9 *vme_context,
4483+ struct vp9_mbenc_context *mbenc_context)
4484+{
4485+ struct i965_gpe_context *gpe_context = NULL;
4486+ struct vp9_encoder_kernel_parameter kernel_param;
4487+ struct vp9_encoder_scoreboard_parameter scoreboard_param;
4488+ int i;
4489+ struct i965_kernel scale_kernel;
4490+
4491+ kernel_param.curbe_size = sizeof(vp9_mbenc_curbe_data);
4492+ kernel_param.inline_data_size = 0;
4493+ kernel_param.sampler_size = 0;
4494+
4495+ memset(&scoreboard_param, 0, sizeof(scoreboard_param));
4496+ scoreboard_param.mask = 0xFF;
4497+ scoreboard_param.enable = vme_context->use_hw_scoreboard;
4498+ scoreboard_param.type = vme_context->use_hw_non_stalling_scoreboard;
4499+
4500+ for (i = 0; i < NUM_VP9_MBENC; i++) {
4501+ gpe_context = &mbenc_context->gpe_contexts[i];
4502+
4503+ if ((i == VP9_MBENC_IDX_KEY_16x16) ||
4504+ (i == VP9_MBENC_IDX_INTER)) {
4505+ scoreboard_param.walkpat_flag = 1;
4506+ } else
4507+ scoreboard_param.walkpat_flag = 0;
4508+
4509+ gen9_init_gpe_context_vp9(gpe_context, &kernel_param);
4510+ gen9_init_vfe_scoreboard_vp9(gpe_context, &scoreboard_param);
4511+
4512+ memset(&scale_kernel, 0, sizeof(scale_kernel));
4513+
4514+ intel_vp9_get_kernel_header_and_size((void *)media_vp9_kernels,
4515+ sizeof(media_vp9_kernels),
4516+ INTEL_VP9_ENC_MBENC,
4517+ i,
4518+ &scale_kernel);
4519+
4520+ gen8_gpe_load_kernels(ctx,
4521+ gpe_context,
4522+ &scale_kernel,
4523+ 1);
4524+ }
4525+}
4526+
4527+static void
4528+gen9_vme_brc_context_init_vp9(VADriverContextP ctx,
4529+ struct gen9_encoder_context_vp9 *vme_context,
4530+ struct vp9_brc_context *brc_context)
4531+{
4532+ struct i965_gpe_context *gpe_context = NULL;
4533+ struct vp9_encoder_kernel_parameter kernel_param;
4534+ struct vp9_encoder_scoreboard_parameter scoreboard_param;
4535+ int i;
4536+ struct i965_kernel scale_kernel;
4537+
4538+ kernel_param.curbe_size = sizeof(vp9_brc_curbe_data);
4539+ kernel_param.inline_data_size = 0;
4540+ kernel_param.sampler_size = 0;
4541+
4542+ memset(&scoreboard_param, 0, sizeof(scoreboard_param));
4543+ scoreboard_param.mask = 0xFF;
4544+ scoreboard_param.enable = vme_context->use_hw_scoreboard;
4545+ scoreboard_param.type = vme_context->use_hw_non_stalling_scoreboard;
4546+
4547+ for (i = 0; i < NUM_VP9_BRC; i++) {
4548+ gpe_context = &brc_context->gpe_contexts[i];
4549+ gen9_init_gpe_context_vp9(gpe_context, &kernel_param);
4550+ gen9_init_vfe_scoreboard_vp9(gpe_context, &scoreboard_param);
4551+
4552+ memset(&scale_kernel, 0, sizeof(scale_kernel));
4553+
4554+ intel_vp9_get_kernel_header_and_size((void *)media_vp9_kernels,
4555+ sizeof(media_vp9_kernels),
4556+ INTEL_VP9_ENC_BRC,
4557+ i,
4558+ &scale_kernel);
4559+
4560+ gen8_gpe_load_kernels(ctx,
4561+ gpe_context,
4562+ &scale_kernel,
4563+ 1);
4564+ }
4565+}
4566+
4567+static void
4568+gen9_vme_dys_context_init_vp9(VADriverContextP ctx,
4569+ struct gen9_encoder_context_vp9 *vme_context,
4570+ struct vp9_dys_context *dys_context)
4571+{
4572+ struct i965_gpe_context *gpe_context = NULL;
4573+ struct vp9_encoder_kernel_parameter kernel_param;
4574+ struct vp9_encoder_scoreboard_parameter scoreboard_param;
4575+ struct i965_kernel scale_kernel;
4576+
4577+ kernel_param.curbe_size = sizeof(vp9_dys_curbe_data);
4578+ kernel_param.inline_data_size = 0;
4579+ kernel_param.sampler_size = sizeof(struct gen9_sampler_8x8_avs);
4580+
4581+ memset(&scoreboard_param, 0, sizeof(scoreboard_param));
4582+ scoreboard_param.mask = 0xFF;
4583+ scoreboard_param.enable = vme_context->use_hw_scoreboard;
4584+ scoreboard_param.type = vme_context->use_hw_non_stalling_scoreboard;
4585+ scoreboard_param.walkpat_flag = 0;
4586+
4587+ gpe_context = &dys_context->gpe_context;
4588+ gen9_init_gpe_context_vp9(gpe_context, &kernel_param);
4589+ gen9_init_vfe_scoreboard_vp9(gpe_context, &scoreboard_param);
4590+
4591+ memset(&scale_kernel, 0, sizeof(scale_kernel));
4592+
4593+ intel_vp9_get_kernel_header_and_size((void *)media_vp9_kernels,
4594+ sizeof(media_vp9_kernels),
4595+ INTEL_VP9_ENC_DYS,
4596+ 0,
4597+ &scale_kernel);
4598+
4599+ gen8_gpe_load_kernels(ctx,
4600+ gpe_context,
4601+ &scale_kernel,
4602+ 1);
4603+
4604+ return;
4605+}
4606+
4607+static Bool
4608+gen9_vme_kernels_context_init_vp9(VADriverContextP ctx,
4609+ struct intel_encoder_context *encoder_context,
4610+ struct gen9_encoder_context_vp9 *vme_context)
4611+{
4612+ gen9_vme_scaling_context_init_vp9(ctx, vme_context, &vme_context->scaling_context);
4613+ gen9_vme_me_context_init_vp9(ctx, vme_context, &vme_context->me_context);
4614+ gen9_vme_mbenc_context_init_vp9(ctx, vme_context, &vme_context->mbenc_context);
4615+ gen9_vme_dys_context_init_vp9(ctx, vme_context, &vme_context->dys_context);
4616+ gen9_vme_brc_context_init_vp9(ctx, vme_context, &vme_context->brc_context);
4617+
4618+ vme_context->pfn_set_curbe_brc = gen9_vp9_set_curbe_brc;
4619+ vme_context->pfn_set_curbe_me = gen9_vp9_set_curbe_me;
4620+ vme_context->pfn_send_me_surface = gen9_vp9_send_me_surface;
4621+ vme_context->pfn_send_scaling_surface = gen9_vp9_send_scaling_surface;
4622+
4623+ vme_context->pfn_set_curbe_scaling = gen9_vp9_set_curbe_scaling_cm;
4624+
4625+ vme_context->pfn_send_dys_surface = gen9_vp9_send_dys_surface;
4626+ vme_context->pfn_set_curbe_dys = gen9_vp9_set_curbe_dys;
4627+ vme_context->pfn_set_curbe_mbenc = gen9_vp9_set_curbe_mbenc;
4628+ vme_context->pfn_send_mbenc_surface = gen9_vp9_send_mbenc_surface;
4629+ return true;
4630+}
4631+
4632+static
4633+void gen9_vp9_write_compressed_element(char *buffer,
4634+ int index,
4635+ int prob,
4636+ bool value)
4637+{
4638+ struct vp9_compressed_element *base_element, *vp9_element;
4639+ base_element = (struct vp9_compressed_element *)buffer;
4640+
4641+ vp9_element = base_element + (index >> 1);
4642+ if (index % 2) {
4643+ vp9_element->b_valid = 1;
4644+ vp9_element->b_probdiff_select = 1;
4645+ vp9_element->b_prob_select = (prob == 252) ? 1: 0;
4646+ vp9_element->b_bin = value;
4647+ } else {
4648+ vp9_element->a_valid = 1;
4649+ vp9_element->a_probdiff_select = 1;
4650+ vp9_element->a_prob_select = (prob == 252) ? 1: 0;
4651+ vp9_element->a_bin = value;
4652+ }
4653+}
4654+
4655+static void
4656+intel_vp9enc_refresh_frame_internal_buffers(VADriverContextP ctx,
4657+ struct intel_encoder_context *encoder_context)
4658+{
4659+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
4660+ VAEncPictureParameterBufferVP9 *pic_param;
4661+ struct gen9_vp9_state *vp9_state;
4662+ char *buffer;
4663+ int i;
4664+
4665+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
4666+
4667+ if (!pak_context || !vp9_state || !vp9_state->pic_param)
4668+ return;
4669+
4670+ pic_param = vp9_state->pic_param;
4671+ if ((pic_param->pic_flags.bits.frame_type == HCP_VP9_KEY_FRAME) ||
4672+ (pic_param->pic_flags.bits.intra_only) ||
4673+ pic_param->pic_flags.bits.error_resilient_mode) {
4674+ /* reset current frame_context */
4675+ intel_init_default_vp9_probs(&vp9_state->vp9_current_fc);
4676+ if ((pic_param->pic_flags.bits.frame_type == HCP_VP9_KEY_FRAME) ||
4677+ pic_param->pic_flags.bits.error_resilient_mode ||
4678+ (pic_param->pic_flags.bits.reset_frame_context == 3)) {
4679+ for (i = 0; i < 4; i++)
4680+ memcpy(&vp9_state->vp9_frame_ctx[i],
4681+ &vp9_state->vp9_current_fc,
4682+ sizeof(FRAME_CONTEXT));
4683+ } else if (pic_param->pic_flags.bits.reset_frame_context == 2) {
4684+ i = pic_param->pic_flags.bits.frame_context_idx;
4685+ memcpy(&vp9_state->vp9_frame_ctx[i],
4686+ &vp9_state->vp9_current_fc, sizeof(FRAME_CONTEXT));
4687+ }
4688+ /* reset the frame_ctx_idx = 0 */
4689+ vp9_state->frame_ctx_idx = 0;
4690+ } else {
4691+ vp9_state->frame_ctx_idx = pic_param->pic_flags.bits.frame_context_idx;
4692+ }
4693+
4694+ i965_zero_gpe_resource(&pak_context->res_compressed_input_buffer);
4695+ buffer = i965_map_gpe_resource(&pak_context->res_compressed_input_buffer);
4696+
4697+ /* write tx_size */
4698+ if ((pic_param->luma_ac_qindex == 0) &&
4699+ (pic_param->luma_dc_qindex_delta == 0) &&
4700+ (pic_param->chroma_ac_qindex_delta == 0) &&
4701+ (pic_param->chroma_dc_qindex_delta == 0)) {
4702+ /* lossless flag */
4703+ /* nothing is needed */
4704+ gen9_vp9_write_compressed_element(buffer,
4705+ 0, 128, 0);
4706+ gen9_vp9_write_compressed_element(buffer,
4707+ 1, 128, 0);
4708+ gen9_vp9_write_compressed_element(buffer,
4709+ 2, 128, 0);
4710+ } else {
4711+ if (vp9_state->tx_mode == TX_MODE_SELECT) {
4712+ gen9_vp9_write_compressed_element(buffer,
4713+ 0, 128, 1);
4714+ gen9_vp9_write_compressed_element(buffer,
4715+ 1, 128, 1);
4716+ gen9_vp9_write_compressed_element(buffer,
4717+ 2, 128, 1);
4718+ } else if (vp9_state->tx_mode == ALLOW_32X32) {
4719+ gen9_vp9_write_compressed_element(buffer,
4720+ 0, 128, 1);
4721+ gen9_vp9_write_compressed_element(buffer,
4722+ 1, 128, 1);
4723+ gen9_vp9_write_compressed_element(buffer,
4724+ 2, 128, 0);
4725+ } else {
4726+ unsigned int tx_mode;
4727+
4728+ tx_mode = vp9_state->tx_mode;
4729+ gen9_vp9_write_compressed_element(buffer,
4730+ 0, 128, ((tx_mode) & 2));
4731+ gen9_vp9_write_compressed_element(buffer,
4732+ 1, 128, ((tx_mode) & 1));
4733+ gen9_vp9_write_compressed_element(buffer,
4734+ 2, 128, 0);
4735+ }
4736+
4737+ if (vp9_state->tx_mode == TX_MODE_SELECT) {
4738+
4739+ gen9_vp9_write_compressed_element(buffer,
4740+ 3, 128, 0);
4741+
4742+ gen9_vp9_write_compressed_element(buffer,
4743+ 7, 128, 0);
4744+
4745+ gen9_vp9_write_compressed_element(buffer,
4746+ 15, 128, 0);
4747+ }
4748+ }
4749+ /*Setup all the input&output object*/
4750+
4751+ {
4752+ /* update the coeff_update flag */
4753+ gen9_vp9_write_compressed_element(buffer,
4754+ 27, 128, 0);
4755+ gen9_vp9_write_compressed_element(buffer,
4756+ 820, 128, 0);
4757+ gen9_vp9_write_compressed_element(buffer,
4758+ 1613, 128, 0);
4759+ gen9_vp9_write_compressed_element(buffer,
4760+ 2406, 128, 0);
4761+ }
4762+
4763+
4764+ if (pic_param->pic_flags.bits.frame_type && !pic_param->pic_flags.bits.intra_only)
4765+ {
4766+ bool allow_comp = !(
4767+ (pic_param->ref_flags.bits.ref_last_sign_bias && pic_param->ref_flags.bits.ref_gf_sign_bias && pic_param->ref_flags.bits.ref_arf_sign_bias) ||
4768+ (!pic_param->ref_flags.bits.ref_last_sign_bias && !pic_param->ref_flags.bits.ref_gf_sign_bias && !pic_param->ref_flags.bits.ref_arf_sign_bias)
4769+ );
4770+
4771+ if (allow_comp)
4772+ {
4773+ if (pic_param->pic_flags.bits.comp_prediction_mode == REFERENCE_MODE_SELECT) {
4774+ gen9_vp9_write_compressed_element(buffer,
4775+ 3271, 128, 1);
4776+ gen9_vp9_write_compressed_element(buffer,
4777+ 3272, 128, 1);
4778+ }
4779+ else if (pic_param->pic_flags.bits.comp_prediction_mode == COMPOUND_REFERENCE) {
4780+ gen9_vp9_write_compressed_element(buffer,
4781+ 3271, 128, 1);
4782+ gen9_vp9_write_compressed_element(buffer,
4783+ 3272, 128, 0);
4784+ }
4785+ else {
4786+
4787+ gen9_vp9_write_compressed_element(buffer,
4788+ 3271, 128, 0);
4789+ gen9_vp9_write_compressed_element(buffer,
4790+ 3272, 128, 0);
4791+ }
4792+ }
4793+ }
4794+
4795+ i965_unmap_gpe_resource(&pak_context->res_compressed_input_buffer);
4796+}
4797+
4798+
4799+static void
4800+gen9_pak_vp9_pipe_mode_select(VADriverContextP ctx,
4801+ struct encode_state *encode_state,
4802+ struct intel_encoder_context *encoder_context,
4803+ struct gen9_hcpe_pipe_mode_select_param *pipe_mode_param)
4804+{
4805+ struct intel_batchbuffer *batch = encoder_context->base.batch;
4806+
4807+ BEGIN_BCS_BATCH(batch, 6);
4808+
4809+ OUT_BCS_BATCH(batch, HCP_PIPE_MODE_SELECT | (6 - 2));
4810+ OUT_BCS_BATCH(batch,
4811+ (pipe_mode_param->stream_out << 12) |
4812+ (pipe_mode_param->codec_mode << 5) |
4813+ (0 << 3) | /* disable Pic Status / Error Report */
4814+ (pipe_mode_param->stream_out << 2) |
4815+ HCP_CODEC_SELECT_ENCODE);
4816+ OUT_BCS_BATCH(batch, 0);
4817+ OUT_BCS_BATCH(batch, 0);
4818+ OUT_BCS_BATCH(batch, (1 << 6));
4819+ OUT_BCS_BATCH(batch, 0);
4820+
4821+ ADVANCE_BCS_BATCH(batch);
4822+}
4823+
4824+static void
4825+gen9_vp9_add_surface_state(VADriverContextP ctx,
4826+ struct encode_state *encode_state,
4827+ struct intel_encoder_context *encoder_context,
4828+ hcp_surface_state *hcp_state)
4829+{
4830+ struct intel_batchbuffer *batch = encoder_context->base.batch;
4831+ if (!hcp_state)
4832+ return;
4833+
4834+ BEGIN_BCS_BATCH(batch, 3);
4835+ OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2));
4836+ OUT_BCS_BATCH(batch,
4837+ (hcp_state->dw1.surface_id << 28) |
4838+ (hcp_state->dw1.surface_pitch - 1)
4839+ );
4840+ OUT_BCS_BATCH(batch,
4841+ (hcp_state->dw2.surface_format << 28) |
4842+ (hcp_state->dw2.y_cb_offset)
4843+ );
4844+ ADVANCE_BCS_BATCH(batch);
4845+}
4846+
4847+static void
4848+gen9_pak_vp9_pipe_buf_addr_state(VADriverContextP ctx,
4849+ struct encode_state *encode_state,
4850+ struct intel_encoder_context *encoder_context)
4851+{
4852+ struct intel_batchbuffer *batch = encoder_context->base.batch;
4853+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
4854+ struct gen9_vp9_state *vp9_state;
4855+ unsigned int i;
4856+ struct object_surface *obj_surface;
4857+
4858+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
4859+
4860+ if (!vp9_state || !vp9_state->pic_param)
4861+ return;
4862+
4863+
4864+ BEGIN_BCS_BATCH(batch, 104);
4865+
4866+ OUT_BCS_BATCH(batch, HCP_PIPE_BUF_ADDR_STATE | (104 - 2));
4867+
4868+ obj_surface = encode_state->reconstructed_object;
4869+
4870+ /* reconstructed obj_surface is already checked. So this is skipped */
4871+ /* DW 1..3 decoded surface */
4872+ OUT_RELOC64(batch,
4873+ obj_surface->bo,
4874+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4875+ 0);
4876+ OUT_BCS_BATCH(batch, 0);
4877+
4878+ /* DW 4..6 deblocking line */
4879+ OUT_RELOC64(batch,
4880+ pak_context->res_deblocking_filter_line_buffer.bo,
4881+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4882+ 0);
4883+ OUT_BCS_BATCH(batch, 0);
4884+
4885+ /* DW 7..9 deblocking tile line */
4886+ OUT_RELOC64(batch,
4887+ pak_context->res_deblocking_filter_tile_line_buffer.bo,
4888+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4889+ 0);
4890+ OUT_BCS_BATCH(batch, 0);
4891+
4892+ /* DW 10..12 deblocking tile col */
4893+ OUT_RELOC64(batch,
4894+ pak_context->res_deblocking_filter_tile_col_buffer.bo,
4895+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4896+ 0);
4897+ OUT_BCS_BATCH(batch, 0);
4898+
4899+ /* DW 13..15 metadata line */
4900+ OUT_RELOC64(batch,
4901+ pak_context->res_metadata_line_buffer.bo,
4902+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4903+ 0);
4904+ OUT_BCS_BATCH(batch, 0);
4905+
4906+ /* DW 16..18 metadata tile line */
4907+ OUT_RELOC64(batch,
4908+ pak_context->res_metadata_tile_line_buffer.bo,
4909+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4910+ 0);
4911+ OUT_BCS_BATCH(batch, 0);
4912+
4913+ /* DW 19..21 metadata tile col */
4914+ OUT_RELOC64(batch,
4915+ pak_context->res_metadata_tile_col_buffer.bo,
4916+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4917+ 0);
4918+ OUT_BCS_BATCH(batch, 0);
4919+
4920+ /* DW 22..30 SAO is not used for VP9 */
4921+ OUT_BCS_BATCH(batch, 0);
4922+ OUT_BCS_BATCH(batch, 0);
4923+ OUT_BCS_BATCH(batch, 0);
4924+ OUT_BCS_BATCH(batch, 0);
4925+ OUT_BCS_BATCH(batch, 0);
4926+ OUT_BCS_BATCH(batch, 0);
4927+ OUT_BCS_BATCH(batch, 0);
4928+ OUT_BCS_BATCH(batch, 0);
4929+ OUT_BCS_BATCH(batch, 0);
4930+
4931+ /* DW 31..33 Current Motion vector temporal buffer */
4932+ OUT_RELOC64(batch,
4933+ pak_context->res_mv_temporal_buffer[vp9_state->curr_mv_temporal_index].bo,
4934+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
4935+ 0);
4936+ OUT_BCS_BATCH(batch, 0);
4937+
4938+ /* DW 34..36 Not used */
4939+ OUT_BCS_BATCH(batch, 0);
4940+ OUT_BCS_BATCH(batch, 0);
4941+ OUT_BCS_BATCH(batch, 0);
4942+
4943+ /* Only the first three reference_frame is used for VP9 */
4944+ /* DW 37..52 for reference_frame */
4945+ i = 0;
4946+ if (vp9_state->picture_coding_type) {
4947+ for (i = 0; i < 3; i++) {
4948+
4949+ if (pak_context->reference_surfaces[i].bo) {
4950+ OUT_RELOC64(batch,
4951+ pak_context->reference_surfaces[i].bo,
4952+ I915_GEM_DOMAIN_INSTRUCTION, 0,
4953+ 0);
4954+ } else {
4955+ OUT_BCS_BATCH(batch, 0);
4956+ OUT_BCS_BATCH(batch, 0);
4957+ }
4958+ }
4959+ }
4960+
4961+ for (; i < 8; i++) {
4962+ OUT_BCS_BATCH(batch, 0);
4963+ OUT_BCS_BATCH(batch, 0);
4964+ }
4965+
4966+ OUT_BCS_BATCH(batch, 0);
4967+
4968+ /* DW 54..56 for source input */
4969+ OUT_RELOC64(batch,
4970+ pak_context->uncompressed_picture_source.bo,
4971+ I915_GEM_DOMAIN_INSTRUCTION, 0,
4972+ 0);
4973+ OUT_BCS_BATCH(batch, 0);
4974+
4975+ /* DW 57..59 StreamOut is not used */
4976+ OUT_BCS_BATCH(batch, 0);
4977+ OUT_BCS_BATCH(batch, 0);
4978+ OUT_BCS_BATCH(batch, 0);
4979+
4980+ /* DW 60..62. Not used for encoder */
4981+ OUT_BCS_BATCH(batch, 0);
4982+ OUT_BCS_BATCH(batch, 0);
4983+ OUT_BCS_BATCH(batch, 0);
4984+
4985+ /* DW 63..65. ILDB Not used for encoder */
4986+ OUT_BCS_BATCH(batch, 0);
4987+ OUT_BCS_BATCH(batch, 0);
4988+ OUT_BCS_BATCH(batch, 0);
4989+
4990+ /* DW 66..81 For the collocated motion vector temporal buffer */
4991+ if (vp9_state->picture_coding_type) {
4992+ int prev_index = vp9_state->curr_mv_temporal_index ^ 0x01;
4993+ OUT_RELOC64(batch,
4994+ pak_context->res_mv_temporal_buffer[prev_index].bo,
4995+ I915_GEM_DOMAIN_INSTRUCTION, 0,
4996+ 0);
4997+ } else {
4998+ OUT_BCS_BATCH(batch, 0);
4999+ OUT_BCS_BATCH(batch, 0);
5000+ }
5001+
5002+ for (i = 1; i < 8; i++) {
5003+ OUT_BCS_BATCH(batch, 0);
5004+ OUT_BCS_BATCH(batch, 0);
5005+ }
5006+ OUT_BCS_BATCH(batch, 0);
5007+
5008+ /* DW 83..85 VP9 prob buffer */
5009+ OUT_RELOC64(batch,
5010+ pak_context->res_prob_buffer.bo,
5011+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5012+ 0);
5013+
5014+ OUT_BCS_BATCH(batch, 0);
5015+
5016+ /* DW 86..88 Segment id buffer */
5017+ if (pak_context->res_segmentid_buffer.bo) {
5018+ OUT_RELOC64(batch,
5019+ pak_context->res_segmentid_buffer.bo,
5020+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5021+ 0);
5022+ } else {
5023+ OUT_BCS_BATCH(batch, 0);
5024+ OUT_BCS_BATCH(batch, 0);
5025+ }
5026+ OUT_BCS_BATCH(batch, 0);
5027+
5028+ /* DW 89..91 HVD line rowstore buffer */
5029+ OUT_RELOC64(batch,
5030+ pak_context->res_hvd_line_buffer.bo,
5031+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5032+ 0);
5033+ OUT_BCS_BATCH(batch, 0);
5034+
5035+ /* DW 92..94 HVD tile line rowstore buffer */
5036+ OUT_RELOC64(batch,
5037+ pak_context->res_hvd_tile_line_buffer.bo,
5038+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5039+ 0);
5040+ OUT_BCS_BATCH(batch, 0);
5041+
5042+ /* DW 95..97 SAO streamout. Not used for VP9 */
5043+ OUT_BCS_BATCH(batch, 0);
5044+ OUT_BCS_BATCH(batch, 0);
5045+ OUT_BCS_BATCH(batch, 0);
5046+
5047+ /* reserved for KBL. 98..100 */
5048+ OUT_BCS_BATCH(batch, 0);
5049+ OUT_BCS_BATCH(batch, 0);
5050+ OUT_BCS_BATCH(batch, 0);
5051+
5052+ /* 101..103 */
5053+ OUT_BCS_BATCH(batch, 0);
5054+ OUT_BCS_BATCH(batch, 0);
5055+ OUT_BCS_BATCH(batch, 0);
5056+
5057+ ADVANCE_BCS_BATCH(batch);
5058+}
5059+
5060+static void
5061+gen9_pak_vp9_ind_obj_base_addr_state(VADriverContextP ctx,
5062+ struct encode_state *encode_state,
5063+ struct intel_encoder_context *encoder_context)
5064+{
5065+ struct intel_batchbuffer *batch = encoder_context->base.batch;
5066+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5067+ struct gen9_vp9_state *vp9_state;
5068+
5069+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5070+
5071+ /* to do */
5072+ BEGIN_BCS_BATCH(batch, 29);
5073+
5074+ OUT_BCS_BATCH(batch, HCP_IND_OBJ_BASE_ADDR_STATE | (29 - 2));
5075+
5076+ /* indirect bitstream object base */
5077+ OUT_BCS_BATCH(batch, 0);
5078+ OUT_BCS_BATCH(batch, 0);
5079+ OUT_BCS_BATCH(batch, 0);
5080+ /* the upper bound of indirect bitstream object */
5081+ OUT_BCS_BATCH(batch, 0);
5082+ OUT_BCS_BATCH(batch, 0);
5083+
5084+ /* DW 6: Indirect CU object base address */
5085+ OUT_RELOC64(batch,
5086+ pak_context->res_mb_code_surface.bo,
5087+ I915_GEM_DOMAIN_INSTRUCTION, 0, /* No write domain */
5088+ vp9_state->mb_data_offset);
5089+ /* default attribute */
5090+ OUT_BCS_BATCH(batch, 0);
5091+
5092+ /* DW 9..11, PAK-BSE */
5093+ OUT_RELOC64(batch,
5094+ pak_context->indirect_pak_bse_object.bo,
5095+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5096+ pak_context->indirect_pak_bse_object.offset);
5097+ OUT_BCS_BATCH(batch, 0);
5098+
5099+ /* DW 12..13 upper bound */
5100+ OUT_RELOC64(batch,
5101+ pak_context->indirect_pak_bse_object.bo,
5102+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5103+ pak_context->indirect_pak_bse_object.end_offset);
5104+
5105+ /* DW 14..16 compressed header buffer */
5106+ OUT_RELOC64(batch,
5107+ pak_context->res_compressed_input_buffer.bo,
5108+ I915_GEM_DOMAIN_INSTRUCTION, 0,
5109+ 0);
5110+ OUT_BCS_BATCH(batch, 0);
5111+
5112+ /* DW 17..19 prob counter streamout */
5113+ OUT_RELOC64(batch,
5114+ pak_context->res_prob_counter_buffer.bo,
5115+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5116+ 0);
5117+ OUT_BCS_BATCH(batch, 0);
5118+
5119+ /* DW 20..22 prob delta streamin */
5120+ OUT_RELOC64(batch,
5121+ pak_context->res_prob_delta_buffer.bo,
5122+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5123+ 0);
5124+ OUT_BCS_BATCH(batch, 0);
5125+
5126+ /* DW 23..25 Tile record streamout */
5127+ OUT_RELOC64(batch,
5128+ pak_context->res_tile_record_streamout_buffer.bo,
5129+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5130+ 0);
5131+ OUT_BCS_BATCH(batch, 0);
5132+
5133+ /* DW 26..28 CU record streamout */
5134+ OUT_RELOC64(batch,
5135+ pak_context->res_cu_stat_streamout_buffer.bo,
5136+ I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
5137+ 0);
5138+ OUT_BCS_BATCH(batch, 0);
5139+
5140+ ADVANCE_BCS_BATCH(batch);
5141+}
5142+
5143+static void
5144+gen9_pak_vp9_segment_state(VADriverContextP ctx,
5145+ struct encode_state *encode_state,
5146+ struct intel_encoder_context *encoder_context,
5147+ VAEncSegParamVP9 *seg_param, uint8_t seg_id)
5148+{
5149+ struct intel_batchbuffer *batch = encoder_context->base.batch;
5150+ uint32_t batch_value, tmp;
5151+ VAEncPictureParameterBufferVP9 *pic_param;
5152+
5153+ if (!encode_state->pic_param_ext ||
5154+ !encode_state->pic_param_ext->buffer) {
5155+ return;
5156+ }
5157+
5158+ pic_param = (VAEncPictureParameterBufferVP9 *)encode_state->pic_param_ext->buffer;
5159+
5160+ batch_value = seg_param->seg_flags.bits.segment_reference;
5161+ if (pic_param->pic_flags.bits.frame_type == HCP_VP9_KEY_FRAME ||
5162+ pic_param->pic_flags.bits.intra_only)
5163+ batch_value = 0;
5164+
5165+ BEGIN_BCS_BATCH(batch, 8);
5166+
5167+ OUT_BCS_BATCH(batch, HCP_VP9_SEGMENT_STATE | (8 - 2));
5168+ OUT_BCS_BATCH(batch, seg_id << 0); /* DW 1 - SegmentID */
5169+ OUT_BCS_BATCH(batch,
5170+ (seg_param->seg_flags.bits.segment_reference_enabled << 3) |
5171+ (batch_value << 1) |
5172+ (seg_param->seg_flags.bits.segment_reference_skipped <<0)
5173+ );
5174+
5175+ /* DW 3..6 is not used for encoder */
5176+ OUT_BCS_BATCH(batch, 0);
5177+ OUT_BCS_BATCH(batch, 0);
5178+ OUT_BCS_BATCH(batch, 0);
5179+ OUT_BCS_BATCH(batch, 0);
5180+
5181+ /* DW 7 Mode */
5182+ tmp = intel_convert_sign_mag(seg_param->segment_qindex_delta, 9);
5183+ batch_value = tmp;
5184+ tmp = intel_convert_sign_mag(seg_param->segment_lf_level_delta, 7);
5185+ batch_value |= (tmp << 16);
5186+ OUT_BCS_BATCH(batch, batch_value);
5187+
5188+ ADVANCE_BCS_BATCH(batch);
5189+
5190+}
5191+
5192+static void
5193+intel_vp9enc_construct_pak_insertobj_batchbuffer(VADriverContextP ctx,
5194+ struct intel_encoder_context *encoder_context,
5195+ struct i965_gpe_resource *obj_batch_buffer)
5196+{
5197+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5198+ struct gen9_vp9_state *vp9_state;
5199+ int uncompressed_header_length;
5200+ unsigned int *cmd_ptr;
5201+ unsigned int dw_length, bits_in_last_dw;
5202+
5203+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5204+
5205+ if (!pak_context || !vp9_state || !vp9_state->pic_param)
5206+ return;
5207+
5208+ uncompressed_header_length = vp9_state->header_length;
5209+ cmd_ptr = i965_map_gpe_resource(obj_batch_buffer);
5210+
5211+ bits_in_last_dw = uncompressed_header_length % 4;
5212+ bits_in_last_dw *= 8;
5213+
5214+ if (bits_in_last_dw == 0)
5215+ bits_in_last_dw = 32;
5216+
5217+ /* get the DWORD length of the inserted_data */
5218+ dw_length = ALIGN(uncompressed_header_length, 4) / 4;
5219+ *cmd_ptr++ = HCP_INSERT_PAK_OBJECT | dw_length;
5220+
5221+ *cmd_ptr++ = ((0 << 31) | /* indirect payload */
5222+ (0 << 16) | /* the start offset in first DW */
5223+ (0 << 15) |
5224+ (bits_in_last_dw << 8) | /* bits_in_last_dw */
5225+ (0 << 4) | /* skip emulation byte count. 0 for VP9 */
5226+ (0 << 3) | /* emulation flag. 0 for VP9 */
5227+ (1 << 2) | /* last header flag. */
5228+ (0 << 1));
5229+ memcpy(cmd_ptr, vp9_state->alias_insert_data, dw_length * sizeof(unsigned int));
5230+
5231+ cmd_ptr += dw_length;
5232+
5233+ *cmd_ptr++ = MI_NOOP;
5234+ *cmd_ptr++ = MI_BATCH_BUFFER_END;
5235+ i965_unmap_gpe_resource(obj_batch_buffer);
5236+}
5237+
5238+static void
5239+gen9_vp9_pak_picture_level(VADriverContextP ctx,
5240+ struct encode_state *encode_state,
5241+ struct intel_encoder_context *encoder_context)
5242+{
5243+ struct intel_batchbuffer *batch = encoder_context->base.batch;
5244+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5245+ struct object_surface *obj_surface;
5246+ VAEncPictureParameterBufferVP9 *pic_param;
5247+ VAEncMiscParameterTypeVP9PerSegmantParam *seg_param, tmp_seg_param;
5248+ struct gen9_vp9_state *vp9_state;
5249+ struct gen9_surface_vp9 *vp9_priv_surface;
5250+ int i;
5251+ struct gen9_hcpe_pipe_mode_select_param mode_param;
5252+ hcp_surface_state hcp_surface;
5253+ struct gpe_mi_batch_buffer_start_parameter second_level_batch;
5254+ int segment_count;
5255+
5256+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5257+
5258+ if (!pak_context || !vp9_state || !vp9_state->pic_param)
5259+ return;
5260+
5261+ pic_param = vp9_state->pic_param;
5262+ seg_param = vp9_state->segment_param;
5263+
5264+ if (vp9_state->curr_pak_pass == 0)
5265+ {
5266+ intel_vp9enc_construct_pak_insertobj_batchbuffer(ctx, encoder_context,
5267+ &pak_context->res_pak_uncompressed_input_buffer);
5268+
5269+ // Check if driver already programmed pic state as part of BRC update kernel programming.
5270+ if (!vp9_state->brc_enabled)
5271+ {
5272+ intel_vp9enc_construct_picstate_batchbuf(ctx, encode_state,
5273+ encoder_context, &pak_context->res_pic_state_brc_write_hfw_read_buffer);
5274+ }
5275+ }
5276+
5277+ if (vp9_state->curr_pak_pass == 0)
5278+ {
5279+ intel_vp9enc_refresh_frame_internal_buffers(ctx, encoder_context);
5280+ }
5281+
5282+ {
5283+ /* copy the frame_context[frame_idx] into curr_frame_context */
5284+ memcpy(&vp9_state->vp9_current_fc,
5285+ &(vp9_state->vp9_frame_ctx[vp9_state->frame_ctx_idx]),
5286+ sizeof(FRAME_CONTEXT));
5287+ {
5288+ uint8_t *prob_ptr;
5289+
5290+ prob_ptr = i965_map_gpe_resource(&pak_context->res_prob_buffer);
5291+ /* copy the current fc to vp9_prob buffer */
5292+ memcpy(prob_ptr, &vp9_state->vp9_current_fc, sizeof(FRAME_CONTEXT));
5293+ if ((pic_param->pic_flags.bits.frame_type == HCP_VP9_KEY_FRAME) ||
5294+ pic_param->pic_flags.bits.intra_only) {
5295+ FRAME_CONTEXT *frame_ptr = (FRAME_CONTEXT *)prob_ptr;
5296+
5297+ memcpy(frame_ptr->partition_prob, vp9_kf_partition_probs,
5298+ sizeof(vp9_kf_partition_probs));
5299+ memcpy(frame_ptr->uv_mode_prob, vp9_kf_uv_mode_prob,
5300+ sizeof(vp9_kf_uv_mode_prob));
5301+ }
5302+ i965_unmap_gpe_resource(&pak_context->res_prob_buffer);
5303+ }
5304+ }
5305+
5306+ if (vp9_state->brc_enabled && vp9_state->curr_pak_pass) {
5307+ /* read image status and insert the conditional end cmd */
5308+ /* image ctrl/status is already accessed */
5309+ struct gpe_mi_conditional_batch_buffer_end_parameter mi_cond_end;
5310+ struct vp9_encode_status_buffer_internal *status_buffer;
5311+
5312+ status_buffer = &vp9_state->status_buffer;
5313+ memset(&mi_cond_end, 0, sizeof(mi_cond_end));
5314+ mi_cond_end.offset = status_buffer->image_status_mask_offset;
5315+ mi_cond_end.bo = status_buffer->bo;
5316+ mi_cond_end.compare_data = 0;
5317+ mi_cond_end.compare_mask_mode_disabled = 1;
5318+ gen9_gpe_mi_conditional_batch_buffer_end(ctx, batch,
5319+ &mi_cond_end);
5320+ }
5321+
5322+ mode_param.codec_mode = 1;
5323+ mode_param.stream_out = 0;
5324+ gen9_pak_vp9_pipe_mode_select(ctx, encode_state, encoder_context, &mode_param);
5325+
5326+ /* reconstructed surface */
5327+ memset(&hcp_surface, 0, sizeof(hcp_surface));
5328+ obj_surface = encode_state->reconstructed_object;
5329+ hcp_surface.dw1.surface_id = 0;
5330+ hcp_surface.dw1.surface_pitch = obj_surface->width;
5331+ hcp_surface.dw2.surface_format = SURFACE_FORMAT_PLANAR_420_8;
5332+ hcp_surface.dw2.y_cb_offset = obj_surface->y_cb_offset;
5333+ gen9_vp9_add_surface_state(ctx, encode_state, encoder_context,
5334+ &hcp_surface);
5335+
5336+ /* Input surface */
5337+ if (vp9_state->dys_in_use &&
5338+ ((pic_param->frame_width_src != pic_param->frame_width_dst) ||
5339+ (pic_param->frame_height_src != pic_param->frame_height_dst))) {
5340+ vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface->private_data);
5341+ obj_surface = vp9_priv_surface->dys_surface_obj;
5342+ } else {
5343+ obj_surface = encode_state->input_yuv_object;
5344+ }
5345+
5346+ hcp_surface.dw1.surface_id = 1;
5347+ hcp_surface.dw1.surface_pitch = obj_surface->width;
5348+ hcp_surface.dw2.surface_format = SURFACE_FORMAT_PLANAR_420_8;
5349+ hcp_surface.dw2.y_cb_offset = obj_surface->y_cb_offset;
5350+ gen9_vp9_add_surface_state(ctx, encode_state, encoder_context,
5351+ &hcp_surface);
5352+
5353+ if (vp9_state->picture_coding_type) {
5354+ /* Add surface for last */
5355+ if (vp9_state->last_ref_obj) {
5356+ obj_surface = vp9_state->last_ref_obj;
5357+ hcp_surface.dw1.surface_id = 2;
5358+ hcp_surface.dw1.surface_pitch = obj_surface->width;
5359+ hcp_surface.dw2.surface_format = SURFACE_FORMAT_PLANAR_420_8;
5360+ hcp_surface.dw2.y_cb_offset = obj_surface->y_cb_offset;
5361+ gen9_vp9_add_surface_state(ctx, encode_state, encoder_context,
5362+ &hcp_surface);
5363+ }
5364+ if (vp9_state->golden_ref_obj) {
5365+ obj_surface = vp9_state->golden_ref_obj;
5366+ hcp_surface.dw1.surface_id = 3;
5367+ hcp_surface.dw1.surface_pitch = obj_surface->width;
5368+ hcp_surface.dw2.surface_format = SURFACE_FORMAT_PLANAR_420_8;
5369+ hcp_surface.dw2.y_cb_offset = obj_surface->y_cb_offset;
5370+ gen9_vp9_add_surface_state(ctx, encode_state, encoder_context,
5371+ &hcp_surface);
5372+ }
5373+ if (vp9_state->alt_ref_obj) {
5374+ obj_surface = vp9_state->alt_ref_obj;
5375+ hcp_surface.dw1.surface_id = 4;
5376+ hcp_surface.dw1.surface_pitch = obj_surface->width;
5377+ hcp_surface.dw2.surface_format = SURFACE_FORMAT_PLANAR_420_8;
5378+ hcp_surface.dw2.y_cb_offset = obj_surface->y_cb_offset;
5379+ gen9_vp9_add_surface_state(ctx, encode_state, encoder_context,
5380+ &hcp_surface);
5381+ }
5382+ }
5383+
5384+ gen9_pak_vp9_pipe_buf_addr_state(ctx, encode_state, encoder_context);
5385+
5386+ gen9_pak_vp9_ind_obj_base_addr_state(ctx, encode_state, encoder_context);
5387+
5388+ // Using picstate zero with updated QP and LF deltas by HuC for repak, irrespective of how many Pak passes were run in multi-pass mode.
5389+ memset(&second_level_batch, 0, sizeof(second_level_batch));
5390+
5391+ if (vp9_state->curr_pak_pass == 0) {
5392+ second_level_batch.offset = 0;
5393+ } else
5394+ second_level_batch.offset = vp9_state->curr_pak_pass * VP9_PIC_STATE_BUFFER_SIZE;
5395+
5396+ second_level_batch.is_second_level = 1;
5397+ second_level_batch.bo = pak_context->res_pic_state_brc_write_hfw_read_buffer.bo;
5398+
5399+ gen9_gpe_mi_batch_buffer_start(ctx, batch, &second_level_batch);
5400+
5401+ if (pic_param->pic_flags.bits.segmentation_enabled &&
5402+ seg_param)
5403+ segment_count = 8;
5404+ else {
5405+ segment_count = 1;
5406+ memset(&tmp_seg_param, 0, sizeof(tmp_seg_param));
5407+ seg_param = &tmp_seg_param;
5408+ }
5409+ for (i = 0; i < segment_count; i++)
5410+ {
5411+ gen9_pak_vp9_segment_state(ctx, encode_state,
5412+ encoder_context,
5413+ &seg_param->seg_data[i], i);
5414+ }
5415+
5416+ /* Insert the uncompressed header buffer */
5417+ second_level_batch.is_second_level = 1;
5418+ second_level_batch.offset = 0;
5419+ second_level_batch.bo = pak_context->res_pak_uncompressed_input_buffer.bo;
5420+
5421+ gen9_gpe_mi_batch_buffer_start(ctx, batch, &second_level_batch);
5422+
5423+ /* PAK_OBJECT */
5424+ second_level_batch.is_second_level = 1;
5425+ second_level_batch.offset = 0;
5426+ second_level_batch.bo = pak_context->res_mb_code_surface.bo;
5427+ gen9_gpe_mi_batch_buffer_start(ctx, batch, &second_level_batch);
5428+
5429+ return;
5430+}
5431+
5432+static void
5433+gen9_vp9_read_mfc_status(VADriverContextP ctx, struct intel_encoder_context *encoder_context)
5434+{
5435+ struct intel_batchbuffer *batch = encoder_context->base.batch;
5436+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5437+ struct gpe_mi_store_register_mem_parameter mi_store_reg_mem_param;
5438+ struct gpe_mi_flush_dw_parameter mi_flush_dw_param;
5439+ //struct gpe_mi_copy_mem_parameter mi_copy_mem_param;
5440+ struct vp9_encode_status_buffer_internal *status_buffer;
5441+ struct gen9_vp9_state *vp9_state;
5442+
5443+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5444+ if (!vp9_state || !pak_context || !batch)
5445+ return;
5446+
5447+ status_buffer = &(vp9_state->status_buffer);
5448+
5449+ memset(&mi_flush_dw_param, 0, sizeof(mi_flush_dw_param));
5450+ gen9_gpe_mi_flush_dw(ctx, batch, &mi_flush_dw_param);
5451+
5452+ memset(&mi_store_reg_mem_param, 0, sizeof(mi_store_reg_mem_param));
5453+ mi_store_reg_mem_param.bo = status_buffer->bo;
5454+ mi_store_reg_mem_param.offset = status_buffer->bs_byte_count_offset;
5455+ mi_store_reg_mem_param.mmio_offset = status_buffer->vp9_bs_frame_reg_offset;
5456+ gen9_gpe_mi_store_register_mem(ctx, batch, &mi_store_reg_mem_param);
5457+
5458+ mi_store_reg_mem_param.bo = pak_context->res_brc_bitstream_size_buffer.bo;
5459+ mi_store_reg_mem_param.offset = 0;
5460+ mi_store_reg_mem_param.mmio_offset = status_buffer->vp9_bs_frame_reg_offset;
5461+ gen9_gpe_mi_store_register_mem(ctx, batch, &mi_store_reg_mem_param);
5462+
5463+ /* Read HCP Image status */
5464+ mi_store_reg_mem_param.bo = status_buffer->bo;
5465+ mi_store_reg_mem_param.offset = status_buffer->image_status_mask_offset;
5466+ mi_store_reg_mem_param.mmio_offset =
5467+ status_buffer->vp9_image_mask_reg_offset;
5468+ gen9_gpe_mi_store_register_mem(ctx, batch, &mi_store_reg_mem_param);
5469+
5470+ mi_store_reg_mem_param.bo = status_buffer->bo;
5471+ mi_store_reg_mem_param.offset = status_buffer->image_status_ctrl_offset;
5472+ mi_store_reg_mem_param.mmio_offset =
5473+ status_buffer->vp9_image_ctrl_reg_offset;
5474+ gen9_gpe_mi_store_register_mem(ctx, batch, &mi_store_reg_mem_param);
5475+
5476+ mi_store_reg_mem_param.bo = pak_context->res_brc_bitstream_size_buffer.bo;
5477+ mi_store_reg_mem_param.offset = 4;
5478+ mi_store_reg_mem_param.mmio_offset =
5479+ status_buffer->vp9_image_ctrl_reg_offset;
5480+ gen9_gpe_mi_store_register_mem(ctx, batch, &mi_store_reg_mem_param);
5481+
5482+ gen9_gpe_mi_flush_dw(ctx, batch, &mi_flush_dw_param);
5483+
5484+ return;
5485+}
5486+
5487+static VAStatus
5488+gen9_vp9_pak_pipeline_prepare(VADriverContextP ctx,
5489+ struct encode_state *encode_state,
5490+ struct intel_encoder_context *encoder_context)
5491+{
5492+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5493+ struct object_surface *obj_surface;
5494+ struct object_buffer *obj_buffer;
5495+ struct i965_coded_buffer_segment *coded_buffer_segment;
5496+ VAEncPictureParameterBufferVP9 *pic_param;
5497+ struct gen9_vp9_state *vp9_state;
5498+ dri_bo *bo;
5499+ int i;
5500+
5501+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5502+ if (!vp9_state ||
5503+ !vp9_state->pic_param)
5504+ return VA_STATUS_ERROR_INVALID_PARAMETER;
5505+
5506+ pic_param = vp9_state->pic_param;
5507+
5508+ /* reconstructed surface */
5509+ obj_surface = encode_state->reconstructed_object;
5510+ i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420);
5511+
5512+ pak_context->reconstructed_object.bo = obj_surface->bo;
5513+ dri_bo_reference(pak_context->reconstructed_object.bo);
5514+
5515+ /* set vp9 reference frames */
5516+ for (i = 0; i < ARRAY_ELEMS(pak_context->reference_surfaces); i++) {
5517+ if (pak_context->reference_surfaces[i].bo)
5518+ dri_bo_unreference(pak_context->reference_surfaces[i].bo);
5519+ pak_context->reference_surfaces[i].bo = NULL;
5520+ }
5521+
5522+ /* Three reference frames are enough for VP9 */
5523+ if (pic_param->pic_flags.bits.frame_type &&
5524+ !pic_param->pic_flags.bits.intra_only) {
5525+ for (i = 0; i < 3; i++) {
5526+ obj_surface = encode_state->reference_objects[i];
5527+ if (obj_surface && obj_surface->bo) {
5528+ pak_context->reference_surfaces[i].bo = obj_surface->bo;
5529+ dri_bo_reference(obj_surface->bo);
5530+ }
5531+ }
5532+ }
5533+
5534+ /* input YUV surface */
5535+ dri_bo_unreference(pak_context->uncompressed_picture_source.bo);
5536+ pak_context->uncompressed_picture_source.bo = NULL;
5537+ obj_surface = encode_state->reconstructed_object;
5538+ if (vp9_state->dys_in_use &&
5539+ ((pic_param->frame_width_src != pic_param->frame_width_dst) ||
5540+ (pic_param->frame_height_src != pic_param->frame_height_dst))) {
5541+ struct gen9_surface_vp9 *vp9_priv_surface =
5542+ (struct gen9_surface_vp9 *)(obj_surface->private_data);
5543+ obj_surface = vp9_priv_surface->dys_surface_obj;
5544+ } else
5545+ obj_surface = encode_state->input_yuv_object;
5546+
5547+ pak_context->uncompressed_picture_source.bo = obj_surface->bo;
5548+ dri_bo_reference(pak_context->uncompressed_picture_source.bo);
5549+
5550+ /* coded buffer */
5551+ dri_bo_unreference(pak_context->indirect_pak_bse_object.bo);
5552+ pak_context->indirect_pak_bse_object.bo = NULL;
5553+ obj_buffer = encode_state->coded_buf_object;
5554+ bo = obj_buffer->buffer_store->bo;
5555+ pak_context->indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE;
5556+ pak_context->indirect_pak_bse_object.end_offset = ALIGN((obj_buffer->size_element - 0x1000), 0x1000);
5557+ pak_context->indirect_pak_bse_object.bo = bo;
5558+ dri_bo_reference(pak_context->indirect_pak_bse_object.bo);
5559+
5560+ /* set the internal flag to 0 to indicate the coded size is unknown */
5561+ dri_bo_map(bo, 1);
5562+ coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual;
5563+ coded_buffer_segment->mapped = 0;
5564+ coded_buffer_segment->codec = encoder_context->codec;
5565+ dri_bo_unmap(bo);
5566+
5567+ return VA_STATUS_SUCCESS;
5568+}
5569+
5570+static void
5571+gen9_vp9_pak_brc_prepare(struct encode_state *encode_state,
5572+ struct intel_encoder_context *encoder_context)
5573+{
5574+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5575+ struct gen9_vp9_state *vp9_state;
5576+
5577+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5578+
5579+ if (!vp9_state || !pak_context)
5580+ return;
5581+
5582+ if (vp9_state->brc_enabled) {
5583+ /* check the buffer related with BRC */
5584+ vp9_state->brc_flag_check = 0;
5585+ if (encode_state->seq_param_ext && encode_state->seq_param_ext->buffer) {
5586+ vp9_state->brc_flag_check |= VP9_BRC_SEQ;
5587+ }
5588+
5589+ /* Frame_rate */
5590+ if (encode_state->misc_param[VAEncMiscParameterTypeFrameRate] &&
5591+ encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer) {
5592+ vp9_state->brc_flag_check |= VP9_BRC_FR;
5593+ }
5594+
5595+ /* HRD */
5596+ if (encode_state->misc_param[VAEncMiscParameterTypeRateControl] &&
5597+ encode_state->misc_param[VAEncMiscParameterTypeRateControl]->buffer) {
5598+ vp9_state->brc_flag_check |= VP9_BRC_RC;
5599+ }
5600+
5601+ if (encode_state->misc_param[VAEncMiscParameterTypeHRD] &&
5602+ encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer) {
5603+ vp9_state->brc_flag_check |= VP9_BRC_HRD;
5604+ }
5605+
5606+ /*
5607+ * If user-app doesn't pass the buffer related with BRC for the first
5608+ * frame, the error flag is returned.
5609+ */
5610+ if (vp9_state->brc_flag_check == 0 && vp9_state->first_frame) {
5611+ vp9_state->brc_flag_check |= VP9_BRC_FAILURE;
5612+ }
5613+ }
5614+ return;
5615+}
5616+
5617+static void
5618+gen9_vp9_pak_context_destroy(void *context)
5619+{
5620+ struct gen9_encoder_context_vp9 *pak_context = context;
5621+ int i;
5622+
5623+ dri_bo_unreference(pak_context->reconstructed_object.bo);
5624+ pak_context->reconstructed_object.bo = NULL;
5625+
5626+ dri_bo_unreference(pak_context->uncompressed_picture_source.bo);
5627+ pak_context->uncompressed_picture_source.bo = NULL;
5628+
5629+ dri_bo_unreference(pak_context->indirect_pak_bse_object.bo);
5630+ pak_context->indirect_pak_bse_object.bo = NULL;
5631+
5632+ for (i = 0; i < 8; i++){
5633+ dri_bo_unreference(pak_context->reference_surfaces[i].bo);
5634+ pak_context->reference_surfaces[i].bo = NULL;
5635+ }
5636+
5637+ /* vme & pak same the same structure, so don't free the context here */
5638+}
5639+
5640+static VAStatus
5641+gen9_vp9_pak_pipeline(VADriverContextP ctx,
5642+ VAProfile profile,
5643+ struct encode_state *encode_state,
5644+ struct intel_encoder_context *encoder_context)
5645+{
5646+ struct i965_driver_data *i965 = i965_driver_data(ctx);
5647+ struct intel_batchbuffer *batch = encoder_context->base.batch;
5648+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->mfc_context;
5649+ VAStatus va_status;
5650+ struct gen9_vp9_state *vp9_state;
5651+ VAEncPictureParameterBufferVP9 *pic_param;
5652+ int i;
5653+
5654+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5655+
5656+ if (!vp9_state || !vp9_state->pic_param || !pak_context)
5657+ return VA_STATUS_ERROR_INVALID_PARAMETER;
5658+
5659+ va_status = gen9_vp9_pak_pipeline_prepare(ctx, encode_state, encoder_context);
5660+
5661+ if (va_status != VA_STATUS_SUCCESS)
5662+ return va_status;
5663+
5664+ if (i965->intel.has_bsd2)
5665+ intel_batchbuffer_start_atomic_bcs_override(batch, 0x1000, BSD_RING0);
5666+ else
5667+ intel_batchbuffer_start_atomic_bcs(batch, 0x1000);
5668+
5669+ intel_batchbuffer_emit_mi_flush(batch);
5670+
5671+ BEGIN_BCS_BATCH(batch, 64);
5672+ for (i = 0; i < 64; i++)
5673+ OUT_BCS_BATCH(batch, MI_NOOP);
5674+
5675+ ADVANCE_BCS_BATCH(batch);
5676+
5677+ for (vp9_state->curr_pak_pass = 0;
5678+ vp9_state->curr_pak_pass < vp9_state->num_pak_passes;
5679+ vp9_state->curr_pak_pass++) {
5680+
5681+ if (vp9_state->curr_pak_pass == 0) {
5682+ /* Initialize the VP9 Image Ctrl reg for the first pass */
5683+ struct gpe_mi_load_register_imm_parameter mi_load_reg_imm;
5684+ struct vp9_encode_status_buffer_internal *status_buffer;
5685+
5686+ status_buffer = &(vp9_state->status_buffer);
5687+ memset(&mi_load_reg_imm, 0, sizeof(mi_load_reg_imm));
5688+ mi_load_reg_imm.mmio_offset = status_buffer->vp9_image_ctrl_reg_offset;
5689+ mi_load_reg_imm.data = 0;
5690+ gen9_gpe_mi_load_register_imm(ctx, batch, &mi_load_reg_imm);
5691+ }
5692+ gen9_vp9_pak_picture_level(ctx, encode_state, encoder_context);
5693+ gen9_vp9_read_mfc_status(ctx, encoder_context);
5694+ }
5695+
5696+ intel_batchbuffer_end_atomic(batch);
5697+ intel_batchbuffer_flush(batch);
5698+
5699+ pic_param = vp9_state->pic_param;
5700+ vp9_state->vp9_last_frame.frame_width = pic_param->frame_width_dst;
5701+ vp9_state->vp9_last_frame.frame_height = pic_param->frame_height_dst;
5702+ vp9_state->vp9_last_frame.frame_type = pic_param->pic_flags.bits.frame_type;
5703+ vp9_state->vp9_last_frame.show_frame = pic_param->pic_flags.bits.show_frame;
5704+ vp9_state->vp9_last_frame.refresh_frame_context = pic_param->pic_flags.bits.refresh_frame_context;
5705+ vp9_state->vp9_last_frame.frame_context_idx = pic_param->pic_flags.bits.frame_context_idx;
5706+ vp9_state->vp9_last_frame.intra_only = pic_param->pic_flags.bits.intra_only;
5707+ vp9_state->frame_number++;
5708+ vp9_state->curr_mv_temporal_index ^= 1;
5709+
5710+ return VA_STATUS_SUCCESS;
5711+}
5712+
5713+Bool
5714+gen9_vp9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context)
5715+{
5716+ struct gen9_encoder_context_vp9 *vme_context = NULL;
5717+ struct gen9_vp9_state *vp9_state = NULL;
5718+
5719+ vme_context = calloc(1, sizeof(struct gen9_encoder_context_vp9));
5720+ vp9_state = calloc(1, sizeof(struct gen9_vp9_state));
5721+
5722+ if (!vme_context || !vp9_state) {
5723+ if (vme_context)
5724+ free(vme_context);
5725+ if (vp9_state)
5726+ free(vp9_state);
5727+ return false;
5728+ }
5729+
5730+ encoder_context->enc_priv_state = vp9_state;
5731+ vme_context->enc_priv_state = vp9_state;
5732+
5733+ /* Initialize the features that are supported by VP9 */
5734+ vme_context->hme_supported = 1;
5735+ vme_context->use_hw_scoreboard = 1;
5736+ vme_context->use_hw_non_stalling_scoreboard = 1;
5737+
5738+ vp9_state->tx_mode = TX_MODE_SELECT;
5739+ vp9_state->multi_ref_qp_check = 0;
5740+ vp9_state->target_usage = INTEL_ENC_VP9_TU_NORMAL;
5741+ vp9_state->num_pak_passes = 1;
5742+ vp9_state->hme_supported = vme_context->hme_supported;
5743+ vp9_state->b16xme_supported = 1;
5744+
5745+ if (encoder_context->rate_control_mode != VA_RC_NONE &&
5746+ encoder_context->rate_control_mode != VA_RC_CQP) {
5747+ vp9_state->brc_enabled = 1;
5748+ vp9_state->brc_distortion_buffer_supported = 1;
5749+ vp9_state->brc_constant_buffer_supported = 1;
5750+ vp9_state->num_pak_passes = 4;
5751+ }
5752+ vp9_state->dys_enabled = 1; /* this is supported by default */
5753+ vp9_state->first_frame = 1;
5754+
5755+ /* the definition of status buffer offset for VP9 */
5756+ {
5757+ struct vp9_encode_status_buffer_internal *status_buffer;
5758+
5759+ status_buffer = &vp9_state->status_buffer;
5760+ memset(status_buffer, 0,
5761+ sizeof(struct vp9_encode_status_buffer_internal));
5762+
5763+ status_buffer->bs_byte_count_offset = 2048;
5764+ status_buffer->image_status_mask_offset = 2052;
5765+ status_buffer->image_status_ctrl_offset = 2056;
5766+ status_buffer->media_index_offset = 2060;
5767+
5768+ status_buffer->vp9_bs_frame_reg_offset = 0x1E9E0;
5769+ status_buffer->vp9_image_mask_reg_offset = 0x1E9F0;
5770+ status_buffer->vp9_image_ctrl_reg_offset = 0x1E9F4;
5771+ }
5772+
5773+ gen9_vme_kernels_context_init_vp9(ctx, encoder_context, vme_context);
5774+
5775+ encoder_context->vme_context = vme_context;
5776+ encoder_context->vme_pipeline = gen9_vme_pipeline_vp9;
5777+ encoder_context->vme_context_destroy = gen9_vme_context_destroy_vp9;
5778+
5779+ return true;
5780+}
5781+
5782+Bool
5783+gen9_vp9_pak_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context)
5784+{
5785+ /* VME & PAK share the same context */
5786+ struct gen9_encoder_context_vp9 *pak_context = encoder_context->vme_context;
5787+
5788+ if (!pak_context)
5789+ return false;
5790+
5791+ encoder_context->mfc_context = pak_context;
5792+ encoder_context->mfc_context_destroy = gen9_vp9_pak_context_destroy;
5793+ encoder_context->mfc_pipeline = gen9_vp9_pak_pipeline;
5794+ encoder_context->mfc_brc_prepare = gen9_vp9_pak_brc_prepare;
5795+
5796+ return true;
5797+}
5798+
5799+VAStatus
5800+gen9_vp9_get_coded_status(VADriverContextP ctx,
5801+ char *buffer,
5802+ struct hw_context *hw_context)
5803+{
5804+ struct intel_encoder_context *encoder_context =
5805+ (struct intel_encoder_context *)hw_context;
5806+ struct gen9_vp9_state *vp9_state = NULL;
5807+ struct vp9_encode_status_buffer_internal *status_buffer;
5808+ struct i965_coded_buffer_segment *coded_buf_seg;
5809+ unsigned int *buf_ptr;
5810+
5811+ if (!encoder_context || !buffer)
5812+ return VA_STATUS_ERROR_INVALID_BUFFER;
5813+
5814+ vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state);
5815+ coded_buf_seg = (struct i965_coded_buffer_segment *) buffer;
5816+
5817+ if (!vp9_state)
5818+ return VA_STATUS_ERROR_INVALID_BUFFER;
5819+
5820+ status_buffer = &vp9_state->status_buffer;
5821+
5822+ buf_ptr = (unsigned int *)(buffer + status_buffer->bs_byte_count_offset);
5823+ coded_buf_seg->base.buf = buffer + I965_CODEDBUFFER_HEADER_SIZE;
5824+ coded_buf_seg->base.next = NULL;
5825+
5826+ /* the stream size is writen into the bs_byte_count_offset address of buffer */
5827+ coded_buf_seg->base.size = *buf_ptr;
5828+
5829+ coded_buf_seg->mapped = 1;
5830+
5831+ /* One VACodedBufferSegment for VP9 will be added later.
5832+ * It will be linked to the next element of coded_buf_seg->base.next
5833+ */
5834+
5835+ return VA_STATUS_SUCCESS;
5836+}
--- /dev/null
+++ b/src/gen9_vp9_encoder.h
@@ -0,0 +1,1976 @@
1+/*
2+ * Copyright © 2016 Intel Corporation
3+ *
4+ * Permission is hereby granted, free of charge, to any person obtaining a
5+ * copy of this software and associated documentation files (the
6+ * "Software"), to deal in the Software without restriction, including
7+ * without limitation the rights to use, copy, modify, merge, publish,
8+ * distribute, sub license, and/or sell copies of the Software, and to
9+ * permit persons to whom the Software is furnished to do so, subject to
10+ * the following conditions:
11+ *
12+ * The above copyright notice and this permission notice (including the
13+ * next paragraph) shall be included in all copies or substantial portions
14+ * of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+ * SOFTWAR
23+ *
24+ * Authors:
25+ * Zhao, Yakui <yakui.zhao@intel.com>
26+ *
27+ */
28+
29+#ifndef GEN9_VP9_ENCODER_H
30+#define GEN9_VP9_ENCODER_H
31+
32+#include <drm.h>
33+#include <i915_drm.h>
34+#include <intel_bufmgr.h>
35+
36+#include <va/va.h>
37+#include "i965_gpe_utils.h"
38+
39+#include "vp9_probs.h"
40+
41+struct encode_state;
42+struct intel_encoder_context;
43+
44+#define KEY_FRAME 0
45+#define INTER_FRAME 1
46+
47+#define INTEL_BRC_NONE 0
48+#define INTEL_BRC_CBR 1
49+#define INTEL_BRC_VBR 2
50+#define INTEL_BRC_CQP 3
51+
52+typedef enum _VP9_MEDIA_STATE_TYPE
53+{
54+ VP9_MEDIA_STATE_ENC_I_FRAME_DIST = 0,
55+ VP9_MEDIA_STATE_32X_SCALING ,
56+ VP9_MEDIA_STATE_16X_SCALING ,
57+ VP9_MEDIA_STATE_4X_SCALING ,
58+ VP9_MEDIA_STATE_32X_ME ,
59+ VP9_MEDIA_STATE_16X_ME ,
60+ VP9_MEDIA_STATE_4X_ME ,
61+ VP9_MEDIA_STATE_BRC_INIT_RESET ,
62+ VP9_MEDIA_STATE_BRC_UPDATE ,
63+ VP9_MEDIA_STATE_MBENC_I_32x32 ,
64+ VP9_MEDIA_STATE_MBENC_I_16x16 ,
65+ VP9_MEDIA_STATE_MBENC_P ,
66+ VP9_MEDIA_STATE_MBENC_TX ,
67+ VP9_MEDIA_STATE_DYS ,
68+ VP9_NUM_MEDIA_STATES
69+} VP9_MEDIA_STATE_TYPE;
70+
71+
72+enum vp9_walker_degree
73+{
74+ VP9_NO_DEGREE = 0,
75+ VP9_26_DEGREE,
76+ VP9_45Z_DEGREE
77+};
78+
79+struct vp9_encoder_kernel_parameter
80+{
81+ unsigned int curbe_size;
82+ unsigned int inline_data_size;
83+ unsigned int sampler_size;
84+};
85+
86+struct vp9_encoder_kernel_walker_parameter
87+{
88+ unsigned int walker_degree;
89+ unsigned int use_scoreboard;
90+ unsigned int scoreboard_mask;
91+ unsigned int no_dependency;
92+ unsigned int resolution_x;
93+ unsigned int resolution_y;
94+};
95+
96+struct vp9_encoder_scoreboard_parameter
97+{
98+ unsigned int mask;
99+ unsigned int type;
100+ unsigned int enable;
101+ unsigned int walkpat_flag;
102+};
103+
104+typedef enum _INTEL_VP9_ENC_OPERATION
105+{
106+ INTEL_VP9_ENC_SCALING4X = 0,
107+ INTEL_VP9_ENC_SCALING2X,
108+ INTEL_VP9_ENC_ME,
109+ INTEL_VP9_ENC_BRC,
110+ INTEL_VP9_ENC_MBENC,
111+ INTEL_VP9_ENC_DYS
112+} INTEL_VP9_ENC_OPERATION;
113+
114+struct gen9_surface_vp9
115+{
116+ VADriverContextP ctx;
117+ VASurfaceID scaled_4x_surface_id;
118+ struct object_surface *scaled_4x_surface_obj;
119+ VASurfaceID scaled_16x_surface_id;
120+ struct object_surface *scaled_16x_surface_obj;
121+
122+ VASurfaceID dys_surface_id;
123+ struct object_surface *dys_surface_obj;
124+ VASurfaceID dys_4x_surface_id;
125+ struct object_surface *dys_4x_surface_obj;
126+ VASurfaceID dys_16x_surface_id;
127+ struct object_surface *dys_16x_surface_obj;
128+ int dys_frame_width;
129+ int dys_frame_height;
130+ int frame_width;
131+ int frame_height;
132+ unsigned int qp_value;
133+ uint8_t dys_hme_flag;
134+};
135+
136+/* The definition for Scaling */
137+enum vp9_binding_table_offset_scaling
138+{
139+ VP9_BTI_SCALING_FRAME_SRC_Y = 0,
140+ VP9_BTI_SCALING_FRAME_DST_Y = 1,
141+ VP9_BTI_SCALING_FRAME_MBVPROCSTATS_DST_CM = 6,
142+ VP9_BTI_SCALING_NUM_SURFACES = 8
143+};
144+
145+
146+typedef struct _vp9_scaling4x_curbe_data_cm
147+{
148+ struct
149+ {
150+ uint32_t input_picture_width :16;
151+ uint32_t input_picture_height :16;
152+ } dw0;
153+
154+ struct {
155+ uint32_t input_y_bti;
156+ } dw1;
157+
158+ struct {
159+ uint32_t output_y_bti;
160+ } dw2;
161+
162+ struct {
163+ uint32_t reserved;
164+ } dw3;
165+
166+ struct {
167+ uint32_t reserved;
168+ } dw4;
169+
170+ struct {
171+ uint32_t reserved;
172+ } dw5;
173+
174+ struct
175+ {
176+ uint32_t reserved0 : 1;
177+ uint32_t enable_mb_variance_output : 1;
178+ uint32_t enable_mb_pixel_average_output : 1;
179+ uint32_t enable_blk8x8_stat_output : 1;
180+ uint32_t reserved1 : 28;
181+ } dw6;
182+
183+ struct {
184+ uint32_t reserved;
185+ } dw7;
186+
187+ struct {
188+ uint32_t reserved;
189+ } dw8;
190+
191+ struct {
192+ uint32_t reserved;
193+ } dw9;
194+
195+ struct {
196+ uint32_t mbv_proc_stat_bti;
197+ } dw10;
198+
199+ struct {
200+ uint32_t reserved;
201+ } dw11;
202+} vp9_scaling4x_curbe_data_cm;
203+
204+typedef struct _vp9_scaling2x_curbe_data_cm
205+{
206+ struct
207+ {
208+ uint32_t input_picture_width :16;
209+ uint32_t input_picture_height :16;
210+ } dw0;
211+
212+ /* dw1-dw7 */
213+ uint32_t reserved1[7];
214+
215+ struct {
216+ uint32_t input_y_bti;
217+ } dw8;
218+
219+ struct {
220+ uint32_t output_y_bti;
221+ } dw9;
222+
223+ uint32_t reserved2[2];
224+} vp9_scaling2x_curbe_data_cm;
225+
226+typedef struct _vp9_scaling4x_inline_data_cm
227+{
228+ struct
229+ {
230+ uint32_t dstblk_hori_origin : 16;
231+ uint32_t dstblk_vert_origin : 16;
232+ } dw0;
233+
234+ struct
235+ {
236+ uint32_t horiblk_compmask_layer0 : 16;
237+ uint32_t vertblk_compmask_layer0 : 16;
238+ } dw1;
239+
240+ struct
241+ {
242+ uint32_t horiblk_compmask_layer1 : 16;
243+ uint32_t vertblk_compmask_layer1 : 16;
244+ } dw2;
245+
246+ struct
247+ {
248+ uint32_t horiblk_compmask_layer2 : 16;
249+ uint32_t vertblk_compmask_layer2 : 16;
250+ } dw3;
251+
252+ struct
253+ {
254+ float video_xscaling_step;
255+ } dw4;
256+
257+ struct
258+ {
259+ float video_step_delta;
260+ } dw5;
261+
262+
263+ struct
264+ {
265+ uint32_t vert_blk_num :17;
266+ uint32_t area_interest :1;
267+ uint32_t reserved :14;
268+ } dw6;
269+
270+ struct
271+ {
272+ uint32_t grp_id_num;
273+ } dw7;
274+
275+ struct
276+ {
277+ uint32_t horiblk_compmask_layer3 : 16;
278+ uint32_t vertblk_compmask_layer3 : 16;
279+ } dw8;
280+
281+ struct
282+ {
283+ uint32_t horiblk_compmask_layer4 : 16;
284+ uint32_t vertblk_compmask_layer4 : 16;
285+ } dw9;
286+
287+ struct
288+ {
289+ uint32_t horiblk_compmask_layer5 : 16;
290+ uint32_t vertblk_compmask_layer5 : 16;
291+ } dw10;
292+
293+ struct
294+ {
295+ uint32_t horiblk_compmask_layer6 : 16;
296+ uint32_t vertblk_compmask_layer6 : 16;
297+ } dw11;
298+
299+ struct
300+ {
301+ uint32_t horiblk_compmask_layer7 : 16;
302+ uint32_t vertblk_compmask_layer7 : 16;
303+ } dw12;
304+
305+ struct {
306+ uint32_t reserved;
307+ } dw13;
308+
309+ struct {
310+ uint32_t reserved;
311+ } dw14;
312+
313+ struct {
314+ uint32_t reserved;
315+ } dw15;
316+} vp9_scaling4x_inline_data_cm;
317+
318+#define VP9_SCALING_4X 0
319+#define VP9_SCALING_2X 1
320+#define NUM_VP9_SCALING 2
321+
322+typedef struct _vp9_bti_scaling_offset
323+{
324+ uint32_t scaling_frame_src_y;
325+ uint32_t scaling_frame_dst_y;
326+ uint32_t reserved;
327+ uint32_t scaling_frame_mbv_proc_stat_dst;
328+} vp9_bti_scaling_offset;
329+
330+struct vp9_scaling_context
331+{
332+ struct i965_gpe_context gpe_contexts[NUM_VP9_SCALING];
333+ vp9_bti_scaling_offset scaling_4x_bti;
334+ vp9_bti_scaling_offset scaling_2x_bti;
335+};
336+
337+struct gen9_search_path_delta
338+{
339+ char search_path_delta_x:4;
340+ char search_path_delta_y:4;
341+};
342+
343+struct vp9_binding_table_me
344+{
345+ uint32_t memv_data_surface_offset;
346+ uint32_t memv16x_data_surface_offset;
347+ uint32_t me_dist_offset;
348+ uint32_t me_brc_dist_offset;
349+ uint32_t me_curr_picl0_offset;
350+ uint32_t me_curr_picl1_offset;
351+};
352+
353+enum vp9_binding_table_offset_me
354+{
355+ VP9_BTI_ME_MV_DATA_SURFACE = 0,
356+ VP9_BTI_16XME_MV_DATA_SURFACE = 1,
357+ VP9_BTI_ME_DISTORTION_SURFACE = 2,
358+ VP9_BTI_ME_BRC_DISTORTION_SURFACE = 3,
359+ VP9_BTI_ME_CURR_PIC_L0 = 4,
360+ VP9_BTI_ME_CURR_PIC_L1 = VP9_BTI_ME_CURR_PIC_L0 + 17,
361+ VP9_BTI_ME_NUM_SURFACES = VP9_BTI_ME_CURR_PIC_L1 + 5
362+};
363+
364+enum VP9_ENC_ME_MODES
365+{
366+ VP9_ENC_ME16X_BEFORE_ME4X = 0,
367+ VP9_ENC_ME16X_ONLY = 1,
368+ VP9_ENC_ME4X_ONLY = 2,
369+ VP9_ENC_ME4X_AFTER_ME16X = 3
370+};
371+
372+typedef struct _vp9_me_curbe_data
373+{
374+ struct
375+ {
376+ uint32_t skip_mode_enable:1;
377+ uint32_t adaptive_enable:1;
378+ uint32_t bi_mix_dis:1;
379+ uint32_t reserved0:2;
380+ uint32_t early_ime_success_enable:1;
381+ uint32_t reserved1:1;
382+ uint32_t t8x8_flag_for_inter_enable:1;
383+ uint32_t reserved2:16;
384+ uint32_t early_ime_stop:8;
385+ } dw0;
386+
387+ struct {
388+ uint32_t max_num_mvs:6;
389+ uint32_t reserved0:10;
390+ uint32_t bi_weight:6;
391+ uint32_t reserved1:6;
392+ uint32_t uni_mix_disable:1;
393+ uint32_t reserved2:3;
394+ } dw1;
395+
396+ struct {
397+ uint32_t max_len_sp:8;
398+ uint32_t max_num_su:8;
399+ uint32_t reserved0:16;
400+ } dw2;
401+
402+ struct {
403+ uint32_t src_size:2;
404+ uint32_t reserved0:2;
405+ uint32_t mb_type_remap:2;
406+ uint32_t src_Access:1;
407+ uint32_t ref_access:1;
408+ uint32_t search_ctrl:3;
409+ uint32_t dual_search_path_option:1;
410+ uint32_t sub_pel_mode:2;
411+ uint32_t skip_type:1;
412+ uint32_t disable_field_cache_allocation:1;
413+ uint32_t inter_chroma_mode:1;
414+ uint32_t ft_enable:1;
415+ uint32_t bme_disable_fbr:1;
416+ uint32_t block_based_skip_enable:1;
417+ uint32_t inter_sad:2;
418+ uint32_t intra_sad:2;
419+ uint32_t sub_mb_part_mask:7;
420+ uint32_t reserved1:1;
421+ } dw3;
422+
423+ struct {
424+ uint32_t reserved0:8;
425+ uint32_t picture_height_minus1:8;
426+ uint32_t picture_width:8;
427+ uint32_t reserved1:8;
428+ } dw4;
429+
430+ struct {
431+ uint32_t reserved0:8;
432+ uint32_t qp_prime_y:8;
433+ uint32_t ref_width:8;
434+ uint32_t ref_height:8;
435+ } dw5;
436+
437+ struct {
438+ uint32_t reserved0:3;
439+ uint32_t write_distortions:1;
440+ uint32_t use_mv_from_prev_step:1;
441+ uint32_t reserved1:3;
442+ uint32_t super_combine_dist:8;
443+ uint32_t max_vmvr:16;
444+ } dw6;
445+
446+ struct {
447+ uint32_t reserved0:16;
448+ uint32_t mv_cost_scale_factor:2;
449+ uint32_t bilinear_enable:1;
450+ uint32_t src_field_polarity:1;
451+ uint32_t weightedsad_harr:1;
452+ uint32_t ac_only_haar:1;
453+ uint32_t ref_id_cost_mode:1;
454+ uint32_t reserved1:1;
455+ uint32_t skip_center_mask:8;
456+ } dw7;
457+
458+ struct {
459+ uint32_t mode_0_cost:8;
460+ uint32_t mode_1_cost:8;
461+ uint32_t mode_2_cost:8;
462+ uint32_t mode_3_cost:8;
463+ } dw8;
464+
465+ struct {
466+ uint32_t mode_4_cost:8;
467+ uint32_t mode_5_cost:8;
468+ uint32_t mode_6_cost:8;
469+ uint32_t mode_7_cost:8;
470+ } dw9;
471+
472+ struct {
473+ uint32_t mode_8_cost:8;
474+ uint32_t mode_9_cost:8;
475+ uint32_t ref_id_cost:8;
476+ uint32_t chroma_intra_mode_cost:8;
477+ } dw10;
478+
479+ struct {
480+ uint32_t mv_0_cost:8;
481+ uint32_t mv_1_cost:8;
482+ uint32_t mv_2_cost:8;
483+ uint32_t mv_3_cost:8;
484+ } dw11;
485+
486+ struct {
487+ uint32_t mv_4_cost:8;
488+ uint32_t mv_5_cost:8;
489+ uint32_t mv_6_cost:8;
490+ uint32_t mv_7_cost:8;
491+ } dw12;
492+
493+ struct {
494+ uint32_t num_ref_idx_l0_minus1:8;
495+ uint32_t num_ref_idx_l1_minus1:8;
496+ uint32_t actual_mb_width:8;
497+ uint32_t actual_mb_height:8;
498+ } dw13;
499+
500+ struct {
501+ uint32_t l0_ref_pic_polarity_bits:8;
502+ uint32_t l1_ref_pic_polarity_bits:2;
503+ uint32_t reserved:22;
504+ } dw14;
505+
506+ struct {
507+ uint32_t prev_mv_read_pos_factor : 8;
508+ uint32_t mv_shift_factor : 8;
509+ uint32_t reserved:16;
510+ } dw15;
511+
512+ struct {
513+ struct gen9_search_path_delta sp_delta_0;
514+ struct gen9_search_path_delta sp_delta_1;
515+ struct gen9_search_path_delta sp_delta_2;
516+ struct gen9_search_path_delta sp_delta_3;
517+ } dw16;
518+
519+ struct {
520+ struct gen9_search_path_delta sp_delta_4;
521+ struct gen9_search_path_delta sp_delta_5;
522+ struct gen9_search_path_delta sp_delta_6;
523+ struct gen9_search_path_delta sp_delta_7;
524+ } dw17;
525+
526+ struct {
527+ struct gen9_search_path_delta sp_delta_8;
528+ struct gen9_search_path_delta sp_delta_9;
529+ struct gen9_search_path_delta sp_delta_10;
530+ struct gen9_search_path_delta sp_delta_11;
531+ } dw18;
532+
533+ struct {
534+ struct gen9_search_path_delta sp_delta_12;
535+ struct gen9_search_path_delta sp_delta_13;
536+ struct gen9_search_path_delta sp_delta_14;
537+ struct gen9_search_path_delta sp_delta_15;
538+ } dw19;
539+
540+ struct {
541+ struct gen9_search_path_delta sp_delta_16;
542+ struct gen9_search_path_delta sp_delta_17;
543+ struct gen9_search_path_delta sp_delta_18;
544+ struct gen9_search_path_delta sp_delta_19;
545+ } dw20;
546+
547+ struct {
548+ struct gen9_search_path_delta sp_delta_20;
549+ struct gen9_search_path_delta sp_delta_21;
550+ struct gen9_search_path_delta sp_delta_22;
551+ struct gen9_search_path_delta sp_delta_23;
552+ } dw21;
553+
554+ struct {
555+ struct gen9_search_path_delta sp_delta_24;
556+ struct gen9_search_path_delta sp_delta_25;
557+ struct gen9_search_path_delta sp_delta_26;
558+ struct gen9_search_path_delta sp_delta_27;
559+ } dw22;
560+
561+ struct {
562+ struct gen9_search_path_delta sp_delta_28;
563+ struct gen9_search_path_delta sp_delta_29;
564+ struct gen9_search_path_delta sp_delta_30;
565+ struct gen9_search_path_delta sp_delta_31;
566+ } dw23;
567+
568+ struct {
569+ struct gen9_search_path_delta sp_delta_32;
570+ struct gen9_search_path_delta sp_delta_33;
571+ struct gen9_search_path_delta sp_delta_34;
572+ struct gen9_search_path_delta sp_delta_35;
573+ } dw24;
574+
575+ struct {
576+ struct gen9_search_path_delta sp_delta_36;
577+ struct gen9_search_path_delta sp_delta_37;
578+ struct gen9_search_path_delta sp_delta_38;
579+ struct gen9_search_path_delta sp_delta_39;
580+ } dw25;
581+
582+ struct {
583+ struct gen9_search_path_delta sp_delta_40;
584+ struct gen9_search_path_delta sp_delta_41;
585+ struct gen9_search_path_delta sp_delta_42;
586+ struct gen9_search_path_delta sp_delta_43;
587+ } dw26;
588+
589+ struct {
590+ struct gen9_search_path_delta sp_delta_44;
591+ struct gen9_search_path_delta sp_delta_45;
592+ struct gen9_search_path_delta sp_delta_46;
593+ struct gen9_search_path_delta sp_delta_47;
594+ } dw27;
595+
596+ struct {
597+ struct gen9_search_path_delta sp_delta_48;
598+ struct gen9_search_path_delta sp_delta_49;
599+ struct gen9_search_path_delta sp_delta_50;
600+ struct gen9_search_path_delta sp_delta_51;
601+ } dw28;
602+
603+ struct {
604+ struct gen9_search_path_delta sp_delta_52;
605+ struct gen9_search_path_delta sp_delta_53;
606+ struct gen9_search_path_delta sp_delta_54;
607+ struct gen9_search_path_delta sp_delta_55;
608+ } dw29;
609+
610+ struct {
611+ uint32_t reserved0;
612+ } dw30;
613+
614+ struct {
615+ uint32_t reserved0;
616+ } dw31;
617+
618+ struct {
619+ uint32_t _4x_memv_output_data_surf_index;
620+ } dw32;
621+
622+ struct {
623+ uint32_t _16x_32x_memv_input_data_surf_index;
624+ } dw33;
625+
626+ struct {
627+ uint32_t _4x_me_output_dist_surf_index;
628+ } dw34;
629+
630+ struct {
631+ uint32_t _4x_me_output_brc_dist_surf_index;
632+ } dw35;
633+
634+ struct {
635+ uint32_t vme_fwd_inter_pred_surf_index;
636+ } dw36;
637+
638+ struct {
639+ uint32_t vme_bdw_inter_pred_surf_index;
640+ } dw37;
641+
642+ /* reserved */
643+ struct {
644+ uint32_t reserved;
645+ } dw38;
646+} vp9_me_curbe_data;
647+
648+struct vp9_me_context
649+{
650+ struct i965_gpe_context gpe_context;
651+ struct vp9_binding_table_me vp9_me_bti;
652+};
653+
654+
655+enum vp9_binding_table_offset_mbenc
656+{
657+ VP9_BTI_MBENC_CURR_Y_G9 = 0,
658+ VP9_BTI_MBENC_CURR_UV_G9 = 1,
659+ VP9_BTI_MBENC_CURR_NV12_G9 = 2,
660+ VP9_BTI_MBENC_LAST_NV12_G9 = 3,
661+ VP9_BTI_MBENC_GOLD_NV12_G9 = 5,
662+ VP9_BTI_MBENC_ALTREF_NV12_G9 = 7,
663+ VP9_BTI_MBENC_SEGMENTATION_MAP_G9 = 8,
664+ VP9_BTI_MBENC_TX_CURBE_G9 = 9,
665+ VP9_BTI_MBENC_HME_MV_DATA_G9 = 10,
666+ VP9_BTI_MBENC_HME_DISTORTION_G9 = 11,
667+ VP9_BTI_MBENC_MODE_DECISION_PREV_G9 = 12,
668+ VP9_BTI_MBENC_MODE_DECISION_G9 = 13,
669+ VP9_BTI_MBENC_OUT_16x16_INTER_MODES_G9 = 14,
670+ VP9_BTI_MBENC_CU_RECORDS_G9 = 15,
671+ VP9_BTI_MBENC_PAK_DATA_G9 = 16,
672+ VP9_BTI_MBENC_NUM_SURFACES_G9 = 17,
673+};
674+
675+struct vp9_binding_table_mbenc_i32
676+{
677+ uint32_t mbenc_curr_y;
678+ uint32_t mbenc_curr_uv;
679+ uint32_t mbenc_segmentation_map;
680+ uint32_t mbenc_mode_decision;
681+};
682+
683+struct vp9_binding_table_mbenc_i16
684+{
685+ uint32_t mbenc_curr_y;
686+ uint32_t mbenc_curr_uv;
687+ uint32_t mbenc_curr_nv12;
688+ uint32_t mbenc_segmentation_map;
689+ uint32_t mbenc_tx_curbe;
690+ uint32_t mbenc_mode_decision;
691+};
692+
693+struct vp9_binding_table_mbenc_p
694+{
695+ uint32_t mbenc_curr_y;
696+ uint32_t mbenc_curr_uv;
697+ uint32_t mbenc_curr_nv12;
698+ uint32_t mbenc_lastref_pic;
699+ uint32_t mbenc_goldref_pic;
700+ uint32_t mbenc_altref_pic;
701+ uint32_t mbenc_hme_mvdata;
702+ uint32_t mbenc_hme_distortion;
703+ uint32_t mbenc_segmentation_map;
704+ uint32_t mbenc_tx_curbe;
705+ uint32_t mbenc_mode_decision_prev;
706+ uint32_t mbenc_mode_decision;
707+ uint32_t mbenc_output_intermodes16x16;
708+};
709+
710+struct vp9_binding_table_mbenc_tx
711+{
712+ uint32_t mbenc_curr_y;
713+ uint32_t mbenc_curr_uv;
714+ uint32_t mbenc_segmentation_map;
715+ uint32_t mbenc_mode_decision;
716+ uint32_t mbenc_cu_records;
717+ uint32_t mbenc_pak_data;
718+};
719+
720+typedef struct _vp9_mbenc_curbe_data
721+{
722+ struct {
723+ uint32_t frame_width:16;
724+ uint32_t frame_height:16;
725+ } dw0;
726+
727+ struct {
728+ uint32_t frame_type : 8;
729+ uint32_t segmentation_enable : 8;
730+ uint32_t ref_frame_flags : 8;
731+ uint32_t min_16for32_check : 8;
732+ } dw1;
733+
734+ struct {
735+ uint32_t multi_pred : 8;
736+ uint32_t len_sp : 8;
737+ uint32_t search_x : 8;
738+ uint32_t search_y : 8;
739+ } dw2;
740+
741+ struct {
742+ uint32_t hme_enabled : 8;
743+ uint32_t multi_ref_qp_check : 8;
744+ uint32_t disable_temp_pred : 8;
745+ uint32_t min_ref_for32_check : 8;
746+ } dw3;
747+
748+ struct {
749+ uint32_t skip16_threshold : 16;
750+ uint32_t disable_mr_threshold : 16;
751+ } dw4;
752+
753+ struct {
754+ uint32_t enable_mbrc : 8;
755+ uint32_t inter_round : 8;
756+ uint32_t intra_round : 8;
757+ uint32_t frame_qpindex : 8;
758+ } dw5;
759+
760+ struct {
761+ uint32_t reserved;
762+ } dw6;
763+
764+ struct {
765+ uint32_t reserved;
766+ } dw7;
767+
768+ struct {
769+ uint32_t last_ref_qp : 16;
770+ uint32_t golden_ref_qp : 16;
771+ } dw8;
772+
773+ struct {
774+ uint32_t alt_ref_qp : 16;
775+ uint32_t reserved : 16;
776+ } dw9;
777+
778+ struct {
779+ uint32_t sum_intra_dist;
780+ } dw10;
781+
782+ struct {
783+ uint32_t sum_inter_dist;
784+ } dw11;
785+
786+ struct {
787+ uint32_t num_intra;
788+ } dw12;
789+
790+ struct {
791+ uint32_t num_lastref;
792+ } dw13;
793+
794+ struct {
795+ uint32_t num_goldref;
796+ } dw14;
797+
798+ struct {
799+ uint32_t num_altref;
800+ } dw15;
801+
802+ struct {
803+ uint32_t ime_search_path_delta03;
804+ } dw16;
805+
806+ struct {
807+ uint32_t ime_search_path_delta47;
808+ } dw17;
809+
810+ struct {
811+ uint32_t ime_search_path_delta811;
812+ } dw18;
813+
814+ struct {
815+ uint32_t ime_search_path_delta1215;
816+ } dw19;
817+
818+ struct {
819+ uint32_t ime_search_path_delta1619;
820+ } dw20;
821+
822+ struct {
823+ uint32_t ime_search_path_delta2023;
824+ } dw21;
825+
826+ struct {
827+ uint32_t ime_search_path_delta2427;
828+ } dw22;
829+
830+ struct {
831+ uint32_t ime_search_path_delta2831;
832+ } dw23;
833+
834+ struct {
835+ uint32_t ime_search_path_delta3235;
836+ } dw24;
837+
838+ struct {
839+ uint32_t ime_search_path_delta3639;
840+ } dw25;
841+
842+ struct {
843+ uint32_t ime_search_path_delta4043;
844+ } dw26;
845+
846+ struct {
847+ uint32_t ime_search_path_delta4447;
848+ } dw27;
849+
850+ struct {
851+ uint32_t ime_search_path_delta4851;
852+ } dw28;
853+
854+ struct {
855+ uint32_t ime_search_path_delta5255;
856+ } dw29;
857+
858+ struct {
859+ uint32_t reserved;
860+ } dw30;
861+
862+ struct {
863+ uint32_t reserved;
864+ } dw31;
865+
866+ /* DW 32 */
867+ struct {
868+ struct {
869+ uint32_t segment_qpindex : 8;
870+ uint32_t intra_non_dcpenalty_16x16 : 8;
871+ uint32_t intra_non_dcpenalty_8x8 : 8;
872+ uint32_t intra_non_dcpenalty_4x4 : 8;
873+ } dw32;
874+
875+ struct {
876+ uint32_t intra_non_dcpenalty_32x32 : 16;
877+ uint32_t reserved : 16;
878+ } dw33;
879+
880+
881+ struct {
882+ uint32_t zero_cost : 16;
883+ uint32_t near_cost : 16;
884+ } dw34;
885+
886+ struct {
887+ uint32_t nearest_cost : 16;
888+ uint32_t refid_cost : 16;
889+ } dw35;
890+
891+ struct {
892+ uint32_t mv_cost0 : 16;
893+ uint32_t mv_cost1 : 16;
894+ } dw36;
895+
896+ struct {
897+ uint32_t mv_cost2 : 16;
898+ uint32_t mv_cost3 : 16;
899+ } dw37;
900+
901+ struct {
902+ uint32_t mv_cost4 : 16;
903+ uint32_t mv_cost5 : 16;
904+ } dw38;
905+
906+ struct {
907+ uint32_t mv_cost6 : 16;
908+ uint32_t mv_cost7 : 16;
909+ } dw39;
910+
911+ struct {
912+ uint32_t mv_cost0 : 8;
913+ uint32_t mv_cost1 : 8;
914+ uint32_t mv_cost2 : 8;
915+ uint32_t mv_cost3 : 8;
916+ } dw40;
917+
918+ struct {
919+ uint32_t mv_cost4 : 8;
920+ uint32_t mv_cost5 : 8;
921+ uint32_t mv_cost6 : 8;
922+ uint32_t mv_cost7 : 8;
923+ } dw41;
924+
925+ struct {
926+ uint32_t mode_cost0 : 8;
927+ uint32_t mode_cost1 : 8;
928+ uint32_t mode_cost2 : 8;
929+ uint32_t mode_cost3 : 8;
930+ } dw42;
931+
932+ struct {
933+ uint32_t mode_cost4 : 8;
934+ uint32_t mode_cost5 : 8;
935+ uint32_t mode_cost6 : 8;
936+ uint32_t mode_cost7 : 8;
937+ } dw43;
938+
939+ struct {
940+ uint32_t mode_cost8 : 8;
941+ uint32_t mode_cost9 : 8;
942+ uint32_t refid_cost : 8;
943+ uint32_t reserved : 8;
944+ } dw44;
945+
946+ struct {
947+ uint32_t mode_cost_intra32x32 : 16;
948+ uint32_t mode_cost_inter32x32 : 16;
949+ } dw45;
950+
951+ struct {
952+ uint32_t mode_cost_intra32x16 : 16;
953+ uint32_t reserved : 16;
954+ } dw46;
955+
956+ struct {
957+ uint32_t lambda_intra : 16;
958+ uint32_t lambda_inter : 16;
959+ } dw47;
960+ } segments[8];
961+
962+ /*
963+ Segment 0: dw32 - dw47
964+ Segment 1 : dw48 - dw63
965+ Segment 2 : dw64 - dw79
966+ Segment 3 : dw80 - dw95
967+ Segment 4 : dw96 - dw111
968+ Segment 5 : dw112 - dw127
969+ Segment 6 : dw128 - dw143
970+ Segment 7 : dw144 - dw159
971+ */
972+
973+ // dw160
974+ struct {
975+ uint32_t enc_curr_y_surf_bti;
976+ } dw160;
977+
978+ struct {
979+ uint32_t reserved;
980+ } dw161;
981+
982+ struct {
983+ uint32_t enc_curr_nv12_surf_bti;
984+ } dw162;
985+
986+ struct {
987+ uint32_t reserved;
988+ } dw163;
989+
990+ struct {
991+ uint32_t reserved;
992+ } dw164;
993+
994+ struct {
995+ uint32_t reserved;
996+ } dw165;
997+
998+ struct {
999+ uint32_t segmentation_map_bti;
1000+ } dw166;
1001+
1002+ struct {
1003+ uint32_t tx_curbe_bti;
1004+ } dw167;
1005+
1006+ struct {
1007+ uint32_t hme_mvdata_bti;
1008+ } dw168;
1009+
1010+ struct {
1011+ uint32_t hme_distortion_bti;
1012+ } dw169;
1013+
1014+ struct {
1015+ uint32_t reserved;
1016+ } dw170;
1017+
1018+ struct {
1019+ uint32_t mode_decision_prev_bti;
1020+ } dw171;
1021+
1022+ struct {
1023+ uint32_t mode_decision_bti;
1024+ } dw172;
1025+
1026+ struct {
1027+ uint32_t output_16x16_inter_modes_bti;
1028+ } dw173;
1029+
1030+ struct {
1031+ uint32_t cu_record_bti;
1032+ } dw174;
1033+
1034+ struct {
1035+ uint32_t pak_data_bti;
1036+ } dw175;
1037+} vp9_mbenc_curbe_data;
1038+
1039+
1040+
1041+#define VP9_MBENC_IDX_KEY_32x32 0
1042+#define VP9_MBENC_IDX_KEY_16x16 1
1043+#define VP9_MBENC_IDX_INTER 2
1044+#define VP9_MBENC_IDX_TX 3
1045+#define NUM_VP9_MBENC 4
1046+
1047+struct vp9_mbenc_context
1048+{
1049+ struct i965_gpe_context gpe_contexts[NUM_VP9_MBENC];
1050+ struct vp9_binding_table_mbenc_tx vp9_mbenc_tx_bti;
1051+ struct vp9_binding_table_mbenc_i32 vp9_mbenc_i32_bti;
1052+ struct vp9_binding_table_mbenc_i16 vp9_mbenc_i16_bti;
1053+ struct vp9_binding_table_mbenc_p vp9_mbenc_p_bti;
1054+ dri_bo *mbenc_bo_dys;
1055+ int mbenc_bo_size;
1056+};
1057+
1058+enum vp9_binding_table_offset_dys
1059+{
1060+ VP9_BTI_DYS_INPUT_NV12 = 0,
1061+ VP9_BTI_DYS_OUTPUT_Y = 1,
1062+ VP9_BTI_DYS_OUTPUT_UV = 2,
1063+ VP9_BTI_DYS_NUM_SURFACES = 3
1064+};
1065+
1066+struct vp9_binding_table_dys
1067+{
1068+ uint32_t dys_input_frame_nv12;
1069+ uint32_t dys_output_frame_y;
1070+ uint32_t dys_output_frame_uv;
1071+};
1072+
1073+typedef struct _vp9_dys_curbe_data
1074+{
1075+ struct {
1076+ uint32_t input_frame_width : 16;
1077+ uint32_t input_frame_height: 16;
1078+ } dw0;
1079+
1080+ struct {
1081+ uint32_t output_frame_width : 16;
1082+ uint32_t output_frame_height: 16;
1083+ } dw1;
1084+
1085+ struct {
1086+ float delta_u;
1087+ } dw2;
1088+
1089+ struct {
1090+ float delta_v;
1091+ } dw3;
1092+
1093+ /* DW4-15 */
1094+ uint32_t reserved[12];
1095+
1096+ struct {
1097+ uint32_t input_frame_nv12_bti;
1098+ } dw16;
1099+
1100+ struct {
1101+ uint32_t output_frame_y_bti;
1102+ } dw17;
1103+
1104+ struct {
1105+ uint32_t avs_sample_idx;
1106+ } dw18;
1107+} vp9_dys_curbe_data;
1108+
1109+// DYS kernel parameters
1110+typedef struct _gen9_vp9_dys_kernel_param
1111+{
1112+ uint32_t input_width;
1113+ uint32_t input_height;
1114+ uint32_t output_width;
1115+ uint32_t output_height;
1116+ struct object_surface *input_surface;
1117+ struct object_surface *output_surface;
1118+} gen9_vp9_dys_kernel_param;
1119+
1120+struct vp9_dys_context {
1121+ struct i965_gpe_context gpe_context;
1122+ struct vp9_binding_table_dys vp9_dys_bti;
1123+};
1124+
1125+enum vp9_binding_table_offset_brc
1126+{
1127+ VP9_BTI_BRC_SRCY4X_G9 = 0,
1128+ VP9_BTI_BRC_VME_COARSE_INTRA_G9 = 1,
1129+ VP9_BTI_BRC_HISTORY_G9 = 2,
1130+ VP9_BTI_BRC_CONSTANT_DATA_G9 = 3,
1131+ VP9_BTI_BRC_DISTORTION_G9 = 4,
1132+ VP9_BTI_BRC_MMDK_PAK_OUTPUT_G9 = 5,
1133+ VP9_BTI_BRC_MBENC_CURBE_INPUT_G9 = 6,
1134+ VP9_BTI_BRC_MBENC_CURBE_OUTPUT_G9 = 7,
1135+ VP9_BTI_BRC_PIC_STATE_INPUT_G9 = 8,
1136+ VP9_BTI_BRC_PIC_STATE_OUTPUT_G9 = 9,
1137+ VP9_BTI_BRC_SEGMENT_STATE_INPUT_G9 = 10,
1138+ VP9_BTI_BRC_SEGMENT_STATE_OUTPUT_G9 = 11,
1139+ VP9_BTI_BRC_BITSTREAM_SIZE_G9 = 12,
1140+ VP9_BTI_BRC_HFW_DATA_G9 = 13,
1141+ VP9_BTI_BRC_NUM_SURFACES_G9 = 14,
1142+};
1143+
1144+struct vp9_binding_table_brc_intra_dist
1145+{
1146+ uint32_t intra_dist_src_y4xsurface;
1147+ uint32_t brc_intra_dist_vme_coarse_intra;
1148+ uint32_t brc_intra_dist_distortion_buffer;
1149+};
1150+
1151+struct vp9_binding_table_brc_init
1152+{
1153+ uint32_t brc_history_buffer;
1154+ uint32_t brc_distortion_buffer;
1155+};
1156+
1157+
1158+typedef struct _vp9_brc_curbe_data
1159+{
1160+ struct {
1161+ uint32_t frame_width : 16;
1162+ uint32_t frame_height : 16;
1163+ } dw0;
1164+
1165+ struct {
1166+ uint32_t frame_type : 8;
1167+ uint32_t segmentation_enable : 8;
1168+ uint32_t ref_frame_flags : 8;
1169+ uint32_t num_tlevels : 8;
1170+ } dw1;
1171+
1172+ struct {
1173+ uint32_t reserved : 16;
1174+ uint32_t intra_mode_disable : 8;
1175+ uint32_t loop_filter_type : 8;
1176+ } dw2;
1177+
1178+ struct {
1179+ uint32_t max_level_ratiot0 : 8;
1180+ uint32_t max_level_ratiot1 : 8;
1181+ uint32_t max_level_ratiot2 : 8;
1182+ uint32_t max_level_ratiot3 : 8;
1183+ } dw3;
1184+
1185+ struct {
1186+ uint32_t profile_level_max_frame;
1187+ } dw4;
1188+
1189+ struct {
1190+ uint32_t init_buf_fullness;
1191+ } dw5;
1192+
1193+ struct {
1194+ uint32_t buf_size;
1195+ } dw6;
1196+
1197+ struct {
1198+ uint32_t target_bit_rate;
1199+ } dw7;
1200+
1201+ struct {
1202+ uint32_t max_bit_rate;
1203+ } dw8;
1204+
1205+ struct {
1206+ uint32_t min_bit_rate;
1207+ } dw9;
1208+
1209+ struct {
1210+ uint32_t frame_ratem;
1211+ } dw10;
1212+
1213+ struct {
1214+ uint32_t frame_rated;
1215+ } dw11;
1216+
1217+ struct {
1218+ uint32_t brc_flag : 16;
1219+ uint32_t gopp : 16;
1220+ } dw12;
1221+
1222+ struct {
1223+ uint32_t init_frame_width : 16;
1224+ uint32_t init_frame_height : 16;
1225+ } dw13;
1226+
1227+ struct {
1228+ uint32_t avbr_accuracy : 16;
1229+ uint32_t avbr_convergence : 16;
1230+ } dw14;
1231+
1232+ struct {
1233+ uint32_t min_qp : 16;
1234+ uint32_t max_qp : 16;
1235+ } dw15;
1236+
1237+ struct {
1238+ uint32_t cq_level : 16;
1239+ uint32_t reserved : 16;
1240+ } dw16;
1241+
1242+ struct {
1243+ uint32_t enable_dynamic_scaling : 16;
1244+ uint32_t brc_overshoot_cbr_pct : 16;
1245+ } dw17;
1246+
1247+ struct {
1248+ uint32_t pframe_deviation_threshold0 : 8;
1249+ uint32_t pframe_deviation_threshold1 : 8;
1250+ uint32_t pframe_deviation_threshold2 : 8;
1251+ uint32_t pframe_deviation_threshold3 : 8;
1252+ } dw18;
1253+
1254+ struct {
1255+ uint32_t pframe_deviation_threshold4 : 8;
1256+ uint32_t pframe_deviation_threshold5 : 8;
1257+ uint32_t pframe_deviation_threshold6 : 8;
1258+ uint32_t pframe_deviation_threshold7 : 8;
1259+ } dw19;
1260+
1261+ struct {
1262+ uint32_t vbr_deviation_threshold0 : 8;
1263+ uint32_t vbr_deviation_threshold1 : 8;
1264+ uint32_t vbr_deviation_threshold2 : 8;
1265+ uint32_t vbr_deviation_threshold3 : 8;
1266+ } dw20;
1267+
1268+ struct {
1269+ uint32_t vbr_deviation_threshold4 : 8;
1270+ uint32_t vbr_deviation_threshold5 : 8;
1271+ uint32_t vbr_deviation_threshold6 : 8;
1272+ uint32_t vbr_deviation_threshold7 : 8;
1273+ } dw21;
1274+
1275+ struct {
1276+ uint32_t kframe_deviation_threshold0 : 8;
1277+ uint32_t kframe_deviation_threshold1 : 8;
1278+ uint32_t kframe_deviation_threshold2 : 8;
1279+ uint32_t kframe_deviation_threshold3 : 8;
1280+ } dw22;
1281+
1282+ struct {
1283+ uint32_t kframe_deviation_threshold4 : 8;
1284+ uint32_t kframe_deviation_threshold5 : 8;
1285+ uint32_t kframe_deviation_threshold6 : 8;
1286+ uint32_t kframe_deviation_threshold7 : 8;
1287+ } dw23;
1288+
1289+ struct {
1290+ uint32_t target_size;
1291+ } dw24;
1292+
1293+ struct {
1294+ uint32_t frame_number;
1295+ } dw25;
1296+
1297+ struct {
1298+ uint32_t reserved;
1299+ } dw26;
1300+
1301+ struct {
1302+ uint32_t hrd_buffer_fullness_upper_limit;
1303+ } dw27;
1304+
1305+ struct {
1306+ uint32_t hrd_buffer_fullness_lower_limit;
1307+ } dw28;
1308+
1309+ struct {
1310+ uint32_t reserved;
1311+ } dw29;
1312+
1313+ struct {
1314+ uint32_t reserved;
1315+ } dw30;
1316+
1317+ struct {
1318+ uint32_t reserved;
1319+ } dw31;
1320+
1321+ struct {
1322+ uint32_t seg_delta_qp0 : 8;
1323+ uint32_t seg_delta_qp1 : 8;
1324+ uint32_t seg_delta_qp2 : 8;
1325+ uint32_t seg_delta_qp3 : 8;
1326+ } dw32;
1327+
1328+ struct {
1329+ uint32_t seg_delta_qp4 : 8;
1330+ uint32_t seg_delta_qp5 : 8;
1331+ uint32_t seg_delta_qp6 : 8;
1332+ uint32_t seg_delta_qp7 : 8;
1333+ } dw33;
1334+
1335+ struct {
1336+ uint32_t temporal_id : 8;
1337+ uint32_t multi_ref_qp_check : 8;
1338+ uint32_t reserved : 16;
1339+ } dw34;
1340+
1341+ struct {
1342+ uint32_t max_num_pak_passes : 8;
1343+ uint32_t sync_async : 8;
1344+ uint32_t overflow : 8;
1345+ uint32_t mbrc : 8;
1346+ } dw35;
1347+
1348+ struct {
1349+ uint32_t reserved : 16;
1350+ uint32_t segmentation : 8;
1351+ uint32_t reserved1 : 8;
1352+ } dw36;
1353+
1354+ struct {
1355+ uint32_t cur_qpindex : 8;
1356+ uint32_t lastref_qpindex : 8;
1357+ uint32_t goldref_qpindex : 8;
1358+ uint32_t altref_qpindex : 8;
1359+ } dw37;
1360+
1361+ struct {
1362+ uint32_t qdelta_ydc : 8;
1363+ uint32_t qdelta_uvac : 8;
1364+ uint32_t qdelta_uvdc : 8;
1365+ uint32_t reserved : 8;
1366+ } dw38;
1367+
1368+ struct {
1369+ uint32_t reserved;
1370+ } dw39;
1371+
1372+ struct {
1373+ uint32_t reserved;
1374+ } dw40;
1375+
1376+ struct {
1377+ uint32_t reserved;
1378+ } dw41;
1379+
1380+ struct {
1381+ uint32_t reserved;
1382+ } dw42;
1383+
1384+ struct {
1385+ uint32_t reserved;
1386+ } dw43;
1387+
1388+ struct {
1389+ uint32_t reserved;
1390+ } dw44;
1391+
1392+ struct {
1393+ uint32_t reserved;
1394+ } dw45;
1395+
1396+ struct {
1397+ uint32_t reserved;
1398+ } dw46;
1399+
1400+ struct {
1401+ uint32_t reserved;
1402+ } dw47;
1403+
1404+ struct {
1405+ uint32_t brc_y4x_input_bti;
1406+ } dw48;
1407+
1408+ struct {
1409+ uint32_t brc_vme_coarse_intra_input_bti;
1410+ } dw49;
1411+
1412+ struct {
1413+ uint32_t brc_history_buffer_bti;
1414+ } dw50;
1415+
1416+ struct {
1417+ uint32_t brc_const_data_input_bti;
1418+ } dw51;
1419+
1420+ struct {
1421+ uint32_t brc_distortion_bti;
1422+ } dw52;
1423+
1424+ struct {
1425+ uint32_t brc_mmdk_pak_output_bti;
1426+ } dw53;
1427+
1428+ struct {
1429+ uint32_t brc_enccurbe_input_bti;
1430+ } dw54;
1431+
1432+ struct {
1433+ uint32_t brc_enccurbe_output_bti;
1434+ } dw55;
1435+
1436+ struct {
1437+ uint32_t brc_pic_state_input_bti;
1438+ } dw56;
1439+
1440+ struct {
1441+ uint32_t brc_pic_state_output_bti;
1442+ } dw57;
1443+
1444+ struct {
1445+ uint32_t brc_seg_state_input_bti;
1446+ } dw58;
1447+
1448+ struct {
1449+ uint32_t brc_seg_state_output_bti;
1450+ } dw59;
1451+
1452+ struct {
1453+ uint32_t brc_bitstream_size_data_bti;
1454+ } dw60;
1455+
1456+ struct {
1457+ uint32_t brc_hfw_data_output_bti;
1458+ } dw61;
1459+
1460+ struct {
1461+ uint32_t reserved;
1462+ } dw62;
1463+
1464+ struct {
1465+ uint32_t reserved;
1466+ } dw63;
1467+} vp9_brc_curbe_data;
1468+
1469+
1470+#define VP9_BRC_INTRA_DIST 0
1471+#define VP9_BRC_INIT 1
1472+#define VP9_BRC_RESET 2
1473+#define VP9_BRC_UPDATE 3
1474+#define NUM_VP9_BRC 4
1475+
1476+struct vp9_brc_context {
1477+ struct i965_gpe_context gpe_contexts[NUM_VP9_BRC];
1478+};
1479+
1480+struct gen9_vp9_scaling_curbe_param
1481+{
1482+ uint32_t input_picture_width;
1483+ uint32_t input_picture_height;
1484+ bool use_16x_scaling;
1485+ bool use_32x_scaling;
1486+ bool mb_variance_output_enabled;
1487+ bool mb_pixel_average_output_enabled;
1488+ bool blk8x8_stat_enabled;
1489+};
1490+
1491+struct gen9_vp9_me_curbe_param
1492+{
1493+ VAEncSequenceParameterBufferVP9 *pseq_param;
1494+ VAEncPictureParameterBufferVP9 *ppic_param;
1495+ uint32_t frame_width;
1496+ uint32_t frame_height;
1497+ uint32_t ref_frame_flag;
1498+ bool use_16x_me;
1499+ bool b16xme_enabled;
1500+};
1501+
1502+struct gen9_vp9_mbenc_curbe_param
1503+{
1504+ VAEncSequenceParameterBufferVP9 *pseq_param;
1505+ VAEncPictureParameterBufferVP9 *ppic_param;
1506+ VAEncMiscParameterTypeVP9PerSegmantParam *psegment_param;
1507+
1508+ uint16_t frame_width_in_mb;
1509+ uint16_t frame_height_in_mb;
1510+ uint16_t frame_type;
1511+ bool hme_enabled;
1512+ uint8_t ref_frame_flag;
1513+ VP9_MEDIA_STATE_TYPE media_state_type;
1514+ struct object_surface *curr_obj;
1515+ struct object_surface *last_ref_obj;
1516+ struct object_surface *golden_ref_obj;
1517+ struct object_surface *alt_ref_obj;
1518+ int picture_coding_type;
1519+ bool mbenc_curbe_set_in_brc_update;
1520+ bool multi_ref_qp_check;
1521+};
1522+
1523+struct gen9_vp9_dys_curbe_param
1524+{
1525+ uint32_t input_width;
1526+ uint32_t input_height;
1527+ uint32_t output_width;
1528+ uint32_t output_height;
1529+};
1530+
1531+struct gen9_vp9_brc_curbe_param
1532+{
1533+ VAEncSequenceParameterBufferVP9 *pseq_param;
1534+ VAEncPictureParameterBufferVP9 *ppic_param;
1535+ VAEncMiscParameterTypeVP9PerSegmantParam *psegment_param;
1536+
1537+ VASurfaceID curr_frame;
1538+ uint32_t picture_coding_type;
1539+ /* the unit is in bits */
1540+ double *pbrc_init_current_target_buf_full_in_bits;
1541+ double *pbrc_init_reset_input_bits_per_frame;
1542+ uint32_t *pbrc_init_reset_buf_size_in_bits;
1543+ uint32_t frame_width;
1544+ uint32_t frame_height;
1545+ uint32_t frame_width_in_mb;
1546+ uint32_t frame_height_in_mb;
1547+ uint32_t ref_frame_flag;
1548+ bool hme_enabled;
1549+ bool initbrc;
1550+ bool mbbrc_enabled;
1551+ bool b_used_ref;
1552+ int32_t brc_num_pak_passes;
1553+ bool multi_ref_qp_check;
1554+ int16_t frame_number;
1555+ int32_t frame_rate;
1556+ VP9_MEDIA_STATE_TYPE media_state_type;
1557+};
1558+
1559+struct gen9_vp9_scaling_surface_param
1560+{
1561+ VASurfaceID curr_pic;
1562+ void *p_scaling_bti;
1563+ struct object_surface *input_surface;
1564+ struct object_surface *output_surface;
1565+ uint32_t input_frame_width;
1566+ uint32_t input_frame_height;
1567+ uint32_t output_frame_width;
1568+ uint32_t output_frame_height;
1569+ uint32_t vert_line_stride;
1570+ uint32_t vert_line_stride_offset;
1571+ bool scaling_out_use_16unorm_surf_fmt;
1572+ bool scaling_out_use_32unorm_surf_fmt;
1573+ bool mbv_proc_stat_enabled;
1574+ struct i965_gpe_resource *pres_mbv_proc_stat_buffer;
1575+};
1576+
1577+struct gen9_vp9_brc_init_constant_buffer_param
1578+{
1579+ struct i965_gpe_resource *pres_brc_const_data_buffer;
1580+ uint16_t picture_coding_type;
1581+};
1582+
1583+struct gen9_vp9_dys_surface_param
1584+{
1585+ struct object_surface *input_frame;
1586+ struct object_surface *output_frame;
1587+ uint32_t vert_line_stride;
1588+ uint32_t vert_line_stride_offset;
1589+};
1590+
1591+struct gen9_vp9_me_surface_param
1592+{
1593+ VASurfaceID curr_pic;
1594+ struct object_surface *last_ref_pic;
1595+ struct object_surface *golden_ref_pic;
1596+ struct object_surface *alt_ref_pic;
1597+
1598+ struct i965_gpe_resource *pres_4x_memv_data_buffer;
1599+ struct i965_gpe_resource *pres_16x_memv_data_buffer;
1600+ struct i965_gpe_resource *pres_me_distortion_buffer;
1601+ struct i965_gpe_resource *pres_me_brc_distortion_buffer;
1602+ uint32_t downscaled_width_in_mb;
1603+ uint32_t downscaled_height_in_mb;
1604+ uint32_t frame_width;
1605+ uint32_t frame_height;
1606+ bool use_16x_me;
1607+ bool b16xme_enabled;
1608+ bool dys_enabled;
1609+};
1610+
1611+struct gen9_vp9_mbenc_surface_param
1612+{
1613+ int media_state_type;
1614+ struct object_surface *last_ref_obj;
1615+ struct object_surface *golden_ref_obj;
1616+ struct object_surface *alt_ref_obj;
1617+ struct object_surface *curr_frame_obj;
1618+ unsigned short picture_coding_type;
1619+ unsigned int curr_surface_offset;
1620+ struct i965_gpe_resource *ps4x_memv_data_buffer;
1621+ struct i965_gpe_resource *ps4x_memv_distortion_buffer;
1622+ struct i965_gpe_resource *ps_me_brc_distortion_buffer;
1623+ uint32_t frame_width;
1624+ uint32_t frame_height;
1625+ uint32_t frame_width_in_mb;
1626+ uint32_t frame_height_in_mb;
1627+ bool hme_enabled;
1628+ bool segmentation_enabled;
1629+ uint32_t mb_data_offset;
1630+ struct i965_gpe_resource *pres_mb_code_surface;
1631+ struct i965_gpe_resource *pres_segmentation_map;
1632+ struct i965_gpe_resource *pres_mode_decision_prev;
1633+ struct i965_gpe_resource *pres_mode_decision;
1634+ struct i965_gpe_resource *pres_mbenc_curbe_buffer;
1635+ struct i965_gpe_resource *pres_output_16x16_inter_modes;
1636+ struct i965_gpe_resource *pres_mode_decision_i32;
1637+
1638+ struct i965_gpe_context *gpe_context_tx;
1639+};
1640+
1641+typedef struct _vp9_frame_status_
1642+{
1643+ uint16_t frame_width;
1644+ uint16_t frame_height;
1645+ uint8_t frame_type;
1646+ uint8_t show_frame;
1647+ uint8_t refresh_frame_context;
1648+ uint8_t frame_context_idx;
1649+ uint8_t intra_only;
1650+} vp9_frame_status;
1651+
1652+#define VP9_BRC_SEQ 0x01
1653+#define VP9_BRC_HRD 0x02
1654+#define VP9_BRC_RC 0x04
1655+#define VP9_BRC_FR 0x08
1656+#define VP9_BRC_FAILURE (1 << 31)
1657+
1658+struct gen9_hcpe_pipe_mode_select_param
1659+{
1660+ uint32_t codec_mode;
1661+ uint32_t stream_out;
1662+};
1663+
1664+typedef struct _hcp_surface_state {
1665+ struct {
1666+ uint32_t surface_pitch : 17;
1667+ uint32_t reserved : 11;
1668+ uint32_t surface_id : 4;
1669+ } dw1;
1670+
1671+ struct {
1672+ uint32_t y_cb_offset : 15;
1673+ uint32_t reserved : 12;
1674+ uint32_t surface_format : 5;
1675+ } dw2;
1676+
1677+ struct {
1678+ uint32_t default_alpha : 16;
1679+ uint32_t y_cr_offset : 16;
1680+ } dw3;
1681+
1682+ struct {
1683+ uint32_t auxilary_index : 11;
1684+ uint32_t reserved0 : 1;
1685+ uint32_t memory_compression : 1;
1686+ uint32_t reserved1 : 18;
1687+ } dw4;
1688+} hcp_surface_state;
1689+
1690+struct gen9_encoder_context_vp9
1691+{
1692+ struct vp9_scaling_context scaling_context;
1693+ struct vp9_me_context me_context;
1694+ struct vp9_mbenc_context mbenc_context;
1695+ struct vp9_brc_context brc_context;
1696+ struct vp9_dys_context dys_context;
1697+ void *enc_priv_state;
1698+
1699+ struct i965_gpe_resource res_brc_history_buffer;
1700+ struct i965_gpe_resource res_brc_const_data_buffer;
1701+ struct i965_gpe_resource res_brc_mmdk_pak_buffer;
1702+ struct i965_gpe_resource res_brc_mbenc_curbe_write_buffer;
1703+ struct i965_gpe_resource res_pic_state_brc_read_buffer;
1704+ struct i965_gpe_resource res_pic_state_brc_write_hfw_read_buffer;
1705+ struct i965_gpe_resource res_pic_state_hfw_write_buffer;
1706+ struct i965_gpe_resource res_seg_state_brc_read_buffer;
1707+ struct i965_gpe_resource res_seg_state_brc_write_buffer;
1708+ struct i965_gpe_resource res_brc_bitstream_size_buffer;
1709+ struct i965_gpe_resource res_brc_hfw_data_buffer;
1710+
1711+ struct i965_gpe_resource s4x_memv_distortion_buffer;
1712+ struct i965_gpe_resource mb_segment_map_surface;
1713+ struct i965_gpe_resource s4x_memv_data_buffer;
1714+ struct i965_gpe_resource s16x_memv_data_buffer;
1715+ struct i965_gpe_resource res_mode_decision[2];
1716+ struct i965_gpe_resource res_output_16x16_inter_modes;
1717+ struct i965_gpe_resource res_mb_code_surface;
1718+
1719+ /* PAK resource */
1720+ struct i965_gpe_resource res_hvd_line_buffer;
1721+ struct i965_gpe_resource res_hvd_tile_line_buffer;
1722+ struct i965_gpe_resource res_deblocking_filter_line_buffer;
1723+ struct i965_gpe_resource res_deblocking_filter_tile_line_buffer;
1724+ struct i965_gpe_resource res_deblocking_filter_tile_col_buffer;
1725+
1726+ struct i965_gpe_resource res_metadata_line_buffer;
1727+ struct i965_gpe_resource res_metadata_tile_line_buffer;
1728+ struct i965_gpe_resource res_metadata_tile_col_buffer;
1729+
1730+ struct i965_gpe_resource res_segmentid_buffer;
1731+ struct i965_gpe_resource res_prob_buffer;
1732+ struct i965_gpe_resource res_prob_delta_buffer;
1733+ struct i965_gpe_resource res_prob_counter_buffer;
1734+
1735+ struct i965_gpe_resource res_compressed_input_buffer;
1736+ struct i965_gpe_resource res_tile_record_streamout_buffer;
1737+ struct i965_gpe_resource res_cu_stat_streamout_buffer;
1738+ struct i965_gpe_resource res_mv_temporal_buffer[2];
1739+ struct i965_gpe_resource res_pak_uncompressed_input_buffer;
1740+
1741+ char *frame_header_data;
1742+
1743+ unsigned int use_hw_scoreboard;
1744+ unsigned int use_hw_non_stalling_scoreboard;
1745+ unsigned int mb_stats_supported;
1746+ unsigned int hme_supported;
1747+ unsigned int b32xme_supported;
1748+
1749+ unsigned int downscaled_width_in_mb4x;
1750+ unsigned int downscaled_height_in_mb4x;
1751+
1752+ void (*pfn_set_sample_state_dys)(
1753+ VADriverContextP ctx,
1754+ struct encode_state *encode_state,
1755+ struct i965_gpe_context *gpe_context,
1756+ struct intel_encoder_context *encoder_context);
1757+
1758+ void (*pfn_set_curbe_mbenc)(
1759+ VADriverContextP ctx,
1760+ struct encode_state *encode_state,
1761+ struct i965_gpe_context *gpe_context,
1762+ struct intel_encoder_context *encoder_context,
1763+ struct gen9_vp9_mbenc_curbe_param *param);
1764+
1765+ void (*pfn_set_curbe_me)(
1766+ VADriverContextP ctx,
1767+ struct encode_state *encode_state,
1768+ struct i965_gpe_context *gpe_context,
1769+ struct intel_encoder_context *encoder_context,
1770+ struct gen9_vp9_me_curbe_param *param);
1771+
1772+ void (*pfn_set_curbe_scaling)(
1773+ VADriverContextP ctx,
1774+ struct encode_state *encode_state,
1775+ struct i965_gpe_context *gpe_context,
1776+ struct intel_encoder_context *encoder_context,
1777+ struct gen9_vp9_scaling_curbe_param *param);
1778+
1779+ void (*pfn_set_curbe_dys)(
1780+ VADriverContextP ctx,
1781+ struct encode_state *encode_state,
1782+ struct i965_gpe_context *gpe_context,
1783+ struct intel_encoder_context *encoder_context,
1784+ struct gen9_vp9_dys_curbe_param *param);
1785+
1786+ void (*pfn_set_curbe_brc)(
1787+ VADriverContextP ctx,
1788+ struct encode_state *encode_state,
1789+ struct i965_gpe_context *gpe_context,
1790+ struct intel_encoder_context *encoder_context,
1791+ struct gen9_vp9_brc_curbe_param *param);
1792+
1793+ void (*pfn_send_me_surface)(
1794+ VADriverContextP ctx,
1795+ struct encode_state *encode_state,
1796+ struct i965_gpe_context *gpe_context,
1797+ struct intel_encoder_context *encoder_context,
1798+ struct gen9_vp9_me_surface_param *param);
1799+
1800+ void (*pfn_send_mbenc_surface)(
1801+ VADriverContextP ctx,
1802+ struct encode_state *encode_state,
1803+ struct i965_gpe_context *gpe_context,
1804+ struct intel_encoder_context *encoder_context,
1805+ struct gen9_vp9_mbenc_surface_param *mbenc_param);
1806+
1807+ void (*pfn_send_scaling_surface)(
1808+ VADriverContextP ctx,
1809+ struct encode_state *encode_state,
1810+ struct i965_gpe_context *gpe_context,
1811+ struct intel_encoder_context *encoder_context,
1812+ struct gen9_vp9_scaling_surface_param *param);
1813+
1814+ void (*pfn_send_dys_surface)(
1815+ VADriverContextP ctx,
1816+ struct encode_state *encode_state,
1817+ struct i965_gpe_context *gpe_context,
1818+ struct intel_encoder_context *encoder_context,
1819+ struct gen9_vp9_dys_surface_param *param);
1820+
1821+ struct {
1822+ dri_bo *bo;
1823+ } reconstructed_object;
1824+
1825+ struct {
1826+ dri_bo *bo;
1827+ } uncompressed_picture_source;
1828+
1829+ struct {
1830+ dri_bo *bo;
1831+ int offset;
1832+ int end_offset;
1833+ int status_offset;
1834+ } indirect_pak_bse_object;
1835+
1836+ struct {
1837+ dri_bo *bo;
1838+ } reference_surfaces[8];
1839+};
1840+
1841+enum INTEL_ENC_VP9_TU_MODE
1842+{
1843+ INTEL_ENC_VP9_TU_QUALITY = 0,
1844+ INTEL_ENC_VP9_TU_NORMAL,
1845+ INTEL_ENC_VP9_TU_PERFORMANCE
1846+};
1847+
1848+#define VP9_LAST_REF 0x01
1849+#define VP9_GOLDEN_REF 0x02
1850+#define VP9_ALT_REF 0x04
1851+
1852+/* the vp9_encode_status_buffer is the shadow
1853+ * of vp9_encode_status_buffer_internal.
1854+ */
1855+struct vp9_encode_status_buffer_internal
1856+{
1857+ uint32_t bs_byte_count_offset;
1858+ uint32_t reserved[15];
1859+
1860+ /* the above is shared with the gen9_encode_status_buffer */
1861+ uint32_t image_status_mask_offset;
1862+ uint32_t image_status_ctrl_offset;
1863+
1864+ uint32_t vp9_image_mask_reg_offset;
1865+ uint32_t vp9_image_ctrl_reg_offset;
1866+ uint32_t vp9_bs_frame_reg_offset;
1867+ dri_bo *bo;
1868+
1869+ uint32_t media_index_offset;
1870+};
1871+
1872+
1873+struct gen9_vp9_state {
1874+ unsigned int brc_inited;
1875+ unsigned int brc_reset;
1876+ unsigned int brc_enabled;
1877+ unsigned int use_hw_scoreboard;
1878+ unsigned int use_hw_non_stalling_scoreborad;
1879+ unsigned int hme_supported;
1880+ unsigned int b16xme_supported;
1881+ unsigned int hme_enabled;
1882+ unsigned int b16xme_enabled;
1883+
1884+ unsigned int frame_width;
1885+ unsigned int frame_height;
1886+ unsigned int frame_width_in_mb;
1887+ unsigned int frame_height_in_mb;
1888+ unsigned int frame_width_4x;
1889+ unsigned int frame_height_4x;
1890+ unsigned int frame_width_16x;
1891+ unsigned int frame_height_16x;
1892+ unsigned int downscaled_width_4x_in_mb;
1893+ unsigned int downscaled_height_4x_in_mb;
1894+ unsigned int downscaled_width_16x_in_mb;
1895+ unsigned int downscaled_height_16x_in_mb;
1896+
1897+ unsigned int res_width;
1898+ unsigned int res_height;
1899+ int brc_allocated;
1900+ VASurfaceID curr_frame;
1901+ VASurfaceID last_ref_pic;
1902+ VASurfaceID alt_ref_pic;
1903+ VASurfaceID golden_ref_pic;
1904+
1905+ struct object_surface *input_surface_obj;
1906+ struct object_surface *last_ref_obj;
1907+ struct object_surface *golden_ref_obj;
1908+ struct object_surface *alt_ref_obj;
1909+
1910+ VAEncSequenceParameterBufferVP9 *seq_param;
1911+ VAEncPictureParameterBufferVP9 *pic_param;
1912+ VAEncMiscParameterTypeVP9PerSegmantParam *segment_param;
1913+ double brc_init_current_target_buf_full_in_bits;
1914+ double brc_init_reset_input_bits_per_frame;
1915+ uint32_t brc_init_reset_buf_size_in_bits;
1916+ unsigned int gop_size;
1917+ unsigned int target_bit_rate;
1918+ unsigned int max_bit_rate;
1919+ unsigned int min_bit_rate;
1920+ unsigned long init_vbv_buffer_fullness_in_bit;
1921+ unsigned long vbv_buffer_size_in_bit;
1922+ int frame_number;
1923+ uint32_t frame_rate;
1924+ uint8_t ref_frame_flag;
1925+ uint8_t dys_ref_frame_flag;
1926+ uint8_t picture_coding_type;
1927+ unsigned int adaptive_transform_decision_enabled;
1928+ int curr_mode_decision_index;
1929+ int target_usage;
1930+ unsigned int mb_data_offset;
1931+ int curr_pak_pass;
1932+ unsigned int brc_flag_check;
1933+ bool first_frame;
1934+ bool dys_enabled;
1935+ bool dys_in_use;
1936+ bool mbenc_curbe_set_in_brc_update;
1937+ bool multi_ref_qp_check;
1938+ bool brc_distortion_buffer_supported;
1939+ bool brc_constant_buffer_supported;
1940+ bool mbenc_keyframe_dist_enabled;
1941+ unsigned int curr_mv_temporal_index;
1942+ int tx_mode;
1943+ int num_pak_passes;
1944+ char *alias_insert_data;
1945+ int header_length;
1946+ vp9_header_bitoffset frame_header;
1947+
1948+ struct vp9_encode_status_buffer_internal status_buffer;
1949+
1950+ /* the frame context related with VP9 encoding */
1951+ FRAME_CONTEXT vp9_frame_ctx[FRAME_CONTEXTS];
1952+ FRAME_CONTEXT vp9_current_fc;
1953+ int frame_ctx_idx;
1954+
1955+ vp9_frame_status vp9_last_frame;
1956+};
1957+
1958+struct vp9_compressed_element {
1959+ uint8_t a_valid : 1;
1960+ uint8_t a_probdiff_select: 1;
1961+ uint8_t a_prob_select : 1;
1962+ uint8_t a_bin : 1;
1963+ uint8_t b_valid : 1;
1964+ uint8_t b_probdiff_select: 1;
1965+ uint8_t b_prob_select : 1;
1966+ uint8_t b_bin : 1;
1967+};
1968+
1969+#define VP9_BRC_HISTORY_BUFFER_SIZE 768
1970+#define VP9_BRC_CONSTANTSURFACE_SIZE 17792
1971+#define VP9_BRC_BITSTREAM_SIZE_BUFFER_SIZE 16
1972+#define VP9_BRC_MMDK_PAK_BUFFER_SIZE 64
1973+#define VP9_SEGMENT_STATE_BUFFER_SIZE 256
1974+#define VP9_HFW_BRC_DATA_BUFFER_SIZE 32
1975+
1976+#endif /* GEN9_VP9_ENCODER_H */
--- /dev/null
+++ b/src/gen9_vp9_encoder_kernels.c
@@ -0,0 +1,4955 @@
1+/*
2+ * * Copyright (c) 2016, Intel Corporation
3+ *
4+ * All rights reserved.
5+ * Redistribution. Redistribution and use in binary form, without modification, are
6+ * permitted provided that the following conditions are met:
7+ * Redistributions must reproduce the above copyright notice and the following
8+ * disclaimer in the documentation and/or other materials provided with the
9+ * distribution.
10+ * Neither the name of Intel Corporation nor the names of its suppliers may be used
11+ * to endorse or promote products derived from this software without specific prior
12+ * written permission.
13+ * No reverse engineering, decompilation, or disassembly of this software is permitted.
14+ * Limited patent license. Intel Corporation grants a world-wide, royalty-free,
15+ * nonexclusive license under patents it now or hereafter owns or controls to make, have made,
16+ * use, import, offer to sell and sell (.Utilize.) this software, but solely to the extent that any
17+ * such patent is necessary to Utilize the software alone. The patent license shall not apply
18+ * to any combinations which include this software. No hardware per se is licensed here under.
19+
20+ * DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
21+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
22+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
25+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
30+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
32+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33+ */
34+#include "gen9_vp9_encoder_kernels.h"
35+
36+
37+const unsigned int media_vp9_kernels[AllVP9ENC_SZ] = {
38+0x0000000b,0x00000048,0x00001c48,0x00002b08,0x00009c88,0x0000b5c8,0x00011c88,0x00017d08,
39+0x000183c8,0x00018ac8,0x0001a748,0x0001bac8,0x00

Part of diff was cut off due to size limit. Use your local client to view the full diff.