xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/Texture/GmmTexture.h (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2017 Intel Corporation
3*35ffd701SAndroid Build Coastguard Worker 
4*35ffd701SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
5*35ffd701SAndroid Build Coastguard Worker copy of this software and associated documentation files(the "Software"),
6*35ffd701SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation
7*35ffd701SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*35ffd701SAndroid Build Coastguard Worker and / or sell copies of the Software, and to permit persons to whom the
9*35ffd701SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions:
10*35ffd701SAndroid Build Coastguard Worker 
11*35ffd701SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included
12*35ffd701SAndroid Build Coastguard Worker in all copies or substantial portions of the Software.
13*35ffd701SAndroid Build Coastguard Worker 
14*35ffd701SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*35ffd701SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*35ffd701SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*35ffd701SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*35ffd701SAndroid Build Coastguard Worker OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*35ffd701SAndroid Build Coastguard Worker ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*35ffd701SAndroid Build Coastguard Worker OTHER DEALINGS IN THE SOFTWARE.
21*35ffd701SAndroid Build Coastguard Worker ============================================================================*/
22*35ffd701SAndroid Build Coastguard Worker #pragma once
23*35ffd701SAndroid Build Coastguard Worker 
24*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmInternal.h"             // UMD or KMD Windows header
25*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmTextureExt.h"
26*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmUtil.h"
27*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmInfoExt.h"
28*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmInfo.h"
29*35ffd701SAndroid Build Coastguard Worker #include "External/Common/GmmProto.h"
30*35ffd701SAndroid Build Coastguard Worker #ifdef __cplusplus
31*35ffd701SAndroid Build Coastguard Worker #include "Internal/Common/Texture/GmmTextureCalc.h"
32*35ffd701SAndroid Build Coastguard Worker //---------------------------------------------------------------------------
33*35ffd701SAndroid Build Coastguard Worker // ExpandWidth/Height Wrappers
34*35ffd701SAndroid Build Coastguard Worker //
35*35ffd701SAndroid Build Coastguard Worker // Gen7+ MSAA (non-Depth/Stencil) render targets use array expansion instead of
36*35ffd701SAndroid Build Coastguard Worker // Width/Height expansion--So they pass NumSamples=1 to __GmmExpandXxx functions.
37*35ffd701SAndroid Build Coastguard Worker //
38*35ffd701SAndroid Build Coastguard Worker //---------------------------------------------------------------------------
39*35ffd701SAndroid Build Coastguard Worker #define __GMM_EXPAND_Xxx(ptr, Xxx, Dimension, UnitAlignment, pTexInfo)                \
40*35ffd701SAndroid Build Coastguard Worker      (ptr)->Expand##Xxx(                                                        \
41*35ffd701SAndroid Build Coastguard Worker         (Dimension), (UnitAlignment),                                                 \
42*35ffd701SAndroid Build Coastguard Worker         ((pTexInfo)->Flags.Gpu.Depth || (pTexInfo)->Flags.Gpu.SeparateStencil) ?      \
43*35ffd701SAndroid Build Coastguard Worker             (pTexInfo)->MSAA.NumSamples : 1)
44*35ffd701SAndroid Build Coastguard Worker 
45*35ffd701SAndroid Build Coastguard Worker #define __GMM_EXPAND_WIDTH(ptr, __Width, UnitAlignment, pTexInfo) \
46*35ffd701SAndroid Build Coastguard Worker     __GMM_EXPAND_Xxx(ptr, Width, __Width, UnitAlignment, pTexInfo)
47*35ffd701SAndroid Build Coastguard Worker 
48*35ffd701SAndroid Build Coastguard Worker #define __GMM_EXPAND_HEIGHT(ptr, __Height, UnitAlignment, pTexInfo) \
49*35ffd701SAndroid Build Coastguard Worker     __GMM_EXPAND_Xxx(ptr, Height, __Height, UnitAlignment, pTexInfo)
50*35ffd701SAndroid Build Coastguard Worker 
51*35ffd701SAndroid Build Coastguard Worker //=============================================================================
52*35ffd701SAndroid Build Coastguard Worker //Function:
53*35ffd701SAndroid Build Coastguard Worker //    __GmmTexFillHAlignVAlign
54*35ffd701SAndroid Build Coastguard Worker //
55*35ffd701SAndroid Build Coastguard Worker //Description:
56*35ffd701SAndroid Build Coastguard Worker //     Stores in pTexInfo the appropriate unit aligment sizes.
57*35ffd701SAndroid Build Coastguard Worker //
58*35ffd701SAndroid Build Coastguard Worker //-----------------------------------------------------------------------------
59*35ffd701SAndroid Build Coastguard Worker // Gmmlib 2.0 TODO[Low] Move to Class and Inline function handling.
__GmmTexFillHAlignVAlign(GMM_TEXTURE_INFO * pTexInfo,GMM_LIB_CONTEXT * pGmmLibContext)60*35ffd701SAndroid Build Coastguard Worker GMM_INLINE GMM_STATUS __GmmTexFillHAlignVAlign(GMM_TEXTURE_INFO *pTexInfo,GMM_LIB_CONTEXT* pGmmLibContext)
61*35ffd701SAndroid Build Coastguard Worker {
62*35ffd701SAndroid Build Coastguard Worker     uint32_t                   UnitAlignWidth = 0;
63*35ffd701SAndroid Build Coastguard Worker     uint32_t                   UnitAlignHeight = 0;
64*35ffd701SAndroid Build Coastguard Worker     uint32_t                   UnitAlignDepth = 0;
65*35ffd701SAndroid Build Coastguard Worker     const GMM_PLATFORM_INFO *pPlatform;
66*35ffd701SAndroid Build Coastguard Worker     GMM_TEXTURE_CALC        *pTextureCalc;
67*35ffd701SAndroid Build Coastguard Worker 
68*35ffd701SAndroid Build Coastguard Worker     GMM_DPF_ENTER;
69*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERTPTR(pGmmLibContext,GMM_ERROR);
70*35ffd701SAndroid Build Coastguard Worker 
71*35ffd701SAndroid Build Coastguard Worker     __GMM_ASSERTPTR(pTexInfo, GMM_ERROR);
72*35ffd701SAndroid Build Coastguard Worker 
73*35ffd701SAndroid Build Coastguard Worker #define SET_ALIGN_FACTOR(Xxx, Bytes)                            \
74*35ffd701SAndroid Build Coastguard Worker     if(!pGmmLibContext->GetSkuTable().FtrTileY)              \
75*35ffd701SAndroid Build Coastguard Worker     {                                                           \
76*35ffd701SAndroid Build Coastguard Worker         UnitAlign##Xxx =                                        \
77*35ffd701SAndroid Build Coastguard Worker             (pTexInfo->BitsPerPixel == 128) ? Bytes/16 :        \
78*35ffd701SAndroid Build Coastguard Worker             (pTexInfo->BitsPerPixel ==  64) ? Bytes/8 :         \
79*35ffd701SAndroid Build Coastguard Worker             (pTexInfo->BitsPerPixel ==  32) ? Bytes/4 :         \
80*35ffd701SAndroid Build Coastguard Worker             (pTexInfo->BitsPerPixel ==  16) ? Bytes/2 : Bytes ; \
81*35ffd701SAndroid Build Coastguard Worker                                                                 \
82*35ffd701SAndroid Build Coastguard Worker         if(!pTexInfo->Flags.Info.Linear &&  \
83*35ffd701SAndroid Build Coastguard Worker            (pTexInfo->BitsPerPixel == 24 || pTexInfo->BitsPerPixel == 48 || pTexInfo->BitsPerPixel == 96)) \
84*35ffd701SAndroid Build Coastguard Worker         {                                                       \
85*35ffd701SAndroid Build Coastguard Worker             UnitAlign##Xxx = 16;                                \
86*35ffd701SAndroid Build Coastguard Worker         }                                                       \
87*35ffd701SAndroid Build Coastguard Worker         else if (pTexInfo->Flags.Info.Linear && \
88*35ffd701SAndroid Build Coastguard Worker             (pTexInfo->BitsPerPixel == 24 || pTexInfo->BitsPerPixel == 48 || pTexInfo->BitsPerPixel == 96))\
89*35ffd701SAndroid Build Coastguard Worker         {                                                       \
90*35ffd701SAndroid Build Coastguard Worker             UnitAlign##Xxx = 128;                               \
91*35ffd701SAndroid Build Coastguard Worker         }                                                       \
92*35ffd701SAndroid Build Coastguard Worker     }
93*35ffd701SAndroid Build Coastguard Worker 
94*35ffd701SAndroid Build Coastguard Worker 
95*35ffd701SAndroid Build Coastguard Worker     if (!((pTexInfo->Format > GMM_FORMAT_INVALID) &&
96*35ffd701SAndroid Build Coastguard Worker         (pTexInfo->Format < GMM_RESOURCE_FORMATS)))
97*35ffd701SAndroid Build Coastguard Worker     {
98*35ffd701SAndroid Build Coastguard Worker         GMM_DPF_CRITICAL("Invalid Resource Format");
99*35ffd701SAndroid Build Coastguard Worker         return GMM_ERROR;
100*35ffd701SAndroid Build Coastguard Worker     }
101*35ffd701SAndroid Build Coastguard Worker 
102*35ffd701SAndroid Build Coastguard Worker     if( !pTexInfo->Alignment.HAlign &&
103*35ffd701SAndroid Build Coastguard Worker         !pTexInfo->Alignment.VAlign)
104*35ffd701SAndroid Build Coastguard Worker     {
105*35ffd701SAndroid Build Coastguard Worker         pPlatform = GMM_OVERRIDE_PLATFORM_INFO(pTexInfo,pGmmLibContext);
106*35ffd701SAndroid Build Coastguard Worker         pTextureCalc = GMM_OVERRIDE_TEXTURE_CALC(pTexInfo,pGmmLibContext);
107*35ffd701SAndroid Build Coastguard Worker 
108*35ffd701SAndroid Build Coastguard Worker         /// SKL TiledYf/Ys Surfaces //////////////////////////////////////////
109*35ffd701SAndroid Build Coastguard Worker         if( ((GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN9_CORE) &&
110*35ffd701SAndroid Build Coastguard Worker              (pTexInfo->Flags.Info.TiledYf || GMM_IS_64KB_TILE(pTexInfo->Flags))))
111*35ffd701SAndroid Build Coastguard Worker         {
112*35ffd701SAndroid Build Coastguard Worker             #define SET_ALIGN_INFO(Xxx, A1, A2, A3, A4, A5)     \
113*35ffd701SAndroid Build Coastguard Worker                UnitAlign##Xxx =                                 \
114*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->BitsPerPixel == 128) ? A1 :      \
115*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->BitsPerPixel ==  64) ? A2 :      \
116*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->BitsPerPixel ==  32) ? A3 :      \
117*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->BitsPerPixel ==  16) ? A4 : A5;  \
118*35ffd701SAndroid Build Coastguard Worker 
119*35ffd701SAndroid Build Coastguard Worker             if(pTexInfo->Type == RESOURCE_1D)
120*35ffd701SAndroid Build Coastguard Worker             {
121*35ffd701SAndroid Build Coastguard Worker                 if(pTexInfo->Flags.Info.TiledYf)
122*35ffd701SAndroid Build Coastguard Worker                 {
123*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Width, 256, 512, 1024, 2048, 4096);
124*35ffd701SAndroid Build Coastguard Worker                 }
125*35ffd701SAndroid Build Coastguard Worker                 else // if(pTexInfo->Flags.Info.TiledYs)
126*35ffd701SAndroid Build Coastguard Worker                 {
127*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Width, 4096, 8192, 16384, 32768, 65536);
128*35ffd701SAndroid Build Coastguard Worker                 }
129*35ffd701SAndroid Build Coastguard Worker             }
130*35ffd701SAndroid Build Coastguard Worker             else if((pTexInfo->Type == RESOURCE_2D) || (pTexInfo->Type == RESOURCE_CUBE) ||
131*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->Type == RESOURCE_PRIMARY))
132*35ffd701SAndroid Build Coastguard Worker             {
133*35ffd701SAndroid Build Coastguard Worker                 if(pTexInfo->Flags.Info.TiledYf)
134*35ffd701SAndroid Build Coastguard Worker                 {
135*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Width,  16, 32, 32, 64, 64);
136*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Height, 16, 16, 32, 32, 64);
137*35ffd701SAndroid Build Coastguard Worker                 }
138*35ffd701SAndroid Build Coastguard Worker                 else // if(pTexInfo->Flags.Info.TiledYs)
139*35ffd701SAndroid Build Coastguard Worker                 {
140*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Width, 64, 128, 128, 256, 256);
141*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Height, 64, 64, 128, 128, 256);
142*35ffd701SAndroid Build Coastguard Worker                 }
143*35ffd701SAndroid Build Coastguard Worker 
144*35ffd701SAndroid Build Coastguard Worker                 // Only color buffer MSAA
145*35ffd701SAndroid Build Coastguard Worker                 if(pTexInfo->MSAA.NumSamples > 1 &&
146*35ffd701SAndroid Build Coastguard Worker                    !pTexInfo->Flags.Gpu.Depth &&
147*35ffd701SAndroid Build Coastguard Worker                    !pTexInfo->Flags.Gpu.SeparateStencil)
148*35ffd701SAndroid Build Coastguard Worker                 {
149*35ffd701SAndroid Build Coastguard Worker                     if(pGmmLibContext->GetSkuTable().FtrTileY)
150*35ffd701SAndroid Build Coastguard Worker                     {
151*35ffd701SAndroid Build Coastguard Worker                         switch(pTexInfo->MSAA.NumSamples)
152*35ffd701SAndroid Build Coastguard Worker                         {
153*35ffd701SAndroid Build Coastguard Worker                         case 16:
154*35ffd701SAndroid Build Coastguard Worker                             UnitAlignWidth /= 4;
155*35ffd701SAndroid Build Coastguard Worker                             UnitAlignHeight /= 4;
156*35ffd701SAndroid Build Coastguard Worker                             break;
157*35ffd701SAndroid Build Coastguard Worker                         case 8:
158*35ffd701SAndroid Build Coastguard Worker                             UnitAlignWidth /= 4;
159*35ffd701SAndroid Build Coastguard Worker                             UnitAlignHeight /= 2;
160*35ffd701SAndroid Build Coastguard Worker                             break;
161*35ffd701SAndroid Build Coastguard Worker                         case 4:
162*35ffd701SAndroid Build Coastguard Worker                             UnitAlignWidth /= 2;
163*35ffd701SAndroid Build Coastguard Worker                             UnitAlignHeight /= 2;
164*35ffd701SAndroid Build Coastguard Worker                             break;
165*35ffd701SAndroid Build Coastguard Worker                         case 2:
166*35ffd701SAndroid Build Coastguard Worker                             UnitAlignWidth /= 2;
167*35ffd701SAndroid Build Coastguard Worker                             break;
168*35ffd701SAndroid Build Coastguard Worker                         default:
169*35ffd701SAndroid Build Coastguard Worker                             __GMM_ASSERT(0);
170*35ffd701SAndroid Build Coastguard Worker                         }
171*35ffd701SAndroid Build Coastguard Worker                     }
172*35ffd701SAndroid Build Coastguard Worker                     else
173*35ffd701SAndroid Build Coastguard Worker                     {
174*35ffd701SAndroid Build Coastguard Worker                         if (pGmmLibContext->GetSkuTable().FtrXe2PlusTiling)
175*35ffd701SAndroid Build Coastguard Worker                         {
176*35ffd701SAndroid Build Coastguard Worker                             switch (pTexInfo->MSAA.NumSamples)
177*35ffd701SAndroid Build Coastguard Worker                             {
178*35ffd701SAndroid Build Coastguard Worker                             case 16:
179*35ffd701SAndroid Build Coastguard Worker                                 if (pTexInfo->BitsPerPixel == 64)
180*35ffd701SAndroid Build Coastguard Worker                                 {
181*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignWidth /= 8;
182*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignHeight /= 2;
183*35ffd701SAndroid Build Coastguard Worker                                 }
184*35ffd701SAndroid Build Coastguard Worker                                 else
185*35ffd701SAndroid Build Coastguard Worker                                 {
186*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignWidth /= 4;
187*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignHeight /= 4;
188*35ffd701SAndroid Build Coastguard Worker                                 }
189*35ffd701SAndroid Build Coastguard Worker                                 break;
190*35ffd701SAndroid Build Coastguard Worker                             case 8:
191*35ffd701SAndroid Build Coastguard Worker                                 if ((pTexInfo->BitsPerPixel == 8) || (pTexInfo->BitsPerPixel == 32))
192*35ffd701SAndroid Build Coastguard Worker                                 {
193*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignWidth /= 2;
194*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignHeight /= 4;
195*35ffd701SAndroid Build Coastguard Worker                                 }
196*35ffd701SAndroid Build Coastguard Worker                                 else
197*35ffd701SAndroid Build Coastguard Worker                                 {
198*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignWidth /= 4;
199*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignHeight /= 2;
200*35ffd701SAndroid Build Coastguard Worker                                 }
201*35ffd701SAndroid Build Coastguard Worker                                 break;
202*35ffd701SAndroid Build Coastguard Worker                             case 4:
203*35ffd701SAndroid Build Coastguard Worker                                 UnitAlignWidth /= 2;
204*35ffd701SAndroid Build Coastguard Worker                                 UnitAlignHeight /= 2;
205*35ffd701SAndroid Build Coastguard Worker                                 break;
206*35ffd701SAndroid Build Coastguard Worker                             case 2:
207*35ffd701SAndroid Build Coastguard Worker                                 if (pTexInfo->BitsPerPixel == 128)
208*35ffd701SAndroid Build Coastguard Worker                                 {
209*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignHeight /= 2;
210*35ffd701SAndroid Build Coastguard Worker                                 }
211*35ffd701SAndroid Build Coastguard Worker                                 else
212*35ffd701SAndroid Build Coastguard Worker                                 {
213*35ffd701SAndroid Build Coastguard Worker                                     UnitAlignWidth /= 2;
214*35ffd701SAndroid Build Coastguard Worker                                 }
215*35ffd701SAndroid Build Coastguard Worker                                 break;
216*35ffd701SAndroid Build Coastguard Worker                             default:
217*35ffd701SAndroid Build Coastguard Worker                                 __GMM_ASSERT(0);
218*35ffd701SAndroid Build Coastguard Worker                             }
219*35ffd701SAndroid Build Coastguard Worker                         }
220*35ffd701SAndroid Build Coastguard Worker                         else
221*35ffd701SAndroid Build Coastguard Worker                         {
222*35ffd701SAndroid Build Coastguard Worker                             switch (pTexInfo->MSAA.NumSamples)
223*35ffd701SAndroid Build Coastguard Worker                             {
224*35ffd701SAndroid Build Coastguard Worker                             case 4:
225*35ffd701SAndroid Build Coastguard Worker                             case 8:
226*35ffd701SAndroid Build Coastguard Worker                             case 16:
227*35ffd701SAndroid Build Coastguard Worker                                 UnitAlignWidth /= 2;
228*35ffd701SAndroid Build Coastguard Worker                                 UnitAlignHeight /= 2;
229*35ffd701SAndroid Build Coastguard Worker                                 break;
230*35ffd701SAndroid Build Coastguard Worker                             case 2:
231*35ffd701SAndroid Build Coastguard Worker                                 UnitAlignWidth /= 2;
232*35ffd701SAndroid Build Coastguard Worker                                 break;
233*35ffd701SAndroid Build Coastguard Worker                             default:
234*35ffd701SAndroid Build Coastguard Worker                                 __GMM_ASSERT(0);
235*35ffd701SAndroid Build Coastguard Worker                             }
236*35ffd701SAndroid Build Coastguard Worker                         }
237*35ffd701SAndroid Build Coastguard Worker                     }
238*35ffd701SAndroid Build Coastguard Worker                 }
239*35ffd701SAndroid Build Coastguard Worker             }
240*35ffd701SAndroid Build Coastguard Worker             else if(pTexInfo->Type == RESOURCE_3D)
241*35ffd701SAndroid Build Coastguard Worker             {
242*35ffd701SAndroid Build Coastguard Worker                 if(pTexInfo->Flags.Info.TiledYf)
243*35ffd701SAndroid Build Coastguard Worker                 {
244*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Width,  4, 8,  8,  8, 16);
245*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Height, 8, 8, 16, 16, 16);
246*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Depth,  8, 8,  8, 16, 16);
247*35ffd701SAndroid Build Coastguard Worker                 }
248*35ffd701SAndroid Build Coastguard Worker                 else // if(pTexInfo->Flags.Info.TiledYs)
249*35ffd701SAndroid Build Coastguard Worker                 {
250*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Width,  16, 32, 32, 32, 64);
251*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Height, 16, 16, 32, 32, 32);
252*35ffd701SAndroid Build Coastguard Worker                     SET_ALIGN_INFO(Depth,  16, 16, 16, 32, 32);
253*35ffd701SAndroid Build Coastguard Worker                 }
254*35ffd701SAndroid Build Coastguard Worker             }
255*35ffd701SAndroid Build Coastguard Worker 
256*35ffd701SAndroid Build Coastguard Worker             #undef SET_ALIGN_INFO
257*35ffd701SAndroid Build Coastguard Worker             if(GmmIsCompressed(pGmmLibContext, pTexInfo->Format))
258*35ffd701SAndroid Build Coastguard Worker             {
259*35ffd701SAndroid Build Coastguard Worker                 uint32_t   ElementWidth, ElementHeight, ElementDepth;
260*35ffd701SAndroid Build Coastguard Worker                 pTextureCalc->GetCompressionBlockDimensions(pTexInfo->Format, &ElementWidth, &ElementHeight, &ElementDepth);
261*35ffd701SAndroid Build Coastguard Worker 
262*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth *= ElementWidth;
263*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight *= ElementHeight;
264*35ffd701SAndroid Build Coastguard Worker                 UnitAlignDepth *= ElementDepth;
265*35ffd701SAndroid Build Coastguard Worker             }
266*35ffd701SAndroid Build Coastguard Worker         }
267*35ffd701SAndroid Build Coastguard Worker         /// SKL 1D Surfaces ///////////////////////////////////////////////
268*35ffd701SAndroid Build Coastguard Worker         else if((GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN9_CORE) &&
269*35ffd701SAndroid Build Coastguard Worker                 (pTexInfo->Type == RESOURCE_1D))
270*35ffd701SAndroid Build Coastguard Worker         {
271*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth = 64;
272*35ffd701SAndroid Build Coastguard Worker 
273*35ffd701SAndroid Build Coastguard Worker             // Tile4/64
274*35ffd701SAndroid Build Coastguard Worker             SET_ALIGN_FACTOR(Width, 128);
275*35ffd701SAndroid Build Coastguard Worker         }
276*35ffd701SAndroid Build Coastguard Worker         /// CCS ///////////////////////////////////////////////////////////
277*35ffd701SAndroid Build Coastguard Worker         else if (pTexInfo->Flags.Gpu.CCS &&
278*35ffd701SAndroid Build Coastguard Worker             (pTexInfo->Flags.Gpu.__NonMsaaTileYCcs || pTexInfo->Flags.Gpu.__NonMsaaTileXCcs))
279*35ffd701SAndroid Build Coastguard Worker         {
280*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth = pPlatform->TexAlign.CCS.Align.Width;
281*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = pPlatform->TexAlign.CCS.Align.Height;
282*35ffd701SAndroid Build Coastguard Worker 
283*35ffd701SAndroid Build Coastguard Worker             ALIGNMENT UnitAlign = { UnitAlignWidth , UnitAlignHeight, UnitAlignDepth };
284*35ffd701SAndroid Build Coastguard Worker             pGmmLibContext->GetPlatformInfoObj()->ApplyExtendedTexAlign(pTexInfo->CCSModeAlign, UnitAlign);
285*35ffd701SAndroid Build Coastguard Worker 
286*35ffd701SAndroid Build Coastguard Worker             if (UnitAlign.Width != UnitAlignWidth ||
287*35ffd701SAndroid Build Coastguard Worker                 UnitAlign.Height != UnitAlignHeight ||
288*35ffd701SAndroid Build Coastguard Worker                 UnitAlign.Depth != UnitAlignDepth)
289*35ffd701SAndroid Build Coastguard Worker             {
290*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth = UnitAlign.Width;
291*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight = UnitAlign.Height;
292*35ffd701SAndroid Build Coastguard Worker                 UnitAlignDepth = UnitAlign.Depth;
293*35ffd701SAndroid Build Coastguard Worker             }
294*35ffd701SAndroid Build Coastguard Worker         }
295*35ffd701SAndroid Build Coastguard Worker         else if (GmmIsYUVPacked(pTexInfo->Format)) /////////////////////////
296*35ffd701SAndroid Build Coastguard Worker         {
297*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth = pPlatform->TexAlign.YUV422.Width;
298*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = pPlatform->TexAlign.YUV422.Height;
299*35ffd701SAndroid Build Coastguard Worker 
300*35ffd701SAndroid Build Coastguard Worker             // For packed 8/16-bit formats alignment factor of 4 will give us < 16B so expand to 32B
301*35ffd701SAndroid Build Coastguard Worker 
302*35ffd701SAndroid Build Coastguard Worker 	    if (pTexInfo->Flags.Info.Linear)
303*35ffd701SAndroid Build Coastguard Worker             {
304*35ffd701SAndroid Build Coastguard Worker                 SET_ALIGN_FACTOR(Width, 128);
305*35ffd701SAndroid Build Coastguard Worker             }
306*35ffd701SAndroid Build Coastguard Worker             else
307*35ffd701SAndroid Build Coastguard Worker             {
308*35ffd701SAndroid Build Coastguard Worker                 SET_ALIGN_FACTOR(Width, 32);
309*35ffd701SAndroid Build Coastguard Worker             }
310*35ffd701SAndroid Build Coastguard Worker         }
311*35ffd701SAndroid Build Coastguard Worker         else if(GmmIsCompressed(pGmmLibContext, pTexInfo->Format)) /////////////////////////////
312*35ffd701SAndroid Build Coastguard Worker         {
313*35ffd701SAndroid Build Coastguard Worker             uint32_t   ElementWidth, ElementHeight, ElementDepth;
314*35ffd701SAndroid Build Coastguard Worker 
315*35ffd701SAndroid Build Coastguard Worker             pTextureCalc->GetCompressionBlockDimensions(pTexInfo->Format, &ElementWidth, &ElementHeight, &ElementDepth);
316*35ffd701SAndroid Build Coastguard Worker 
317*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth  = ElementWidth * pPlatform->TexAlign.Compressed.Width;
318*35ffd701SAndroid Build Coastguard Worker 
319*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = ElementHeight * pPlatform->TexAlign.Compressed.Height;
320*35ffd701SAndroid Build Coastguard Worker 
321*35ffd701SAndroid Build Coastguard Worker             UnitAlignDepth =  (pTexInfo->Type == RESOURCE_3D) ? ElementDepth * pPlatform->TexAlign.Compressed.Depth : pPlatform->TexAlign.Compressed.Depth;
322*35ffd701SAndroid Build Coastguard Worker 
323*35ffd701SAndroid Build Coastguard Worker         }
324*35ffd701SAndroid Build Coastguard Worker         /// Depth Buffer //////////////////////////////////////////////////
325*35ffd701SAndroid Build Coastguard Worker         else if(pTexInfo->Flags.Gpu.HiZ)
326*35ffd701SAndroid Build Coastguard Worker         {
327*35ffd701SAndroid Build Coastguard Worker             if( (GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN7_CORE) &&
328*35ffd701SAndroid Build Coastguard Worker                 (pTexInfo->BitsPerPixel == 16))
329*35ffd701SAndroid Build Coastguard Worker             {
330*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth = 8; // Gen7 Special Case: HALIGN_8 for 16bpp Depth Buffers
331*35ffd701SAndroid Build Coastguard Worker             }
332*35ffd701SAndroid Build Coastguard Worker             else
333*35ffd701SAndroid Build Coastguard Worker             {
334*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth = pPlatform->TexAlign.Depth.Width;
335*35ffd701SAndroid Build Coastguard Worker             }
336*35ffd701SAndroid Build Coastguard Worker 
337*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = pPlatform->TexAlign.Depth.Height;
338*35ffd701SAndroid Build Coastguard Worker         }
339*35ffd701SAndroid Build Coastguard Worker         else if (pTexInfo->Flags.Gpu.Depth)
340*35ffd701SAndroid Build Coastguard Worker         {
341*35ffd701SAndroid Build Coastguard Worker             if (pTexInfo->BitsPerPixel == 16)
342*35ffd701SAndroid Build Coastguard Worker             {
343*35ffd701SAndroid Build Coastguard Worker                 if (pTexInfo->MSAA.NumSamples == 0x2 || pTexInfo->MSAA.NumSamples == 0x8)
344*35ffd701SAndroid Build Coastguard Worker                 {
345*35ffd701SAndroid Build Coastguard Worker                     UnitAlignWidth = pPlatform->TexAlign.Depth_D16_UNORM_2x_8x.Width;
346*35ffd701SAndroid Build Coastguard Worker                     UnitAlignHeight = pPlatform->TexAlign.Depth_D16_UNORM_2x_8x.Height;
347*35ffd701SAndroid Build Coastguard Worker                 }
348*35ffd701SAndroid Build Coastguard Worker                 else
349*35ffd701SAndroid Build Coastguard Worker                 {
350*35ffd701SAndroid Build Coastguard Worker                     UnitAlignWidth = pPlatform->TexAlign.Depth_D16_UNORM_1x_4x_16x.Width;
351*35ffd701SAndroid Build Coastguard Worker                     UnitAlignHeight = pPlatform->TexAlign.Depth_D16_UNORM_1x_4x_16x.Height;
352*35ffd701SAndroid Build Coastguard Worker                 }
353*35ffd701SAndroid Build Coastguard Worker 
354*35ffd701SAndroid Build Coastguard Worker                 SET_ALIGN_FACTOR(Width, 16);
355*35ffd701SAndroid Build Coastguard Worker 
356*35ffd701SAndroid Build Coastguard Worker             }
357*35ffd701SAndroid Build Coastguard Worker             else
358*35ffd701SAndroid Build Coastguard Worker             {
359*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth = pPlatform->TexAlign.Depth.Width;
360*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight = pPlatform->TexAlign.Depth.Height;
361*35ffd701SAndroid Build Coastguard Worker 
362*35ffd701SAndroid Build Coastguard Worker                 SET_ALIGN_FACTOR(Width, 32);
363*35ffd701SAndroid Build Coastguard Worker             }
364*35ffd701SAndroid Build Coastguard Worker         }
365*35ffd701SAndroid Build Coastguard Worker         /// Separate Stencil //////////////////////////////////////////////
366*35ffd701SAndroid Build Coastguard Worker         else if(pTexInfo->Flags.Gpu.SeparateStencil)
367*35ffd701SAndroid Build Coastguard Worker         {
368*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth  = pPlatform->TexAlign.SeparateStencil.Width;
369*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = pPlatform->TexAlign.SeparateStencil.Height;
370*35ffd701SAndroid Build Coastguard Worker 
371*35ffd701SAndroid Build Coastguard Worker             SET_ALIGN_FACTOR(Width, 16);
372*35ffd701SAndroid Build Coastguard Worker 
373*35ffd701SAndroid Build Coastguard Worker         }
374*35ffd701SAndroid Build Coastguard Worker         /// Cross Adapter //////////////////////////////////////////////
375*35ffd701SAndroid Build Coastguard Worker         else if(pTexInfo->Flags.Info.XAdapter)
376*35ffd701SAndroid Build Coastguard Worker         {
377*35ffd701SAndroid Build Coastguard Worker             //Add cross adapter height restriction.
378*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = pPlatform->TexAlign.XAdapter.Height;
379*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth = pPlatform->TexAlign.XAdapter.Width;
380*35ffd701SAndroid Build Coastguard Worker 
381*35ffd701SAndroid Build Coastguard Worker             SET_ALIGN_FACTOR(Width, 128);
382*35ffd701SAndroid Build Coastguard Worker 
383*35ffd701SAndroid Build Coastguard Worker             __GMM_ASSERT(pTexInfo->MaxLod == 0);
384*35ffd701SAndroid Build Coastguard Worker         }
385*35ffd701SAndroid Build Coastguard Worker         else if(((pTexInfo->Flags.Gpu.MCS &&
386*35ffd701SAndroid Build Coastguard Worker                   GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN12_CORE) ||
387*35ffd701SAndroid Build Coastguard Worker                  (pTexInfo->Flags.Gpu.CCS && GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN9_CORE)) &&
388*35ffd701SAndroid Build Coastguard Worker                 (pTexInfo->MSAA.NumSamples > 1))
389*35ffd701SAndroid Build Coastguard Worker         {
390*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth  = 16;
391*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = 4;
392*35ffd701SAndroid Build Coastguard Worker 
393*35ffd701SAndroid Build Coastguard Worker             SET_ALIGN_FACTOR(Width, 128);
394*35ffd701SAndroid Build Coastguard Worker         }
395*35ffd701SAndroid Build Coastguard Worker         else if(pTexInfo->Flags.Wa.__ForceOtherHVALIGN4)
396*35ffd701SAndroid Build Coastguard Worker         {
397*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth  = 4;
398*35ffd701SAndroid Build Coastguard Worker             UnitAlignHeight = 4;
399*35ffd701SAndroid Build Coastguard Worker         }
400*35ffd701SAndroid Build Coastguard Worker         else /// All Other ////////////////////////////////////////////////
401*35ffd701SAndroid Build Coastguard Worker         {
402*35ffd701SAndroid Build Coastguard Worker             UnitAlignWidth  = pPlatform->TexAlign.AllOther.Width;
403*35ffd701SAndroid Build Coastguard Worker 
404*35ffd701SAndroid Build Coastguard Worker             if(GFX_GET_CURRENT_RENDERCORE(pPlatform->Platform) >= IGFX_GEN8_CORE)
405*35ffd701SAndroid Build Coastguard Worker             {
406*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight = pPlatform->TexAlign.AllOther.Height;
407*35ffd701SAndroid Build Coastguard Worker 
408*35ffd701SAndroid Build Coastguard Worker                 // Let VAlign = 16, when bpp == 8 or 16 for both TileX and TileY on BDW
409*35ffd701SAndroid Build Coastguard Worker                 if ((GmmGetWaTable(pGmmLibContext)->WaUseVAlign16OnTileXYBpp816) &&
410*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->BitsPerPixel == 8 || pTexInfo->BitsPerPixel == 16) &&
411*35ffd701SAndroid Build Coastguard Worker                     (pTexInfo->Flags.Info.TiledX || pTexInfo->Flags.Info.TiledY))
412*35ffd701SAndroid Build Coastguard Worker                 {
413*35ffd701SAndroid Build Coastguard Worker                     UnitAlignHeight = 16;
414*35ffd701SAndroid Build Coastguard Worker                 }
415*35ffd701SAndroid Build Coastguard Worker 
416*35ffd701SAndroid Build Coastguard Worker                 if((GmmGetWaTable(pGmmLibContext)->Wa32bppTileY2DColorNoHAlign4) &&
417*35ffd701SAndroid Build Coastguard Worker                    (pTexInfo->BitsPerPixel == 32 && pTexInfo->Flags.Info.TiledY &&
418*35ffd701SAndroid Build Coastguard Worker                        pTexInfo->MSAA.NumSamples == 1 && pTexInfo->MaxLod > 1) &&
419*35ffd701SAndroid Build Coastguard Worker                    UnitAlignWidth <= 4)
420*35ffd701SAndroid Build Coastguard Worker                 {
421*35ffd701SAndroid Build Coastguard Worker                     UnitAlignWidth = 8;
422*35ffd701SAndroid Build Coastguard Worker                 }
423*35ffd701SAndroid Build Coastguard Worker 
424*35ffd701SAndroid Build Coastguard Worker                 SET_ALIGN_FACTOR(Width, 128);
425*35ffd701SAndroid Build Coastguard Worker             }
426*35ffd701SAndroid Build Coastguard Worker             else if(pTexInfo->MSAA.NumSamples <= 1)
427*35ffd701SAndroid Build Coastguard Worker             {
428*35ffd701SAndroid Build Coastguard Worker                 if ((GmmGetWaTable(pGmmLibContext)->WaValign2For96bppFormats) &&
429*35ffd701SAndroid Build Coastguard Worker                             ( pTexInfo->BitsPerPixel == 96 ) )
430*35ffd701SAndroid Build Coastguard Worker                 {
431*35ffd701SAndroid Build Coastguard Worker                     UnitAlignHeight = 2;
432*35ffd701SAndroid Build Coastguard Worker                 }
433*35ffd701SAndroid Build Coastguard Worker                 else if ((GmmGetWaTable(pGmmLibContext)->WaValign2ForR8G8B8UINTFormat) &&
434*35ffd701SAndroid Build Coastguard Worker                             ( pTexInfo->Format == GMM_FORMAT_R8G8B8_UINT ) )
435*35ffd701SAndroid Build Coastguard Worker                 {
436*35ffd701SAndroid Build Coastguard Worker                     UnitAlignHeight = 2;
437*35ffd701SAndroid Build Coastguard Worker                 }
438*35ffd701SAndroid Build Coastguard Worker                 else
439*35ffd701SAndroid Build Coastguard Worker                 {
440*35ffd701SAndroid Build Coastguard Worker                     UnitAlignHeight = pPlatform->TexAlign.AllOther.Height;
441*35ffd701SAndroid Build Coastguard Worker                 }
442*35ffd701SAndroid Build Coastguard Worker             }
443*35ffd701SAndroid Build Coastguard Worker             else
444*35ffd701SAndroid Build Coastguard Worker             {
445*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight = 4; // Gen6+ Special Case: VALIGN_4 for >= MSAA_4X Render Targets
446*35ffd701SAndroid Build Coastguard Worker             }
447*35ffd701SAndroid Build Coastguard Worker         }
448*35ffd701SAndroid Build Coastguard Worker 
449*35ffd701SAndroid Build Coastguard Worker         //ExistingSysMem override
450*35ffd701SAndroid Build Coastguard Worker         if(pTexInfo->Flags.Info.ExistingSysMem &&
451*35ffd701SAndroid Build Coastguard Worker            !pTexInfo->ExistingSysMem.IsGmmAllocated &&
452*35ffd701SAndroid Build Coastguard Worker            !pTexInfo->ExistingSysMem.IsPageAligned)
453*35ffd701SAndroid Build Coastguard Worker         {
454*35ffd701SAndroid Build Coastguard Worker             if(pTexInfo->Flags.Gpu.Texture)
455*35ffd701SAndroid Build Coastguard Worker             {
456*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth  = pPlatform->SamplerFetchGranularityWidth;
457*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight = pPlatform->SamplerFetchGranularityHeight;
458*35ffd701SAndroid Build Coastguard Worker             }
459*35ffd701SAndroid Build Coastguard Worker             else if(pTexInfo->Flags.Gpu.RenderTarget)
460*35ffd701SAndroid Build Coastguard Worker             {
461*35ffd701SAndroid Build Coastguard Worker                 UnitAlignWidth = (GmmIsYUVPlanar(pTexInfo->Format)) ? 2 : 1;
462*35ffd701SAndroid Build Coastguard Worker                 UnitAlignHeight = 1;
463*35ffd701SAndroid Build Coastguard Worker             }
464*35ffd701SAndroid Build Coastguard Worker         }
465*35ffd701SAndroid Build Coastguard Worker 
466*35ffd701SAndroid Build Coastguard Worker         pTexInfo->Alignment.HAlign = UnitAlignWidth;
467*35ffd701SAndroid Build Coastguard Worker         pTexInfo->Alignment.VAlign = UnitAlignHeight;
468*35ffd701SAndroid Build Coastguard Worker         pTexInfo->Alignment.DAlign = UnitAlignDepth;
469*35ffd701SAndroid Build Coastguard Worker     }
470*35ffd701SAndroid Build Coastguard Worker     else
471*35ffd701SAndroid Build Coastguard Worker     {
472*35ffd701SAndroid Build Coastguard Worker         // Don't reinitialize b/c special-case ResCreates (e.g. MCS) need the
473*35ffd701SAndroid Build Coastguard Worker         // values from their first pass through here to stick (but they'll come
474*35ffd701SAndroid Build Coastguard Worker         // through here more than once, with different parameters).
475*35ffd701SAndroid Build Coastguard Worker     }
476*35ffd701SAndroid Build Coastguard Worker 
477*35ffd701SAndroid Build Coastguard Worker     GMM_DPF_EXIT;
478*35ffd701SAndroid Build Coastguard Worker     return GMM_SUCCESS;
479*35ffd701SAndroid Build Coastguard Worker } // __GmmTexFillHAlignVAlign
480*35ffd701SAndroid Build Coastguard Worker #endif //__cpluscplus
481*35ffd701SAndroid Build Coastguard Worker //===========================================================================
482*35ffd701SAndroid Build Coastguard Worker // typedef:
483*35ffd701SAndroid Build Coastguard Worker //      GMM_MIPTAIL_SLOT_OFFSET_REC
484*35ffd701SAndroid Build Coastguard Worker //
485*35ffd701SAndroid Build Coastguard Worker // Description:
486*35ffd701SAndroid Build Coastguard Worker //      This structure used to describe the offset between miptail slot and
487*35ffd701SAndroid Build Coastguard Worker //      miptail starting address
488*35ffd701SAndroid Build Coastguard Worker //---------------------------------------------------------------------------
489*35ffd701SAndroid Build Coastguard Worker typedef struct GMM_MIPTAIL_SLOT_OFFSET_REC
490*35ffd701SAndroid Build Coastguard Worker {
491*35ffd701SAndroid Build Coastguard Worker     uint32_t X;
492*35ffd701SAndroid Build Coastguard Worker     uint32_t Y;
493*35ffd701SAndroid Build Coastguard Worker     uint32_t Z;
494*35ffd701SAndroid Build Coastguard Worker }GMM_MIPTAIL_SLOT_OFFSET;
495*35ffd701SAndroid Build Coastguard Worker 
496*35ffd701SAndroid Build Coastguard Worker #define GEN9_MIPTAIL_SLOT_OFFSET_1D_SURFACE {                                               \
497*35ffd701SAndroid Build Coastguard Worker /*  |     128 bpe    |     64 bpe    |     32 bpe    |      16 bpe    |      8 bpe     | */ \
498*35ffd701SAndroid Build Coastguard Worker     { { 2048, 0, 0 }, { 4096, 0, 0 }, { 8192, 0, 0 }, { 16384, 0, 0 }, { 32768, 0, 0 } },   \
499*35ffd701SAndroid Build Coastguard Worker     { { 1024, 0, 0 }, { 2048, 0, 0 }, { 4096, 0, 0 }, {  8192, 0, 0 }, { 16384, 0, 0 } },   \
500*35ffd701SAndroid Build Coastguard Worker     { {  512, 0, 0 }, { 1024, 0, 0 }, { 2048, 0, 0 }, {  4096, 0, 0 }, {  8192, 0, 0 } },   \
501*35ffd701SAndroid Build Coastguard Worker     { {  256, 0, 0 }, {  512, 0, 0 }, { 1024, 0, 0 }, {  2048, 0, 0 }, {  4096, 0, 0 } },   \
502*35ffd701SAndroid Build Coastguard Worker     { {  128, 0, 0 }, {  256, 0, 0 }, {  512, 0, 0 }, {  1024, 0, 0 }, {  2048, 0, 0 } },   \
503*35ffd701SAndroid Build Coastguard Worker     { {   64, 0, 0 }, {  128, 0, 0 }, {  256, 0, 0 }, {   512, 0, 0 }, {  1024, 0, 0 } },   \
504*35ffd701SAndroid Build Coastguard Worker     { {   48, 0, 0 }, {   96, 0, 0 }, {  192, 0, 0 }, {   384, 0, 0 }, {   768, 0, 0 } },   \
505*35ffd701SAndroid Build Coastguard Worker     { {   32, 0, 0 }, {   64, 0, 0 }, {  128, 0, 0 }, {   256, 0, 0 }, {   512, 0, 0 } },   \
506*35ffd701SAndroid Build Coastguard Worker     { {   28, 0, 0 }, {   56, 0, 0 }, {  112, 0, 0 }, {   224, 0, 0 }, {   448, 0, 0 } },   \
507*35ffd701SAndroid Build Coastguard Worker     { {   24, 0, 0 }, {   48, 0, 0 }, {   96, 0, 0 }, {   192, 0, 0 }, {   384, 0, 0 } },   \
508*35ffd701SAndroid Build Coastguard Worker     { {   20, 0, 0 }, {   40, 0, 0 }, {   80, 0, 0 }, {   160, 0, 0 }, {   320, 0, 0 } },   \
509*35ffd701SAndroid Build Coastguard Worker     { {   16, 0, 0 }, {   32, 0, 0 }, {   64, 0, 0 }, {   128, 0, 0 }, {   256, 0, 0 } },   \
510*35ffd701SAndroid Build Coastguard Worker     { {   12, 0, 0 }, {   24, 0, 0 }, {   48, 0, 0 }, {    96, 0, 0 }, {   192, 0, 0 } },   \
511*35ffd701SAndroid Build Coastguard Worker     { {    8, 0, 0 }, {   16, 0, 0 }, {   32, 0, 0 }, {    64, 0, 0 }, {   128, 0, 0 } },   \
512*35ffd701SAndroid Build Coastguard Worker     { {    4, 0, 0 }, {    8, 0, 0 }, {   16, 0, 0 }, {    32, 0, 0 }, {    64, 0, 0 } },   \
513*35ffd701SAndroid Build Coastguard Worker     { {    0, 0, 0 }, {    0, 0, 0 }, {    0, 0, 0 }, {     0, 0, 0 }, {     0, 0, 0 } },   \
514*35ffd701SAndroid Build Coastguard Worker }
515*35ffd701SAndroid Build Coastguard Worker 
516*35ffd701SAndroid Build Coastguard Worker #define GEN9_MIPTAIL_SLOT_OFFSET_2D_SURFACE {                                           \
517*35ffd701SAndroid Build Coastguard Worker /*  |    128 bpe    |    64 bpe   |     32 bpe    |     16 bpe    |      8 bpe      | */\
518*35ffd701SAndroid Build Coastguard Worker     { { 32,  0, 0 }, { 64,  0, 0 }, { 64,  0, 0 }, { 128,  0, 0 }, { 128,   0, 0 } },   \
519*35ffd701SAndroid Build Coastguard Worker     { {  0, 32, 0 }, {  0, 32, 0 }, {  0, 64, 0 }, {   0, 64, 0 }, {   0, 128, 0 } },   \
520*35ffd701SAndroid Build Coastguard Worker     { { 16,  0, 0 }, { 32,  0, 0 }, { 32,  0, 0 }, {  64,  0, 0 }, {  64,   0, 0 } },   \
521*35ffd701SAndroid Build Coastguard Worker     { {  0, 16, 0 }, {  0, 16, 0 }, {  0, 32, 0 }, {   0, 32, 0 }, {   0,  64, 0 } },   \
522*35ffd701SAndroid Build Coastguard Worker     { {  8,  0, 0 }, { 16,  0, 0 }, { 16,  0, 0 }, {  32,  0, 0 }, {  32,   0, 0 } },   \
523*35ffd701SAndroid Build Coastguard Worker     { {  4,  8, 0 }, {  8,  8, 0 }, {  8, 16, 0 }, {  16, 16, 0 }, {  16,  32, 0 } },   \
524*35ffd701SAndroid Build Coastguard Worker     { {  0, 12, 0 }, {  0, 12, 0 }, {  0, 24, 0 }, {   0, 24, 0 }, {   0,  48, 0 } },   \
525*35ffd701SAndroid Build Coastguard Worker     { {  0,  8, 0 }, {  0,  8, 0 }, {  0, 16, 0 }, {   0, 16, 0 }, {   0,  32, 0 } },   \
526*35ffd701SAndroid Build Coastguard Worker     { {  4,  4, 0 }, {  8,  4, 0 }, {  8,  8, 0 }, {  16,  8, 0 }, {  16,  16, 0 } },   \
527*35ffd701SAndroid Build Coastguard Worker     { {  4,  0, 0 }, {  8,  0, 0 }, {  8,  0, 0 }, {  16,  0, 0 }, {  16,   0, 0 } },   \
528*35ffd701SAndroid Build Coastguard Worker     { {  0,  4, 0 }, {  0,  4, 0 }, {  0,  8, 0 }, {   0,  8, 0 }, {   0,  16, 0 } },   \
529*35ffd701SAndroid Build Coastguard Worker     { {  3,  0, 0 }, {  6,  0, 0 }, {  4,  4, 0 }, {   8,  4, 0 }, {   0,  12, 0 } },   \
530*35ffd701SAndroid Build Coastguard Worker     { {  2,  0, 0 }, {  4,  0, 0 }, {  4,  0, 0 }, {   8,  0, 0 }, {   0,   8, 0 } },   \
531*35ffd701SAndroid Build Coastguard Worker     { {  1,  0, 0 }, {  2,  0, 0 }, {  0,  4, 0 }, {   0,  4, 0 }, {   0,   4, 0 } },   \
532*35ffd701SAndroid Build Coastguard Worker     { {  0,  0, 0 }, {  0,  0, 0 }, {  0,  0, 0 }, {   0,  0, 0 }, {   0,   0, 0 } },   \
533*35ffd701SAndroid Build Coastguard Worker }
534*35ffd701SAndroid Build Coastguard Worker 
535*35ffd701SAndroid Build Coastguard Worker #define GEN9_MIPTAIL_SLOT_OFFSET_3D_SURFACE {                                       \
536*35ffd701SAndroid Build Coastguard Worker /*  |   128 bpe   |    64 bpe   |    32 bpe   |     16 bpe   |      8 bpe      | */ \
537*35ffd701SAndroid Build Coastguard Worker     { { 8, 0, 0 }, { 16, 0, 0 }, { 16,  0, 0 }, { 16,  0,  0 }, { 32,  0,  0 } },   \
538*35ffd701SAndroid Build Coastguard Worker     { { 0, 8, 0 }, {  0, 8, 0 }, {  0, 16, 0 }, {  0, 16,  0 }, {  0, 16,  0 } },   \
539*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 8 }, {  0, 0, 8 }, {  0,  0, 8 }, {  0,  0, 16 }, {  0,  0, 16 } },   \
540*35ffd701SAndroid Build Coastguard Worker     { { 4, 0, 0 }, {  8, 0, 0 }, {  8,  0, 0 }, {  8,  0,  0 }, { 16,  0,  0 } },   \
541*35ffd701SAndroid Build Coastguard Worker     { { 0, 4, 0 }, {  0, 4, 0 }, {  0,  8, 0 }, {  0,  8,  0 }, {  0,  8,  0 } },   \
542*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 4 }, {  0, 0, 4 }, {  0,  0, 4 }, {  0,  0,  8 }, {  0,  0,  8 } },   \
543*35ffd701SAndroid Build Coastguard Worker     { { 3, 0, 0 }, {  6, 0, 0 }, {  4,  4, 0 }, {  0,  4,  4 }, {  0,  4,  4 } },   \
544*35ffd701SAndroid Build Coastguard Worker     { { 2, 0, 0 }, {  4, 0, 0 }, {  0,  4, 0 }, {  0,  4,  0 }, {  0,  4,  0 } },   \
545*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 3 }, {  2, 0, 3 }, {  4,  0, 3 }, {  0,  0,  7 }, {  0,  0,  7 } },   \
546*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 2 }, {  2, 0, 2 }, {  4,  0, 2 }, {  0,  0,  6 }, {  0,  0,  6 } },   \
547*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 1 }, {  2, 0, 1 }, {  4,  0, 1 }, {  0,  0,  5 }, {  0,  0,  5 } },   \
548*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 0 }, {  2, 0, 0 }, {  4,  0, 0 }, {  0,  0,  4 }, {  0,  0,  4 } },   \
549*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 3 }, {  0, 0, 3 }, {  0,  0, 3 }, {  0,  0,  3 }, {  0,  0,  3 } },   \
550*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 2 }, {  0, 0, 2 }, {  0,  0, 2 }, {  0,  0,  2 }, {  0,  0,  2 } },   \
551*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 1 }, {  0, 0, 1 }, {  0,  0, 1 }, {  0,  0,  1 }, {  0,  0,  1 } },   \
552*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 0 }, {  0, 0, 0 }, {  0,  0, 0 }, {  0,  0,  0 }, {  0,  0,  0 } },   \
553*35ffd701SAndroid Build Coastguard Worker }
554*35ffd701SAndroid Build Coastguard Worker 
555*35ffd701SAndroid Build Coastguard Worker #define GEN10_MIPTAIL_SLOT_OFFSET_1D_SURFACE {                                              \
556*35ffd701SAndroid Build Coastguard Worker /*  |     128 bpe    |     64 bpe    |     32 bpe    |      16 bpe    |      8 bpe     | */ \
557*35ffd701SAndroid Build Coastguard Worker     { { 2048, 0, 0 }, { 4096, 0, 0 }, { 8192, 0, 0 }, { 16384, 0, 0 }, { 32768, 0, 0 } },   \
558*35ffd701SAndroid Build Coastguard Worker     { { 1024, 0, 0 }, { 2048, 0, 0 }, { 4096, 0, 0 }, {  8192, 0, 0 }, { 16384, 0, 0 } },   \
559*35ffd701SAndroid Build Coastguard Worker     { {  512, 0, 0 }, { 1024, 0, 0 }, { 2048, 0, 0 }, {  4096, 0, 0 }, {  8192, 0, 0 } },   \
560*35ffd701SAndroid Build Coastguard Worker     { {  256, 0, 0 }, {  512, 0, 0 }, { 1024, 0, 0 }, {  2048, 0, 0 }, {  4096, 0, 0 } },   \
561*35ffd701SAndroid Build Coastguard Worker     { {  128, 0, 0 }, {  256, 0, 0 }, {  512, 0, 0 }, {  1024, 0, 0 }, {  2048, 0, 0 } },   \
562*35ffd701SAndroid Build Coastguard Worker     { {   96, 0, 0 }, {  192, 0, 0 }, {  384, 0, 0 }, {   768, 0, 0 }, {  1536, 0, 0 } },   \
563*35ffd701SAndroid Build Coastguard Worker     { {   80, 0, 0 }, {  160, 0, 0 }, {  320, 0, 0 }, {   640, 0, 0 }, {  1280, 0, 0 } },   \
564*35ffd701SAndroid Build Coastguard Worker     { {   64, 0, 0 }, {  128, 0, 0 }, {  256, 0, 0 }, {   512, 0, 0 }, {  1024, 0, 0 } },   \
565*35ffd701SAndroid Build Coastguard Worker     { {   48, 0, 0 }, {   96, 0, 0 }, {  192, 0, 0 }, {   384, 0, 0 }, {   768, 0, 0 } },   \
566*35ffd701SAndroid Build Coastguard Worker     { {   32, 0, 0 }, {   64, 0, 0 }, {  128, 0, 0 }, {   256, 0, 0 }, {   512, 0, 0 } },   \
567*35ffd701SAndroid Build Coastguard Worker     { {   16, 0, 0 }, {   32, 0, 0 }, {   64, 0, 0 }, {   128, 0, 0 }, {   256, 0, 0 } },   \
568*35ffd701SAndroid Build Coastguard Worker     { {   12, 0, 0 }, {   24, 0, 0 }, {   48, 0, 0 }, {    96, 0, 0 }, {   192, 0, 0 } },   \
569*35ffd701SAndroid Build Coastguard Worker     { {    8, 0, 0 }, {   16, 0, 0 }, {   32, 0, 0 }, {    64, 0, 0 }, {   128, 0, 0 } },   \
570*35ffd701SAndroid Build Coastguard Worker     { {    4, 0, 0 }, {    8, 0, 0 }, {   16, 0, 0 }, {    32, 0, 0 }, {    64, 0, 0 } },   \
571*35ffd701SAndroid Build Coastguard Worker     { {    0, 0, 0 }, {    0, 0, 0 }, {    0, 0, 0 }, {     0, 0, 0 }, {     0, 0, 0 } },   \
572*35ffd701SAndroid Build Coastguard Worker }
573*35ffd701SAndroid Build Coastguard Worker 
574*35ffd701SAndroid Build Coastguard Worker #define GEN10_MIPTAIL_SLOT_OFFSET_2D_SURFACE {                                          \
575*35ffd701SAndroid Build Coastguard Worker /*  |    128 bpe    |    64 bpe   |     32 bpe    |     16 bpe    |      8 bpe     | */ \
576*35ffd701SAndroid Build Coastguard Worker     { { 32,  0, 0 }, { 64,  0, 0 }, { 64,  0, 0 }, { 128,  0, 0 }, { 128,   0, 0 } },   \
577*35ffd701SAndroid Build Coastguard Worker     { {  0, 32, 0 }, {  0, 32, 0 }, {  0, 64, 0 }, {   0, 64, 0 }, {   0, 128, 0 } },   \
578*35ffd701SAndroid Build Coastguard Worker     { { 16,  0, 0 }, { 32,  0, 0 }, { 32,  0, 0 }, {  64,  0, 0 }, {  64,   0, 0 } },   \
579*35ffd701SAndroid Build Coastguard Worker     { {  0, 16, 0 }, {  0, 16, 0 }, {  0, 32, 0 }, {   0, 32, 0 }, {   0,  64, 0 } },   \
580*35ffd701SAndroid Build Coastguard Worker     { {  8,  0, 0 }, { 16,  0, 0 }, { 16,  0, 0 }, {  32,  0, 0 }, {  32,   0, 0 } },   \
581*35ffd701SAndroid Build Coastguard Worker     { {  4,  8, 0 }, {  8,  8, 0 }, {  8, 16, 0 }, {  16, 16, 0 }, {  16,  32, 0 } },   \
582*35ffd701SAndroid Build Coastguard Worker     { {  0, 12, 0 }, {  0, 12, 0 }, {  0, 24, 0 }, {   0, 24, 0 }, {   0,  48, 0 } },   \
583*35ffd701SAndroid Build Coastguard Worker     { {  0,  8, 0 }, {  0,  8, 0 }, {  0, 16, 0 }, {   0, 16, 0 }, {   0,  32, 0 } },   \
584*35ffd701SAndroid Build Coastguard Worker     { {  4,  4, 0 }, {  8,  4, 0 }, {  8,  8, 0 }, {  16,  8, 0 }, {  16,  16, 0 } },   \
585*35ffd701SAndroid Build Coastguard Worker     { {  4,  0, 0 }, {  8,  0, 0 }, {  8,  0, 0 }, {  16,  0, 0 }, {  16,   0, 0 } },   \
586*35ffd701SAndroid Build Coastguard Worker     { {  0,  4, 0 }, {  0,  4, 0 }, {  0,  8, 0 }, {   0,  8, 0 }, {   0,  16, 0 } },   \
587*35ffd701SAndroid Build Coastguard Worker     { {  0,  0, 0 }, {  0,  0, 0 }, {  0,  0, 0 }, {   0,  0, 0 }, {   0,   0, 0 } },   \
588*35ffd701SAndroid Build Coastguard Worker     { {  1,  0, 0 }, {  2,  0, 0 }, {  0,  4, 0 }, {   0,  4, 0 }, {   0,   4, 0 } },   \
589*35ffd701SAndroid Build Coastguard Worker     { {  2,  0, 0 }, {  4,  0, 0 }, {  4,  0, 0 }, {   8,  0, 0 }, {   0,   8, 0 } },   \
590*35ffd701SAndroid Build Coastguard Worker     { {  3,  0, 0 }, {  6,  0, 0 }, {  4,  4, 0 }, {   8,  4, 0 }, {   0,  12, 0 } },   \
591*35ffd701SAndroid Build Coastguard Worker }
592*35ffd701SAndroid Build Coastguard Worker 
593*35ffd701SAndroid Build Coastguard Worker #define GEN10_MIPTAIL_SLOT_OFFSET_3D_SURFACE {                                      \
594*35ffd701SAndroid Build Coastguard Worker /*  |   128 bpe   |    64 bpe   |    32 bpe   |     16 bpe   |      8 bpe      | */ \
595*35ffd701SAndroid Build Coastguard Worker     { { 8, 0, 0 }, { 16, 0, 0 }, { 16,  0, 0 }, { 16,  0,  0 }, { 32,  0,  0 } },   \
596*35ffd701SAndroid Build Coastguard Worker     { { 0, 8, 0 }, {  0, 8, 0 }, {  0, 16, 0 }, {  0, 16,  0 }, {  0, 16,  0 } },   \
597*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 8 }, {  0, 0, 8 }, {  0,  0, 8 }, {  0,  0, 16 }, {  0,  0, 16 } },   \
598*35ffd701SAndroid Build Coastguard Worker     { { 4, 0, 0 }, {  8, 0, 0 }, {  8,  0, 0 }, {  8,  0,  0 }, { 16,  0,  0 } },   \
599*35ffd701SAndroid Build Coastguard Worker     { { 0, 4, 0 }, {  0, 4, 0 }, {  0,  8, 0 }, {  0,  8,  0 }, {  0,  8,  0 } },   \
600*35ffd701SAndroid Build Coastguard Worker     { { 2, 0, 4 }, {  4, 0, 4 }, {  4,  0, 4 }, {  4,  0,  8 }, {  8,  0,  8 } },   \
601*35ffd701SAndroid Build Coastguard Worker     { { 0, 2, 4 }, {  0, 2, 4 }, {  0,  4, 4 }, {  0,  4,  8 }, {  0,  4,  8 } },   \
602*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 4 }, {  0, 0, 4 }, {  0,  0, 4 }, {  0,  0,  8 }, {  0,  0,  8 } },   \
603*35ffd701SAndroid Build Coastguard Worker     { { 2, 2, 0 }, {  4, 2, 0 }, {  4,  4, 0 }, {  4,  4,  0 }, {  8,  4,  0 } },   \
604*35ffd701SAndroid Build Coastguard Worker     { { 2, 0, 0 }, {  4, 0, 0 }, {  4,  0, 0 }, {  4,  0,  0 }, {  8,  0,  0 } },   \
605*35ffd701SAndroid Build Coastguard Worker     { { 0, 2, 0 }, {  0, 2, 0 }, {  0,  4, 0 }, {  0,  4,  0 }, {  0,  4,  0 } },   \
606*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 2 }, {  2, 0, 2 }, {  2,  0, 2 }, {  2,  0,  4 }, {  4,  0,  4 } },   \
607*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 2 }, {  0, 0, 2 }, {  0,  0, 2 }, {  0,  0,  4 }, {  0,  0,  4 } },   \
608*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 0 }, {  2, 0, 0 }, {  2,  0, 0 }, {  2,  0,  0 }, {  4,  0,  0 } },   \
609*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 0 }, {  0, 0, 0 }, {  0,  0, 0 }, {  0,  0,  0 }, {  0,  0,  0 } },   \
610*35ffd701SAndroid Build Coastguard Worker }
611*35ffd701SAndroid Build Coastguard Worker 
612*35ffd701SAndroid Build Coastguard Worker #define GEN11_MIPTAIL_SLOT_OFFSET_1D_SURFACE {                                              \
613*35ffd701SAndroid Build Coastguard Worker /*  |     128 bpe    |     64 bpe    |     32 bpe    |      16 bpe    |      8 bpe     | */ \
614*35ffd701SAndroid Build Coastguard Worker     { { 2048, 0, 0 }, { 4096, 0, 0 }, { 8192, 0, 0 }, { 16384, 0, 0 }, { 32768, 0, 0 } },   \
615*35ffd701SAndroid Build Coastguard Worker     { { 1024, 0, 0 }, { 2048, 0, 0 }, { 4096, 0, 0 }, {  8192, 0, 0 }, { 16384, 0, 0 } },   \
616*35ffd701SAndroid Build Coastguard Worker     { {  512, 0, 0 }, { 1024, 0, 0 }, { 2048, 0, 0 }, {  4096, 0, 0 }, {  8192, 0, 0 } },   \
617*35ffd701SAndroid Build Coastguard Worker     { {  256, 0, 0 }, {  512, 0, 0 }, { 1024, 0, 0 }, {  2048, 0, 0 }, {  4096, 0, 0 } },   \
618*35ffd701SAndroid Build Coastguard Worker     { {  128, 0, 0 }, {  256, 0, 0 }, {  512, 0, 0 }, {  1024, 0, 0 }, {  2048, 0, 0 } },   \
619*35ffd701SAndroid Build Coastguard Worker     { {   96, 0, 0 }, {  192, 0, 0 }, {  384, 0, 0 }, {   768, 0, 0 }, {  1536, 0, 0 } },   \
620*35ffd701SAndroid Build Coastguard Worker     { {   80, 0, 0 }, {  160, 0, 0 }, {  320, 0, 0 }, {   640, 0, 0 }, {  1280, 0, 0 } },   \
621*35ffd701SAndroid Build Coastguard Worker     { {   64, 0, 0 }, {  128, 0, 0 }, {  256, 0, 0 }, {   512, 0, 0 }, {  1024, 0, 0 } },   \
622*35ffd701SAndroid Build Coastguard Worker     { {   48, 0, 0 }, {   96, 0, 0 }, {  192, 0, 0 }, {   384, 0, 0 }, {   768, 0, 0 } },   \
623*35ffd701SAndroid Build Coastguard Worker     { {   32, 0, 0 }, {   64, 0, 0 }, {  128, 0, 0 }, {   256, 0, 0 }, {   512, 0, 0 } },   \
624*35ffd701SAndroid Build Coastguard Worker     { {   16, 0, 0 }, {   32, 0, 0 }, {   64, 0, 0 }, {   128, 0, 0 }, {   256, 0, 0 } },   \
625*35ffd701SAndroid Build Coastguard Worker     { {    0, 0, 0 }, {    0, 0, 0 }, {    0, 0, 0 }, {     0, 0, 0 }, {     0, 0, 0 } },   \
626*35ffd701SAndroid Build Coastguard Worker     { {    4, 0, 0 }, {    8, 0, 0 }, {   16, 0, 0 }, {    32, 0, 0 }, {    64, 0, 0 } },   \
627*35ffd701SAndroid Build Coastguard Worker     { {    8, 0, 0 }, {   16, 0, 0 }, {   32, 0, 0 }, {    64, 0, 0 }, {   128, 0, 0 } },   \
628*35ffd701SAndroid Build Coastguard Worker     { {   12, 0, 0 }, {   24, 0, 0 }, {   48, 0, 0 }, {    96, 0, 0 }, {   192, 0, 0 } },   \
629*35ffd701SAndroid Build Coastguard Worker }
630*35ffd701SAndroid Build Coastguard Worker 
631*35ffd701SAndroid Build Coastguard Worker #define GEN11_MIPTAIL_SLOT_OFFSET_2D_SURFACE GEN10_MIPTAIL_SLOT_OFFSET_2D_SURFACE
632*35ffd701SAndroid Build Coastguard Worker 
633*35ffd701SAndroid Build Coastguard Worker #define GEN11_MIPTAIL_SLOT_OFFSET_3D_SURFACE {                                      \
634*35ffd701SAndroid Build Coastguard Worker /*  |   128 bpe   |    64 bpe   |    32 bpe   |     16 bpe   |      8 bpe      | */ \
635*35ffd701SAndroid Build Coastguard Worker     { { 8, 0, 0 }, { 16, 0, 0 }, { 16,  0, 0 }, { 16,  0,  0 }, { 32,  0,  0 } },   \
636*35ffd701SAndroid Build Coastguard Worker     { { 0, 8, 0 }, {  0, 8, 0 }, {  0, 16, 0 }, {  0, 16,  0 }, {  0, 16,  0 } },   \
637*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 8 }, {  0, 0, 8 }, {  0,  0, 8 }, {  0,  0, 16 }, {  0,  0, 16 } },   \
638*35ffd701SAndroid Build Coastguard Worker     { { 4, 0, 0 }, {  8, 0, 0 }, {  8,  0, 0 }, {  8,  0,  0 }, { 16,  0,  0 } },   \
639*35ffd701SAndroid Build Coastguard Worker     { { 0, 4, 0 }, {  0, 4, 0 }, {  0,  8, 0 }, {  0,  8,  0 }, {  0,  8,  0 } },   \
640*35ffd701SAndroid Build Coastguard Worker     { { 2, 0, 4 }, {  4, 0, 4 }, {  4,  0, 4 }, {  0,  4,  8 }, {  0,  4,  8 } },   \
641*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 4 }, {  2, 0, 4 }, {  0,  4, 4 }, {  0,  0, 12 }, {  0,  0, 12 } },   \
642*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 4 }, {  0, 0, 4 }, {  0,  0, 4 }, {  0,  0,  8 }, {  0,  0,  8 } },   \
643*35ffd701SAndroid Build Coastguard Worker     { { 3, 0, 0 }, {  6, 0, 0 }, {  4,  4, 0 }, {  0,  4,  4 }, {  0,  4,  4 } },   \
644*35ffd701SAndroid Build Coastguard Worker     { { 2, 0, 0 }, {  4, 0, 0 }, {  4,  0, 0 }, {  0,  4,  0 }, {  0,  4,  0 } },   \
645*35ffd701SAndroid Build Coastguard Worker     { { 1, 0, 0 }, {  2, 0, 0 }, {  0,  4, 0 }, {  0,  0,  4 }, {  0,  0,  4 } },   \
646*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 0 }, {  0, 0, 0 }, {  0,  0, 0 }, {  0,  0,  0 }, {  0,  0,  0 } },   \
647*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 1 }, {  0, 0, 1 }, {  0,  0, 1 }, {  0,  0,  1 }, {  0,  0,  1 } },   \
648*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 2 }, {  0, 0, 2 }, {  0,  0, 2 }, {  0,  0,  2 }, {  0,  0,  2 } },   \
649*35ffd701SAndroid Build Coastguard Worker     { { 0, 0, 3 }, {  0, 0, 3 }, {  0,  0, 3 }, {  0,  0,  3 }, {  0,  0,  3 } },   \
650*35ffd701SAndroid Build Coastguard Worker }
651