xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/d3d10umd/DxgiFns.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /**************************************************************************
2*61046927SAndroid Build Coastguard Worker  *
3*61046927SAndroid Build Coastguard Worker  * Copyright 2012-2021 VMware, Inc.
4*61046927SAndroid Build Coastguard Worker  * All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker  *
6*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
7*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the
8*61046927SAndroid Build Coastguard Worker  * "Software"), to deal in the Software without restriction, including
9*61046927SAndroid Build Coastguard Worker  * without limitation the rights to use, copy, modify, merge, publish,
10*61046927SAndroid Build Coastguard Worker  * distribute, sub license, and/or sell copies of the Software, and to
11*61046927SAndroid Build Coastguard Worker  * permit persons to whom the Software is furnished to do so, subject to
12*61046927SAndroid Build Coastguard Worker  * the following conditions:
13*61046927SAndroid Build Coastguard Worker  *
14*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
17*61046927SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
18*61046927SAndroid Build Coastguard Worker  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19*61046927SAndroid Build Coastguard Worker  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20*61046927SAndroid Build Coastguard Worker  * USE OR OTHER DEALINGS IN THE SOFTWARE.
21*61046927SAndroid Build Coastguard Worker  *
22*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the
23*61046927SAndroid Build Coastguard Worker  * next paragraph) shall be included in all copies or substantial portions
24*61046927SAndroid Build Coastguard Worker  * of the Software.
25*61046927SAndroid Build Coastguard Worker  *
26*61046927SAndroid Build Coastguard Worker  **************************************************************************/
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker /*
29*61046927SAndroid Build Coastguard Worker  * DxgiFns.cpp --
30*61046927SAndroid Build Coastguard Worker  *    DXGI related functions.
31*61046927SAndroid Build Coastguard Worker  */
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker #include <stdio.h>
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker #include "DxgiFns.h"
36*61046927SAndroid Build Coastguard Worker #include "Format.h"
37*61046927SAndroid Build Coastguard Worker #include "State.h"
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker #include "Debug.h"
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker #include "util/format/u_format.h"
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker /*
45*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
46*61046927SAndroid Build Coastguard Worker  *
47*61046927SAndroid Build Coastguard Worker  * _Present --
48*61046927SAndroid Build Coastguard Worker  *
49*61046927SAndroid Build Coastguard Worker  *    This is turned into kernel callbacks rather than directly emitted
50*61046927SAndroid Build Coastguard Worker  *    as fifo packets.
51*61046927SAndroid Build Coastguard Worker  *
52*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
53*61046927SAndroid Build Coastguard Worker  */
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_Present(DXGI_DDI_ARG_PRESENT * pPresentData)56*61046927SAndroid Build Coastguard Worker _Present(DXGI_DDI_ARG_PRESENT *pPresentData)
57*61046927SAndroid Build Coastguard Worker {
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker    LOG_ENTRYPOINT();
60*61046927SAndroid Build Coastguard Worker 
61*61046927SAndroid Build Coastguard Worker    struct Device *device = CastDevice(pPresentData->hDevice);
62*61046927SAndroid Build Coastguard Worker    Resource *pSrcResource = CastResource(pPresentData->hSurfaceToPresent);
63*61046927SAndroid Build Coastguard Worker 
64*61046927SAndroid Build Coastguard Worker    device->pipe->screen->flush_frontbuffer(device->pipe->screen, device->pipe,
65*61046927SAndroid Build Coastguard Worker       pSrcResource->resource, 0, 0, pPresentData->pDXGIContext, 0, NULL);
66*61046927SAndroid Build Coastguard Worker 
67*61046927SAndroid Build Coastguard Worker    return S_OK;
68*61046927SAndroid Build Coastguard Worker }
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker /*
72*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
73*61046927SAndroid Build Coastguard Worker  *
74*61046927SAndroid Build Coastguard Worker  * _GetGammaCaps --
75*61046927SAndroid Build Coastguard Worker  *
76*61046927SAndroid Build Coastguard Worker  *    Return gamma capabilities.
77*61046927SAndroid Build Coastguard Worker  *
78*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
79*61046927SAndroid Build Coastguard Worker  */
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_GetGammaCaps(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS * GetCaps)82*61046927SAndroid Build Coastguard Worker _GetGammaCaps( DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *GetCaps )
83*61046927SAndroid Build Coastguard Worker {
84*61046927SAndroid Build Coastguard Worker    LOG_ENTRYPOINT();
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker    DXGI_GAMMA_CONTROL_CAPABILITIES *pCaps;
87*61046927SAndroid Build Coastguard Worker 
88*61046927SAndroid Build Coastguard Worker    pCaps = GetCaps->pGammaCapabilities;
89*61046927SAndroid Build Coastguard Worker 
90*61046927SAndroid Build Coastguard Worker    pCaps->ScaleAndOffsetSupported = false;
91*61046927SAndroid Build Coastguard Worker    pCaps->MinConvertedValue = 0.0;
92*61046927SAndroid Build Coastguard Worker    pCaps->MaxConvertedValue = 1.0;
93*61046927SAndroid Build Coastguard Worker    pCaps->NumGammaControlPoints = 17;
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker    for (UINT i = 0; i < pCaps->NumGammaControlPoints; i++) {
96*61046927SAndroid Build Coastguard Worker       pCaps->ControlPointPositions[i] = (float)i / (float)(pCaps->NumGammaControlPoints - 1);
97*61046927SAndroid Build Coastguard Worker    }
98*61046927SAndroid Build Coastguard Worker 
99*61046927SAndroid Build Coastguard Worker    return S_OK;
100*61046927SAndroid Build Coastguard Worker }
101*61046927SAndroid Build Coastguard Worker 
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker /*
104*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
105*61046927SAndroid Build Coastguard Worker  *
106*61046927SAndroid Build Coastguard Worker  * _SetDisplayMode --
107*61046927SAndroid Build Coastguard Worker  *
108*61046927SAndroid Build Coastguard Worker  *    Set the resource that is used to scan out to the display.
109*61046927SAndroid Build Coastguard Worker  *
110*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
111*61046927SAndroid Build Coastguard Worker  */
112*61046927SAndroid Build Coastguard Worker 
113*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_SetDisplayMode(DXGI_DDI_ARG_SETDISPLAYMODE * SetDisplayMode)114*61046927SAndroid Build Coastguard Worker _SetDisplayMode( DXGI_DDI_ARG_SETDISPLAYMODE *SetDisplayMode )
115*61046927SAndroid Build Coastguard Worker {
116*61046927SAndroid Build Coastguard Worker    LOG_UNSUPPORTED_ENTRYPOINT();
117*61046927SAndroid Build Coastguard Worker 
118*61046927SAndroid Build Coastguard Worker    return S_OK;
119*61046927SAndroid Build Coastguard Worker }
120*61046927SAndroid Build Coastguard Worker 
121*61046927SAndroid Build Coastguard Worker 
122*61046927SAndroid Build Coastguard Worker /*
123*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
124*61046927SAndroid Build Coastguard Worker  *
125*61046927SAndroid Build Coastguard Worker  * _SetResourcePriority --
126*61046927SAndroid Build Coastguard Worker  *
127*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
128*61046927SAndroid Build Coastguard Worker  */
129*61046927SAndroid Build Coastguard Worker 
130*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_SetResourcePriority(DXGI_DDI_ARG_SETRESOURCEPRIORITY * SetResourcePriority)131*61046927SAndroid Build Coastguard Worker _SetResourcePriority( DXGI_DDI_ARG_SETRESOURCEPRIORITY *SetResourcePriority )
132*61046927SAndroid Build Coastguard Worker {
133*61046927SAndroid Build Coastguard Worker    LOG_ENTRYPOINT();
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker    /* ignore */
136*61046927SAndroid Build Coastguard Worker 
137*61046927SAndroid Build Coastguard Worker    return S_OK;
138*61046927SAndroid Build Coastguard Worker }
139*61046927SAndroid Build Coastguard Worker 
140*61046927SAndroid Build Coastguard Worker 
141*61046927SAndroid Build Coastguard Worker /*
142*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
143*61046927SAndroid Build Coastguard Worker  *
144*61046927SAndroid Build Coastguard Worker  * _QueryResourceResidency --
145*61046927SAndroid Build Coastguard Worker  *
146*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
147*61046927SAndroid Build Coastguard Worker  */
148*61046927SAndroid Build Coastguard Worker 
149*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_QueryResourceResidency(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY * QueryResourceResidency)150*61046927SAndroid Build Coastguard Worker _QueryResourceResidency( DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *QueryResourceResidency )
151*61046927SAndroid Build Coastguard Worker {
152*61046927SAndroid Build Coastguard Worker    LOG_ENTRYPOINT();
153*61046927SAndroid Build Coastguard Worker 
154*61046927SAndroid Build Coastguard Worker    for (UINT i = 0; i < QueryResourceResidency->Resources; ++i) {
155*61046927SAndroid Build Coastguard Worker       QueryResourceResidency->pStatus[i] = DXGI_DDI_RESIDENCY_FULLY_RESIDENT;
156*61046927SAndroid Build Coastguard Worker    }
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker    return S_OK;
159*61046927SAndroid Build Coastguard Worker }
160*61046927SAndroid Build Coastguard Worker 
161*61046927SAndroid Build Coastguard Worker 
162*61046927SAndroid Build Coastguard Worker /*
163*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
164*61046927SAndroid Build Coastguard Worker  *
165*61046927SAndroid Build Coastguard Worker  * _RotateResourceIdentities --
166*61046927SAndroid Build Coastguard Worker  *
167*61046927SAndroid Build Coastguard Worker  *    Rotate a list of resources by recreating their views with
168*61046927SAndroid Build Coastguard Worker  *    the updated rotations.
169*61046927SAndroid Build Coastguard Worker  *
170*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
171*61046927SAndroid Build Coastguard Worker  */
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_RotateResourceIdentities(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES * RotateResourceIdentities)174*61046927SAndroid Build Coastguard Worker _RotateResourceIdentities( DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *RotateResourceIdentities )
175*61046927SAndroid Build Coastguard Worker {
176*61046927SAndroid Build Coastguard Worker    LOG_ENTRYPOINT();
177*61046927SAndroid Build Coastguard Worker 
178*61046927SAndroid Build Coastguard Worker    if (RotateResourceIdentities->Resources <= 1) {
179*61046927SAndroid Build Coastguard Worker       return S_OK;
180*61046927SAndroid Build Coastguard Worker    }
181*61046927SAndroid Build Coastguard Worker 
182*61046927SAndroid Build Coastguard Worker    struct pipe_context *pipe = CastPipeDevice(RotateResourceIdentities->hDevice);
183*61046927SAndroid Build Coastguard Worker    struct pipe_screen *screen = pipe->screen;
184*61046927SAndroid Build Coastguard Worker 
185*61046927SAndroid Build Coastguard Worker    struct pipe_resource *resource0 = CastPipeResource(RotateResourceIdentities->pResources[0]);
186*61046927SAndroid Build Coastguard Worker 
187*61046927SAndroid Build Coastguard Worker    assert(resource0);
188*61046927SAndroid Build Coastguard Worker    LOG_UNSUPPORTED(resource0->last_level);
189*61046927SAndroid Build Coastguard Worker 
190*61046927SAndroid Build Coastguard Worker    /*
191*61046927SAndroid Build Coastguard Worker     * XXX: Copying is not very efficient, but it is much simpler than the
192*61046927SAndroid Build Coastguard Worker     * alternative of recreating all views.
193*61046927SAndroid Build Coastguard Worker     */
194*61046927SAndroid Build Coastguard Worker 
195*61046927SAndroid Build Coastguard Worker    struct pipe_resource *temp_resource;
196*61046927SAndroid Build Coastguard Worker    temp_resource = screen->resource_create(screen, resource0);
197*61046927SAndroid Build Coastguard Worker    assert(temp_resource);
198*61046927SAndroid Build Coastguard Worker    if (!temp_resource) {
199*61046927SAndroid Build Coastguard Worker       return E_OUTOFMEMORY;
200*61046927SAndroid Build Coastguard Worker    }
201*61046927SAndroid Build Coastguard Worker 
202*61046927SAndroid Build Coastguard Worker    struct pipe_box src_box;
203*61046927SAndroid Build Coastguard Worker    src_box.x = 0;
204*61046927SAndroid Build Coastguard Worker    src_box.y = 0;
205*61046927SAndroid Build Coastguard Worker    src_box.z = 0;
206*61046927SAndroid Build Coastguard Worker    src_box.width  = resource0->width0;
207*61046927SAndroid Build Coastguard Worker    src_box.height = resource0->height0;
208*61046927SAndroid Build Coastguard Worker    src_box.depth  = resource0->depth0;
209*61046927SAndroid Build Coastguard Worker 
210*61046927SAndroid Build Coastguard Worker    for (UINT i = 0; i < RotateResourceIdentities->Resources + 1; ++i) {
211*61046927SAndroid Build Coastguard Worker       struct pipe_resource *src_resource;
212*61046927SAndroid Build Coastguard Worker       struct pipe_resource *dst_resource;
213*61046927SAndroid Build Coastguard Worker 
214*61046927SAndroid Build Coastguard Worker       if (i < RotateResourceIdentities->Resources) {
215*61046927SAndroid Build Coastguard Worker          src_resource = CastPipeResource(RotateResourceIdentities->pResources[i]);
216*61046927SAndroid Build Coastguard Worker       } else {
217*61046927SAndroid Build Coastguard Worker          src_resource = temp_resource;
218*61046927SAndroid Build Coastguard Worker       }
219*61046927SAndroid Build Coastguard Worker 
220*61046927SAndroid Build Coastguard Worker       if (i > 0) {
221*61046927SAndroid Build Coastguard Worker          dst_resource = CastPipeResource(RotateResourceIdentities->pResources[i - 1]);
222*61046927SAndroid Build Coastguard Worker       } else {
223*61046927SAndroid Build Coastguard Worker          dst_resource = temp_resource;
224*61046927SAndroid Build Coastguard Worker       }
225*61046927SAndroid Build Coastguard Worker 
226*61046927SAndroid Build Coastguard Worker       assert(dst_resource);
227*61046927SAndroid Build Coastguard Worker       assert(src_resource);
228*61046927SAndroid Build Coastguard Worker 
229*61046927SAndroid Build Coastguard Worker       pipe->resource_copy_region(pipe,
230*61046927SAndroid Build Coastguard Worker                                  dst_resource,
231*61046927SAndroid Build Coastguard Worker                                  0, // dst_level
232*61046927SAndroid Build Coastguard Worker                                  0, 0, 0, // dst_x,y,z
233*61046927SAndroid Build Coastguard Worker                                  src_resource,
234*61046927SAndroid Build Coastguard Worker                                  0, // src_level
235*61046927SAndroid Build Coastguard Worker                                  &src_box);
236*61046927SAndroid Build Coastguard Worker    }
237*61046927SAndroid Build Coastguard Worker 
238*61046927SAndroid Build Coastguard Worker    pipe_resource_reference(&temp_resource, NULL);
239*61046927SAndroid Build Coastguard Worker 
240*61046927SAndroid Build Coastguard Worker    return S_OK;
241*61046927SAndroid Build Coastguard Worker }
242*61046927SAndroid Build Coastguard Worker 
243*61046927SAndroid Build Coastguard Worker 
244*61046927SAndroid Build Coastguard Worker /*
245*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
246*61046927SAndroid Build Coastguard Worker  *
247*61046927SAndroid Build Coastguard Worker  * _Blt --
248*61046927SAndroid Build Coastguard Worker  *
249*61046927SAndroid Build Coastguard Worker  *    Do a blt between two subresources. Apply MSAA resolve, format
250*61046927SAndroid Build Coastguard Worker  *    conversion and stretching.
251*61046927SAndroid Build Coastguard Worker  *
252*61046927SAndroid Build Coastguard Worker  * ----------------------------------------------------------------------
253*61046927SAndroid Build Coastguard Worker  */
254*61046927SAndroid Build Coastguard Worker 
255*61046927SAndroid Build Coastguard Worker HRESULT APIENTRY
_Blt(DXGI_DDI_ARG_BLT * Blt)256*61046927SAndroid Build Coastguard Worker _Blt(DXGI_DDI_ARG_BLT *Blt)
257*61046927SAndroid Build Coastguard Worker {
258*61046927SAndroid Build Coastguard Worker    LOG_UNSUPPORTED_ENTRYPOINT();
259*61046927SAndroid Build Coastguard Worker 
260*61046927SAndroid Build Coastguard Worker    return S_OK;
261*61046927SAndroid Build Coastguard Worker }
262