1/****************************************************************************
2 * Copyright (C) 2015 Intel Corporation.   All Rights Reserved.
3 *
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:
10 *
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
13 * Software.
14 *
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
21 * IN THE SOFTWARE.
22 ***************************************************************************/
23
24#pragma once
25
26void LoadHotTile(
27    const SWR_SURFACE_STATE *pSrcSurface,
28    SWR_FORMAT dstFormat,
29    SWR_RENDERTARGET_ATTACHMENT renderTargetIndex,
30    UINT x, UINT y, uint32_t renderTargetArrayIndex,
31    uint8_t *pDstHotTile);
32
33void StoreHotTileToSurface(
34    SWR_SURFACE_STATE *pDstSurface,
35    SWR_FORMAT srcFormat,
36    SWR_RENDERTARGET_ATTACHMENT renderTargetIndex,
37    UINT x, UINT y, uint32_t renderTargetArrayIndex,
38    uint8_t *pSrcHotTile);
39
40void StoreHotTileClear(
41    SWR_SURFACE_STATE *pDstSurface,
42    SWR_RENDERTARGET_ATTACHMENT renderTargetIndex,
43    UINT x,
44    UINT y,
45    uint32_t renderTargetArrayIndex,
46    const float* pClearColor);
47
48INLINE void
49swr_LoadHotTile(HANDLE hPrivateContext,
50                SWR_FORMAT dstFormat,
51                SWR_RENDERTARGET_ATTACHMENT renderTargetIndex,
52                UINT x, UINT y,
53                uint32_t renderTargetArrayIndex, uint8_t* pDstHotTile)
54{
55   // Grab source surface state from private context
56   swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
57   SWR_SURFACE_STATE *pSrcSurface = &pDC->renderTargets[renderTargetIndex];
58
59   LoadHotTile(pSrcSurface, dstFormat, renderTargetIndex, x, y, renderTargetArrayIndex, pDstHotTile);
60}
61
62INLINE void
63swr_StoreHotTile(HANDLE hPrivateContext,
64                 SWR_FORMAT srcFormat,
65                 SWR_RENDERTARGET_ATTACHMENT renderTargetIndex,
66                 UINT x, UINT y,
67                 uint32_t renderTargetArrayIndex, uint8_t* pSrcHotTile)
68{
69   // Grab destination surface state from private context
70   swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
71   SWR_SURFACE_STATE *pDstSurface = &pDC->renderTargets[renderTargetIndex];
72
73   StoreHotTileToSurface(pDstSurface, srcFormat, renderTargetIndex, x, y, renderTargetArrayIndex, pSrcHotTile);
74}
75
76INLINE void
77swr_StoreHotTileClear(HANDLE hPrivateContext,
78                      SWR_RENDERTARGET_ATTACHMENT renderTargetIndex,
79                      UINT x,
80                      UINT y,
81                      uint32_t renderTargetArrayIndex,
82                      const float* pClearColor)
83{
84   // Grab destination surface state from private context
85   swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
86   SWR_SURFACE_STATE *pDstSurface = &pDC->renderTargets[renderTargetIndex];
87
88   StoreHotTileClear(pDstSurface, renderTargetIndex, x, y, renderTargetArrayIndex, pClearColor);
89}
90
91void InitSimLoadTilesTable();
92void InitSimStoreTilesTable();
93void InitSimClearTilesTable();
94
95/* Init Load/Store/ClearTiles Tables */
96INLINE void swr_InitMemoryModule()
97{
98   InitSimLoadTilesTable();
99   InitSimStoreTilesTable();
100   InitSimClearTilesTable();
101}
102