1 /****************************************************************************
2 * Copyright (C) 2014-2015 Intel Corporation. All Rights Reserved.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25 * @brief Functionality for ClearTile. StoreHotTileClear clears a single macro
26 * tile in the destination.
28 ******************************************************************************/
29 #include "common/os.h"
30 #include "core/context.h"
31 #include "common/formats.h"
32 #include "memory/TilingFunctions.h"
33 #include "memory/tilingtraits.h"
34 #include "memory/Convert.h"
36 typedef void(*PFN_STORE_TILES_CLEAR
)(const float*, SWR_SURFACE_STATE
*, UINT
, UINT
, uint32_t);
38 //////////////////////////////////////////////////////////////////////////
39 /// Clear Raster Tile Function Tables.
40 //////////////////////////////////////////////////////////////////////////
41 static PFN_STORE_TILES_CLEAR sStoreTilesClearColorTable
[NUM_SWR_FORMATS
];
43 static PFN_STORE_TILES_CLEAR sStoreTilesClearDepthTable
[NUM_SWR_FORMATS
];
45 //////////////////////////////////////////////////////////////////////////
46 /// StoreRasterTileClear
47 //////////////////////////////////////////////////////////////////////////
48 template<SWR_FORMAT SrcFormat
, SWR_FORMAT DstFormat
>
49 struct StoreRasterTileClear
51 //////////////////////////////////////////////////////////////////////////
52 /// @brief Stores an 8x8 raster tile to the destination surface.
53 /// @param pColor - Pointer to clear color.
54 /// @param pDstSurface - Destination surface state
55 /// @param x, y - Coordinates to raster tile.
56 INLINE
static void StoreClear(
57 const uint8_t* dstFormattedColor
,
58 UINT dstBytesPerPixel
,
59 SWR_SURFACE_STATE
* pDstSurface
,
60 UINT x
, UINT y
, // (x, y) pixel coordinate to start of raster tile.
61 uint32_t renderTargetArrayIndex
)
63 // If we're outside of the surface, stop.
64 uint32_t lodWidth
= std::max
<uint32_t>(pDstSurface
->width
>> pDstSurface
->lod
, 1U);
65 uint32_t lodHeight
= std::max
<uint32_t>(pDstSurface
->height
>> pDstSurface
->lod
, 1U);
66 if (x
>= lodWidth
|| y
>= lodHeight
)
69 // Compute destination address for raster tile.
70 uint8_t* pDstTile
= (uint8_t*)ComputeSurfaceAddress
<false, false>(
71 x
, y
, pDstSurface
->arrayIndex
+ renderTargetArrayIndex
,
72 pDstSurface
->arrayIndex
+ renderTargetArrayIndex
,
78 uint8_t* pDst
= pDstTile
;
79 UINT dstBytesPerRow
= 0;
81 // For each raster tile pixel in row 0 (rx, 0)
82 for (UINT rx
= 0; (rx
< KNOB_TILE_X_DIM
) && ((x
+ rx
) < lodWidth
); ++rx
)
84 memcpy(pDst
, dstFormattedColor
, dstBytesPerPixel
);
86 // Increment pointer to next pixel in row.
87 pDst
+= dstBytesPerPixel
;
88 dstBytesPerRow
+= dstBytesPerPixel
;
91 // start of second row
92 pDst
= pDstTile
+ pDstSurface
->pitch
;
94 // For each remaining row in the rest of the raster tile
95 for (UINT ry
= 1; (ry
< KNOB_TILE_Y_DIM
) && ((y
+ ry
) < lodHeight
); ++ry
)
98 memcpy(pDst
, pDstTile
, dstBytesPerRow
);
100 // Increment pointer to first pixel in next row.
101 pDst
+= pDstSurface
->pitch
;
106 //////////////////////////////////////////////////////////////////////////
107 /// StoreMacroTileClear - Stores a macro tile clear to its raster tiles.
108 //////////////////////////////////////////////////////////////////////////
109 template<SWR_FORMAT SrcFormat
, SWR_FORMAT DstFormat
>
110 struct StoreMacroTileClear
112 //////////////////////////////////////////////////////////////////////////
113 /// @brief Stores a macrotile to the destination surface.
114 /// @param pColor - Pointer to color to write to pixels.
115 /// @param pDstSurface - Destination surface state
116 /// @param x, y - Coordinates to macro tile
117 static void StoreClear(
119 SWR_SURFACE_STATE
* pDstSurface
,
120 UINT x
, UINT y
, uint32_t renderTargetArrayIndex
)
122 UINT dstBytesPerPixel
= (FormatTraits
<DstFormat
>::bpp
/ 8);
124 uint8_t dstFormattedColor
[16]; // max bpp is 128, so 16 is all we need here for one pixel
128 for (UINT comp
= 0; comp
< FormatTraits
<DstFormat
>::numComps
; ++comp
)
130 srcColor
[comp
] = pColor
[FormatTraits
<DstFormat
>::swizzle(comp
)];
133 // using this helper function, but the Tiling Traits is unused inside it so just using a dummy value
134 ConvertPixelFromFloat
<DstFormat
>(dstFormattedColor
, srcColor
);
136 // Store each raster tile from the hot tile to the destination surface.
137 // TODO: Put in check for partial coverage on x/y -- SWR_ASSERT if it happens.
138 // Intent is for this function to only handle full tiles.
139 for (UINT row
= 0; row
< KNOB_MACROTILE_Y_DIM
; row
+= KNOB_TILE_Y_DIM
)
141 for (UINT col
= 0; col
< KNOB_MACROTILE_X_DIM
; col
+= KNOB_TILE_X_DIM
)
143 StoreRasterTileClear
<SrcFormat
, DstFormat
>::StoreClear(dstFormattedColor
, dstBytesPerPixel
, pDstSurface
, (x
+ col
), (y
+ row
), renderTargetArrayIndex
);
149 //////////////////////////////////////////////////////////////////////////
150 /// @brief Writes clear color to every pixel of a render surface
151 /// @param hPrivateContext - Handle to private DC
152 /// @param renderTargetIndex - Index to destination render target
153 /// @param x, y - Coordinates to raster tile.
154 /// @param pClearColor - Pointer to clear color
155 void SwrStoreHotTileClear(
156 HANDLE hWorkerPrivateData
,
157 SWR_SURFACE_STATE
*pDstSurface
,
158 SWR_RENDERTARGET_ATTACHMENT renderTargetIndex
,
161 uint32_t renderTargetArrayIndex
,
162 const float* pClearColor
)
164 PFN_STORE_TILES_CLEAR pfnStoreTilesClear
= NULL
;
166 if (renderTargetIndex
== SWR_ATTACHMENT_STENCIL
)
168 SWR_ASSERT(pDstSurface
->format
== R8_UINT
);
169 pfnStoreTilesClear
= StoreMacroTileClear
<R8_UINT
, R8_UINT
>::StoreClear
;
171 else if (renderTargetIndex
== SWR_ATTACHMENT_DEPTH
)
173 pfnStoreTilesClear
= sStoreTilesClearDepthTable
[pDstSurface
->format
];
177 pfnStoreTilesClear
= sStoreTilesClearColorTable
[pDstSurface
->format
];
180 SWR_ASSERT(pfnStoreTilesClear
!= NULL
);
182 // Store a macro tile.
183 /// @todo Once all formats are supported then if check can go away. This is to help us near term to make progress.
184 if (pfnStoreTilesClear
!= NULL
)
186 pfnStoreTilesClear(pClearColor
, pDstSurface
, x
, y
, renderTargetArrayIndex
);
190 //////////////////////////////////////////////////////////////////////////
191 /// INIT_STORE_TILES_TABLE - Helper macro for setting up the tables.
192 #define INIT_STORE_TILES_CLEAR_COLOR_TABLE() \
193 memset(sStoreTilesClearColorTable, 0, sizeof(sStoreTilesClearColorTable)); \
195 sStoreTilesClearColorTable[R32G32B32A32_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32A32_FLOAT>::StoreClear; \
196 sStoreTilesClearColorTable[R32G32B32A32_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32A32_SINT>::StoreClear; \
197 sStoreTilesClearColorTable[R32G32B32A32_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32A32_UINT>::StoreClear; \
198 sStoreTilesClearColorTable[R32G32B32X32_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32X32_FLOAT>::StoreClear; \
199 sStoreTilesClearColorTable[R32G32B32_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32_FLOAT>::StoreClear; \
200 sStoreTilesClearColorTable[R32G32B32_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32_SINT>::StoreClear; \
201 sStoreTilesClearColorTable[R32G32B32_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32B32_UINT>::StoreClear; \
202 sStoreTilesClearColorTable[R16G16B16A16_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16A16_UNORM>::StoreClear; \
203 sStoreTilesClearColorTable[R16G16B16A16_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16A16_SNORM>::StoreClear; \
204 sStoreTilesClearColorTable[R16G16B16A16_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16A16_SINT>::StoreClear; \
205 sStoreTilesClearColorTable[R16G16B16A16_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16A16_UINT>::StoreClear; \
206 sStoreTilesClearColorTable[R16G16B16A16_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16A16_FLOAT>::StoreClear; \
207 sStoreTilesClearColorTable[R32G32_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32_FLOAT>::StoreClear; \
208 sStoreTilesClearColorTable[R32G32_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32_SINT>::StoreClear; \
209 sStoreTilesClearColorTable[R32G32_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32G32_UINT>::StoreClear; \
210 sStoreTilesClearColorTable[R16G16B16X16_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16X16_UNORM>::StoreClear; \
211 sStoreTilesClearColorTable[R16G16B16X16_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16X16_FLOAT>::StoreClear; \
212 sStoreTilesClearColorTable[B8G8R8A8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B8G8R8A8_UNORM>::StoreClear; \
213 sStoreTilesClearColorTable[B8G8R8A8_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B8G8R8A8_UNORM_SRGB>::StoreClear; \
214 sStoreTilesClearColorTable[R10G10B10A2_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R10G10B10A2_UNORM>::StoreClear; \
215 sStoreTilesClearColorTable[R10G10B10A2_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, R10G10B10A2_UNORM_SRGB>::StoreClear; \
216 sStoreTilesClearColorTable[R10G10B10A2_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R10G10B10A2_UINT>::StoreClear; \
217 sStoreTilesClearColorTable[R8G8B8A8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8A8_UNORM>::StoreClear; \
218 sStoreTilesClearColorTable[R8G8B8A8_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8A8_UNORM_SRGB>::StoreClear; \
219 sStoreTilesClearColorTable[R8G8B8A8_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8A8_SNORM>::StoreClear; \
220 sStoreTilesClearColorTable[R8G8B8A8_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8A8_SINT>::StoreClear; \
221 sStoreTilesClearColorTable[R8G8B8A8_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8A8_UINT>::StoreClear; \
222 sStoreTilesClearColorTable[R16G16_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16_UNORM>::StoreClear; \
223 sStoreTilesClearColorTable[R16G16_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16_SNORM>::StoreClear; \
224 sStoreTilesClearColorTable[R16G16_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16_SINT>::StoreClear; \
225 sStoreTilesClearColorTable[R16G16_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16_UINT>::StoreClear; \
226 sStoreTilesClearColorTable[R16G16_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16_FLOAT>::StoreClear; \
227 sStoreTilesClearColorTable[B10G10R10A2_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B10G10R10A2_UNORM>::StoreClear; \
228 sStoreTilesClearColorTable[B10G10R10A2_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B10G10R10A2_UNORM_SRGB>::StoreClear; \
229 sStoreTilesClearColorTable[R11G11B10_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R11G11B10_FLOAT>::StoreClear; \
230 sStoreTilesClearColorTable[R32_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32_SINT>::StoreClear; \
231 sStoreTilesClearColorTable[R32_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32_UINT>::StoreClear; \
232 sStoreTilesClearColorTable[R32_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R32_FLOAT>::StoreClear; \
233 sStoreTilesClearColorTable[A32_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, A32_FLOAT>::StoreClear; \
234 sStoreTilesClearColorTable[B8G8R8X8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B8G8R8X8_UNORM>::StoreClear; \
235 sStoreTilesClearColorTable[B8G8R8X8_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B8G8R8X8_UNORM_SRGB>::StoreClear; \
236 sStoreTilesClearColorTable[R8G8B8X8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8X8_UNORM>::StoreClear; \
237 sStoreTilesClearColorTable[R8G8B8X8_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8X8_UNORM_SRGB>::StoreClear; \
238 sStoreTilesClearColorTable[B10G10R10X2_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B10G10R10X2_UNORM>::StoreClear; \
239 sStoreTilesClearColorTable[B5G6R5_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B5G6R5_UNORM>::StoreClear; \
240 sStoreTilesClearColorTable[B5G6R5_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B5G6R5_UNORM_SRGB>::StoreClear; \
241 sStoreTilesClearColorTable[B5G5R5A1_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B5G5R5A1_UNORM>::StoreClear; \
242 sStoreTilesClearColorTable[B5G5R5A1_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B5G5R5A1_UNORM_SRGB>::StoreClear; \
243 sStoreTilesClearColorTable[B4G4R4A4_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B4G4R4A4_UNORM>::StoreClear; \
244 sStoreTilesClearColorTable[B4G4R4A4_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B4G4R4A4_UNORM_SRGB>::StoreClear; \
245 sStoreTilesClearColorTable[R8G8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8_UNORM>::StoreClear; \
246 sStoreTilesClearColorTable[R8G8_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8_SNORM>::StoreClear; \
247 sStoreTilesClearColorTable[R8G8_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8_SINT>::StoreClear; \
248 sStoreTilesClearColorTable[R8G8_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8_UINT>::StoreClear; \
249 sStoreTilesClearColorTable[R16_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16_UNORM>::StoreClear; \
250 sStoreTilesClearColorTable[R16_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16_SNORM>::StoreClear; \
251 sStoreTilesClearColorTable[R16_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16_SINT>::StoreClear; \
252 sStoreTilesClearColorTable[R16_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16_UINT>::StoreClear; \
253 sStoreTilesClearColorTable[R16_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16_FLOAT>::StoreClear; \
254 sStoreTilesClearColorTable[A16_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, A16_UNORM>::StoreClear; \
255 sStoreTilesClearColorTable[A16_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, A16_FLOAT>::StoreClear; \
256 sStoreTilesClearColorTable[B5G5R5X1_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B5G5R5X1_UNORM>::StoreClear; \
257 sStoreTilesClearColorTable[B5G5R5X1_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, B5G5R5X1_UNORM_SRGB>::StoreClear; \
258 sStoreTilesClearColorTable[R8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8_UNORM>::StoreClear; \
259 sStoreTilesClearColorTable[R8_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8_SNORM>::StoreClear; \
260 sStoreTilesClearColorTable[R8_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8_SINT>::StoreClear; \
261 sStoreTilesClearColorTable[R8_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8_UINT>::StoreClear; \
262 sStoreTilesClearColorTable[A8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, A8_UNORM>::StoreClear; \
263 sStoreTilesClearColorTable[BC1_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC1_UNORM>::StoreClear; \
264 sStoreTilesClearColorTable[BC2_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC2_UNORM>::StoreClear; \
265 sStoreTilesClearColorTable[BC3_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC3_UNORM>::StoreClear; \
266 sStoreTilesClearColorTable[BC4_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC4_UNORM>::StoreClear; \
267 sStoreTilesClearColorTable[BC5_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC5_UNORM>::StoreClear; \
268 sStoreTilesClearColorTable[BC1_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC1_UNORM_SRGB>::StoreClear; \
269 sStoreTilesClearColorTable[BC2_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC2_UNORM_SRGB>::StoreClear; \
270 sStoreTilesClearColorTable[BC3_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC3_UNORM_SRGB>::StoreClear; \
271 sStoreTilesClearColorTable[R8G8B8_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8_UNORM>::StoreClear; \
272 sStoreTilesClearColorTable[R8G8B8_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8_SNORM>::StoreClear; \
273 sStoreTilesClearColorTable[BC4_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC4_SNORM>::StoreClear; \
274 sStoreTilesClearColorTable[BC5_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, BC5_SNORM>::StoreClear; \
275 sStoreTilesClearColorTable[R16G16B16_FLOAT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16_FLOAT>::StoreClear; \
276 sStoreTilesClearColorTable[R16G16B16_UNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16_UNORM>::StoreClear; \
277 sStoreTilesClearColorTable[R16G16B16_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16_SNORM>::StoreClear; \
278 sStoreTilesClearColorTable[R8G8B8_UNORM_SRGB] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8_UNORM_SRGB>::StoreClear; \
279 sStoreTilesClearColorTable[R16G16B16_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16_UINT>::StoreClear; \
280 sStoreTilesClearColorTable[R16G16B16_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R16G16B16_SINT>::StoreClear; \
281 sStoreTilesClearColorTable[R10G10B10A2_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, R10G10B10A2_SNORM>::StoreClear; \
282 sStoreTilesClearColorTable[R10G10B10A2_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R10G10B10A2_SINT>::StoreClear; \
283 sStoreTilesClearColorTable[B10G10R10A2_SNORM] = StoreMacroTileClear<R32G32B32A32_FLOAT, B10G10R10A2_SNORM>::StoreClear; \
284 sStoreTilesClearColorTable[B10G10R10A2_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, B10G10R10A2_UINT>::StoreClear; \
285 sStoreTilesClearColorTable[B10G10R10A2_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, B10G10R10A2_SINT>::StoreClear; \
286 sStoreTilesClearColorTable[R8G8B8_UINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8_UINT>::StoreClear; \
287 sStoreTilesClearColorTable[R8G8B8_SINT] = StoreMacroTileClear<R32G32B32A32_FLOAT, R8G8B8_SINT>::StoreClear;
289 //////////////////////////////////////////////////////////////////////////
290 /// INIT_STORE_TILES_TABLE - Helper macro for setting up the tables.
291 #define INIT_STORE_TILES_CLEAR_DEPTH_TABLE() \
292 memset(sStoreTilesClearDepthTable, 0, sizeof(sStoreTilesClearDepthTable)); \
294 sStoreTilesClearDepthTable[R32_FLOAT] = StoreMacroTileClear<R32_FLOAT, R32_FLOAT>::StoreClear; \
295 sStoreTilesClearDepthTable[R32_FLOAT_X8X24_TYPELESS] = StoreMacroTileClear<R32_FLOAT, R32_FLOAT_X8X24_TYPELESS>::StoreClear; \
296 sStoreTilesClearDepthTable[R24_UNORM_X8_TYPELESS] = StoreMacroTileClear<R32_FLOAT, R24_UNORM_X8_TYPELESS>::StoreClear; \
297 sStoreTilesClearDepthTable[R16_UNORM] = StoreMacroTileClear<R32_FLOAT, R16_UNORM>::StoreClear;
299 //////////////////////////////////////////////////////////////////////////
300 /// @brief Sets up tables for ClearTile
301 void InitSimClearTilesTable()
303 INIT_STORE_TILES_CLEAR_COLOR_TABLE();
304 INIT_STORE_TILES_CLEAR_DEPTH_TABLE();