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