1 /**************************************************************************
2  *
3  * Copyright 2012-2021 VMware, Inc.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sub license, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
18  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20  * USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * The above copyright notice and this permission notice (including the
23  * next paragraph) shall be included in all copies or substantial portions
24  * of the Software.
25  *
26  **************************************************************************/
27 
28 /*
29  * D3DKMT.cpp --
30  *    Implement kernel mode thunks, so that this can be loaded as a
31  *    software DLL (D3D_DRIVER_TYPE_SOFTWARE).
32  */
33 
34 
35 #include "DriverIncludes.h"
36 
37 #include "Debug.h"
38 
39 
40 #ifndef STATUS_NOT_IMPLEMENTED
41 #define STATUS_NOT_IMPLEMENTED 0xC0000002
42 #endif
43 
44 
45 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateAllocation(D3DKMT_CREATEALLOCATION * pData)46 D3DKMTCreateAllocation(D3DKMT_CREATEALLOCATION *pData)
47 {
48    LOG_UNSUPPORTED_ENTRYPOINT();
49    return STATUS_NOT_IMPLEMENTED;
50 }
51 
52 
53 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateAllocation2(D3DKMT_CREATEALLOCATION * pData)54 D3DKMTCreateAllocation2(D3DKMT_CREATEALLOCATION *pData)
55 {
56    LOG_UNSUPPORTED_ENTRYPOINT();
57    return STATUS_NOT_IMPLEMENTED;
58 }
59 
60 
61 EXTERN_C NTSTATUS APIENTRY
D3DKMTQueryResourceInfo(D3DKMT_QUERYRESOURCEINFO * pData)62 D3DKMTQueryResourceInfo(D3DKMT_QUERYRESOURCEINFO *pData)
63 {
64    LOG_UNSUPPORTED_ENTRYPOINT();
65    return STATUS_NOT_IMPLEMENTED;
66 }
67 
68 
69 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenResource(D3DKMT_OPENRESOURCE * pData)70 D3DKMTOpenResource(D3DKMT_OPENRESOURCE *pData)
71 {
72    LOG_UNSUPPORTED_ENTRYPOINT();
73    return STATUS_NOT_IMPLEMENTED;
74 }
75 
76 
77 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenResource2(D3DKMT_OPENRESOURCE * pData)78 D3DKMTOpenResource2(D3DKMT_OPENRESOURCE *pData)
79 {
80    LOG_UNSUPPORTED_ENTRYPOINT();
81    return STATUS_NOT_IMPLEMENTED;
82 }
83 
84 
85 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroyAllocation(CONST D3DKMT_DESTROYALLOCATION * pData)86 D3DKMTDestroyAllocation(CONST D3DKMT_DESTROYALLOCATION *pData)
87 {
88    LOG_UNSUPPORTED_ENTRYPOINT();
89    return STATUS_NOT_IMPLEMENTED;
90 }
91 
92 
93 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetAllocationPriority(CONST D3DKMT_SETALLOCATIONPRIORITY * pData)94 D3DKMTSetAllocationPriority(CONST D3DKMT_SETALLOCATIONPRIORITY *pData)
95 {
96    LOG_UNSUPPORTED_ENTRYPOINT();
97    return STATUS_NOT_IMPLEMENTED;
98 }
99 
100 
101 EXTERN_C NTSTATUS APIENTRY
D3DKMTQueryAllocationResidency(CONST D3DKMT_QUERYALLOCATIONRESIDENCY * pData)102 D3DKMTQueryAllocationResidency(CONST D3DKMT_QUERYALLOCATIONRESIDENCY *pData)
103 {
104    LOG_UNSUPPORTED_ENTRYPOINT();
105    return STATUS_NOT_IMPLEMENTED;
106 }
107 
108 
109 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateDevice(D3DKMT_CREATEDEVICE * pData)110 D3DKMTCreateDevice(D3DKMT_CREATEDEVICE *pData)
111 {
112    LOG_ENTRYPOINT();
113    pData->hDevice = 1;
114    return STATUS_SUCCESS;
115 }
116 
117 
118 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroyDevice(CONST D3DKMT_DESTROYDEVICE * pData)119 D3DKMTDestroyDevice(CONST D3DKMT_DESTROYDEVICE *pData)
120 {
121    LOG_ENTRYPOINT();
122    return STATUS_SUCCESS;
123 }
124 
125 
126 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateContext(D3DKMT_CREATECONTEXT * pData)127 D3DKMTCreateContext(D3DKMT_CREATECONTEXT *pData)
128 {
129    LOG_UNSUPPORTED_ENTRYPOINT();
130    return STATUS_NOT_IMPLEMENTED;
131 }
132 
133 
134 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroyContext(CONST D3DKMT_DESTROYCONTEXT * pData)135 D3DKMTDestroyContext(CONST D3DKMT_DESTROYCONTEXT *pData)
136 {
137    LOG_UNSUPPORTED_ENTRYPOINT();
138    return STATUS_NOT_IMPLEMENTED;
139 }
140 
141 
142 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateSynchronizationObject(D3DKMT_CREATESYNCHRONIZATIONOBJECT * pData)143 D3DKMTCreateSynchronizationObject(D3DKMT_CREATESYNCHRONIZATIONOBJECT *pData)
144 {
145    LOG_UNSUPPORTED_ENTRYPOINT();
146    return STATUS_NOT_IMPLEMENTED;
147 }
148 
149 
150 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateSynchronizationObject2(D3DKMT_CREATESYNCHRONIZATIONOBJECT2 * pData)151 D3DKMTCreateSynchronizationObject2(D3DKMT_CREATESYNCHRONIZATIONOBJECT2 *pData)
152 {
153    LOG_UNSUPPORTED_ENTRYPOINT();
154    return STATUS_NOT_IMPLEMENTED;
155 }
156 
157 
158 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenSynchronizationObject(D3DKMT_OPENSYNCHRONIZATIONOBJECT * pData)159 D3DKMTOpenSynchronizationObject(D3DKMT_OPENSYNCHRONIZATIONOBJECT *pData)
160 {
161    LOG_UNSUPPORTED_ENTRYPOINT();
162    return STATUS_NOT_IMPLEMENTED;
163 }
164 
165 
166 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroySynchronizationObject(CONST D3DKMT_DESTROYSYNCHRONIZATIONOBJECT * pData)167 D3DKMTDestroySynchronizationObject(CONST D3DKMT_DESTROYSYNCHRONIZATIONOBJECT *pData)
168 {
169    LOG_UNSUPPORTED_ENTRYPOINT();
170    return STATUS_NOT_IMPLEMENTED;
171 }
172 
173 
174 EXTERN_C NTSTATUS APIENTRY
D3DKMTWaitForSynchronizationObject(CONST D3DKMT_WAITFORSYNCHRONIZATIONOBJECT * pData)175 D3DKMTWaitForSynchronizationObject(CONST D3DKMT_WAITFORSYNCHRONIZATIONOBJECT *pData)
176 {
177    LOG_UNSUPPORTED_ENTRYPOINT();
178    return STATUS_NOT_IMPLEMENTED;
179 }
180 
181 
182 EXTERN_C NTSTATUS APIENTRY
D3DKMTWaitForSynchronizationObject2(CONST D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2 * pData)183 D3DKMTWaitForSynchronizationObject2(CONST D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2 *pData)
184 {
185    LOG_UNSUPPORTED_ENTRYPOINT();
186    return STATUS_NOT_IMPLEMENTED;
187 }
188 
189 
190 EXTERN_C NTSTATUS APIENTRY
D3DKMTSignalSynchronizationObject(CONST D3DKMT_SIGNALSYNCHRONIZATIONOBJECT * pData)191 D3DKMTSignalSynchronizationObject(CONST D3DKMT_SIGNALSYNCHRONIZATIONOBJECT *pData)
192 {
193    LOG_UNSUPPORTED_ENTRYPOINT();
194    return STATUS_NOT_IMPLEMENTED;
195 }
196 
197 
198 EXTERN_C NTSTATUS APIENTRY
D3DKMTSignalSynchronizationObject2(CONST D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2 * pData)199 D3DKMTSignalSynchronizationObject2(CONST D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2 *pData)
200 {
201    LOG_UNSUPPORTED_ENTRYPOINT();
202    return STATUS_NOT_IMPLEMENTED;
203 }
204 
205 
206 EXTERN_C NTSTATUS APIENTRY
D3DKMTLock(D3DKMT_LOCK * pData)207 D3DKMTLock(D3DKMT_LOCK *pData)
208 {
209    LOG_UNSUPPORTED_ENTRYPOINT();
210    return STATUS_NOT_IMPLEMENTED;
211 }
212 
213 
214 EXTERN_C NTSTATUS APIENTRY
D3DKMTUnlock(CONST D3DKMT_UNLOCK * pData)215 D3DKMTUnlock(CONST D3DKMT_UNLOCK *pData)
216 {
217    LOG_UNSUPPORTED_ENTRYPOINT();
218    return STATUS_NOT_IMPLEMENTED;
219 }
220 
221 
222 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetDisplayModeList(D3DKMT_GETDISPLAYMODELIST * pData)223 D3DKMTGetDisplayModeList(D3DKMT_GETDISPLAYMODELIST *pData)
224 {
225    LOG_UNSUPPORTED_ENTRYPOINT();
226    return STATUS_NOT_IMPLEMENTED;
227 }
228 
229 
230 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetDisplayMode(CONST D3DKMT_SETDISPLAYMODE * pData)231 D3DKMTSetDisplayMode(CONST D3DKMT_SETDISPLAYMODE *pData)
232 {
233    LOG_UNSUPPORTED_ENTRYPOINT();
234    return STATUS_NOT_IMPLEMENTED;
235 }
236 
237 
238 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetMultisampleMethodList(D3DKMT_GETMULTISAMPLEMETHODLIST * pData)239 D3DKMTGetMultisampleMethodList(D3DKMT_GETMULTISAMPLEMETHODLIST *pData)
240 {
241    LOG_UNSUPPORTED_ENTRYPOINT();
242    return STATUS_NOT_IMPLEMENTED;
243 }
244 
245 
246 EXTERN_C NTSTATUS APIENTRY
D3DKMTPresent(CONST D3DKMT_PRESENT * pData)247 D3DKMTPresent(CONST D3DKMT_PRESENT *pData)
248 {
249    LOG_UNSUPPORTED_ENTRYPOINT();
250    return STATUS_NOT_IMPLEMENTED;
251 }
252 
253 
254 EXTERN_C NTSTATUS APIENTRY
D3DKMTRender(D3DKMT_RENDER * pData)255 D3DKMTRender(D3DKMT_RENDER *pData)
256 {
257    LOG_UNSUPPORTED_ENTRYPOINT();
258    return STATUS_NOT_IMPLEMENTED;
259 }
260 
261 
262 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetRuntimeData(CONST D3DKMT_GETRUNTIMEDATA * pData)263 D3DKMTGetRuntimeData(CONST D3DKMT_GETRUNTIMEDATA *pData)
264 {
265    LOG_UNSUPPORTED_ENTRYPOINT();
266    return STATUS_NOT_IMPLEMENTED;
267 }
268 
269 
270 EXTERN_C NTSTATUS APIENTRY
D3DKMTQueryAdapterInfo(CONST D3DKMT_QUERYADAPTERINFO * pData)271 D3DKMTQueryAdapterInfo(CONST D3DKMT_QUERYADAPTERINFO *pData)
272 {
273    LOG_ENTRYPOINT();
274 
275    switch (pData->Type) {
276    case KMTQAITYPE_UMDRIVERNAME:
277       {
278          D3DKMT_UMDFILENAMEINFO *pResult =
279                (D3DKMT_UMDFILENAMEINFO *)pData->pPrivateDriverData;
280          if (pResult->Version != KMTUMDVERSION_DX10 &&
281              pResult->Version != KMTUMDVERSION_DX11) {
282          DebugPrintf("%s: unsupported UMD version (%u)\n",
283                      __FUNCTION__, pResult->Version);
284             return STATUS_INVALID_PARAMETER;
285          }
286          HMODULE hModule = 0;
287          BOOL bRet;
288          DWORD dwRet;
289          bRet = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
290                                   (LPCTSTR)D3DKMTQueryAdapterInfo,
291                                   &hModule);
292          assert(bRet);
293          dwRet = GetModuleFileNameW(hModule, pResult->UmdFileName, MAX_PATH);
294          assert(dwRet);
295          return STATUS_SUCCESS;
296       }
297       break;
298    case KMTQAITYPE_GETSEGMENTSIZE:
299       {
300          D3DKMT_SEGMENTSIZEINFO *pResult =
301                (D3DKMT_SEGMENTSIZEINFO *)pData->pPrivateDriverData;
302          pResult->DedicatedVideoMemorySize = 0;
303          pResult->DedicatedSystemMemorySize = 0;
304          pResult->SharedSystemMemorySize = 3ULL*1024ULL*1024ULL*1024ULL;
305          return STATUS_SUCCESS;
306       }
307       break;
308    case KMTQAITYPE_CHECKDRIVERUPDATESTATUS:
309       {
310          BOOL *pResult = (BOOL *)pData->pPrivateDriverData;
311          *pResult = FALSE;
312          return STATUS_SUCCESS;
313       }
314    case KMTQAITYPE_DRIVERVERSION:
315       {
316          D3DKMT_DRIVERVERSION *pResult = (D3DKMT_DRIVERVERSION *)pData->pPrivateDriverData;
317          *pResult = KMT_DRIVERVERSION_WDDM_1_0;
318          return STATUS_SUCCESS;
319       }
320    case KMTQAITYPE_XBOX:
321       {
322          BOOL *pResult = (BOOL *)pData->pPrivateDriverData;
323          *pResult = FALSE;
324          return STATUS_SUCCESS;
325       }
326    case KMTQAITYPE_PHYSICALADAPTERCOUNT:
327       {
328          UINT *pResult = (UINT *)pData->pPrivateDriverData;
329          *pResult = 1;
330          return STATUS_SUCCESS;
331       }
332    case KMTQAITYPE_PHYSICALADAPTERDEVICEIDS:
333       ZeroMemory(pData->pPrivateDriverData, pData->PrivateDriverDataSize);
334       return STATUS_SUCCESS;
335    default:
336       DebugPrintf("%s: unsupported query type (Type=%u, PrivateDriverDataSize=%u)\n",
337                   __FUNCTION__, pData->Type, pData->PrivateDriverDataSize);
338       ZeroMemory(pData->pPrivateDriverData, pData->PrivateDriverDataSize);
339       return STATUS_NOT_IMPLEMENTED;
340    }
341 }
342 
343 
344 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenAdapterFromHdc(D3DKMT_OPENADAPTERFROMHDC * pData)345 D3DKMTOpenAdapterFromHdc(D3DKMT_OPENADAPTERFROMHDC *pData)
346 {
347    LOG_ENTRYPOINT();
348    pData->hAdapter = 1;
349    pData->AdapterLuid.LowPart = 0;
350    pData->AdapterLuid.HighPart = 0;
351    pData->VidPnSourceId = 1;
352    return STATUS_SUCCESS;
353 }
354 
355 
356 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenAdapterFromGdiDisplayName(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME * pData)357 D3DKMTOpenAdapterFromGdiDisplayName(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME *pData)
358 {
359    LOG_ENTRYPOINT();
360    pData->hAdapter = 1;
361    pData->AdapterLuid.LowPart = 0;
362    pData->AdapterLuid.HighPart = 0;
363    pData->VidPnSourceId = 1;
364    return STATUS_SUCCESS;
365 }
366 
367 
368 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenAdapterFromDeviceName(D3DKMT_OPENADAPTERFROMDEVICENAME * pData)369 D3DKMTOpenAdapterFromDeviceName(D3DKMT_OPENADAPTERFROMDEVICENAME *pData)
370 {
371    LOG_ENTRYPOINT();
372    pData->hAdapter = 1;
373    pData->AdapterLuid.LowPart = 0;
374    pData->AdapterLuid.HighPart = 0;
375    return STATUS_SUCCESS;
376 }
377 
378 
379 EXTERN_C NTSTATUS APIENTRY
D3DKMTCloseAdapter(CONST D3DKMT_CLOSEADAPTER * pData)380 D3DKMTCloseAdapter(CONST D3DKMT_CLOSEADAPTER *pData)
381 {
382    LOG_ENTRYPOINT();
383    return STATUS_SUCCESS;
384 }
385 
386 
387 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetSharedPrimaryHandle(D3DKMT_GETSHAREDPRIMARYHANDLE * pData)388 D3DKMTGetSharedPrimaryHandle(D3DKMT_GETSHAREDPRIMARYHANDLE *pData)
389 {
390    LOG_UNSUPPORTED_ENTRYPOINT();
391    return STATUS_NOT_IMPLEMENTED;
392 }
393 
394 
395 EXTERN_C NTSTATUS APIENTRY
D3DKMTEscape(CONST D3DKMT_ESCAPE * pData)396 D3DKMTEscape(CONST D3DKMT_ESCAPE *pData)
397 {
398    LOG_UNSUPPORTED_ENTRYPOINT();
399    return STATUS_NOT_IMPLEMENTED;
400 }
401 
402 
403 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetVidPnSourceOwner(CONST D3DKMT_SETVIDPNSOURCEOWNER * pData)404 D3DKMTSetVidPnSourceOwner(CONST D3DKMT_SETVIDPNSOURCEOWNER *pData)
405 {
406    LOG_UNSUPPORTED_ENTRYPOINT();
407    return STATUS_NOT_IMPLEMENTED;
408 }
409 
410 
411 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetVidPnSourceOwner1(const void * pData)412 D3DKMTSetVidPnSourceOwner1(const void *pData)
413 {
414    LOG_UNSUPPORTED_ENTRYPOINT();
415    return STATUS_NOT_IMPLEMENTED;
416 }
417 
418 
419 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetPresentHistory(D3DKMT_GETPRESENTHISTORY * pData)420 D3DKMTGetPresentHistory(D3DKMT_GETPRESENTHISTORY *pData)
421 {
422    LOG_UNSUPPORTED_ENTRYPOINT();
423    return STATUS_NOT_IMPLEMENTED;
424 }
425 
426 
427 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetPresentQueueEvent(D3DKMT_HANDLE hAdapter,HANDLE * pData)428 D3DKMTGetPresentQueueEvent(D3DKMT_HANDLE hAdapter, HANDLE *pData)
429 {
430    LOG_UNSUPPORTED_ENTRYPOINT();
431    return STATUS_NOT_IMPLEMENTED;
432 }
433 
434 
435 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateOverlay(D3DKMT_CREATEOVERLAY * pData)436 D3DKMTCreateOverlay(D3DKMT_CREATEOVERLAY *pData)
437 {
438    LOG_UNSUPPORTED_ENTRYPOINT();
439    return STATUS_NOT_IMPLEMENTED;
440 }
441 
442 
443 EXTERN_C NTSTATUS APIENTRY
D3DKMTUpdateOverlay(CONST D3DKMT_UPDATEOVERLAY * pData)444 D3DKMTUpdateOverlay(CONST D3DKMT_UPDATEOVERLAY *pData)
445 {
446    LOG_UNSUPPORTED_ENTRYPOINT();
447    return STATUS_NOT_IMPLEMENTED;
448 }
449 
450 
451 EXTERN_C NTSTATUS APIENTRY
D3DKMTFlipOverlay(CONST D3DKMT_FLIPOVERLAY * pData)452 D3DKMTFlipOverlay(CONST D3DKMT_FLIPOVERLAY *pData)
453 {
454    LOG_UNSUPPORTED_ENTRYPOINT();
455    return STATUS_NOT_IMPLEMENTED;
456 }
457 
458 
459 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroyOverlay(CONST D3DKMT_DESTROYOVERLAY * pData)460 D3DKMTDestroyOverlay(CONST D3DKMT_DESTROYOVERLAY *pData)
461 {
462    LOG_UNSUPPORTED_ENTRYPOINT();
463    return STATUS_NOT_IMPLEMENTED;
464 }
465 
466 
467 EXTERN_C NTSTATUS APIENTRY
D3DKMTWaitForVerticalBlankEvent(CONST D3DKMT_WAITFORVERTICALBLANKEVENT * pData)468 D3DKMTWaitForVerticalBlankEvent(CONST D3DKMT_WAITFORVERTICALBLANKEVENT *pData)
469 {
470    LOG_ENTRYPOINT();
471    return STATUS_SUCCESS;
472 }
473 
474 
475 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetGammaRamp(CONST D3DKMT_SETGAMMARAMP * pData)476 D3DKMTSetGammaRamp(CONST D3DKMT_SETGAMMARAMP *pData)
477 {
478    LOG_UNSUPPORTED_ENTRYPOINT();
479    return STATUS_NOT_IMPLEMENTED;
480 }
481 
482 
483 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetDeviceState(D3DKMT_GETDEVICESTATE * pData)484 D3DKMTGetDeviceState(D3DKMT_GETDEVICESTATE *pData)
485 {
486    LOG_ENTRYPOINT();
487    switch (pData->StateType) {
488    case D3DKMT_DEVICESTATE_EXECUTION:
489       pData->ExecutionState = D3DKMT_DEVICEEXECUTION_ACTIVE;
490       return STATUS_SUCCESS;
491    case D3DKMT_DEVICESTATE_PRESENT:
492       pData->PresentState.PresentStats.PresentCount = 0;
493       pData->PresentState.PresentStats.PresentRefreshCount = 0;
494       pData->PresentState.PresentStats.SyncRefreshCount = 0;
495       pData->PresentState.PresentStats.SyncQPCTime.QuadPart = 0;
496       pData->PresentState.PresentStats.SyncGPUTime.QuadPart = 0;
497       return STATUS_SUCCESS;
498    case D3DKMT_DEVICESTATE_RESET:
499       pData->ResetState.Value = 0;
500       return STATUS_SUCCESS;
501    default:
502       return STATUS_INVALID_PARAMETER;
503    }
504 }
505 
506 
507 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateDCFromMemory(D3DKMT_CREATEDCFROMMEMORY * pData)508 D3DKMTCreateDCFromMemory(D3DKMT_CREATEDCFROMMEMORY *pData)
509 {
510    LOG_UNSUPPORTED_ENTRYPOINT();
511    return STATUS_NOT_IMPLEMENTED;
512 }
513 
514 
515 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroyDCFromMemory(CONST D3DKMT_DESTROYDCFROMMEMORY * pData)516 D3DKMTDestroyDCFromMemory(CONST D3DKMT_DESTROYDCFROMMEMORY *pData)
517 {
518    LOG_UNSUPPORTED_ENTRYPOINT();
519    return STATUS_NOT_IMPLEMENTED;
520 }
521 
522 
523 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetContextSchedulingPriority(CONST D3DKMT_SETCONTEXTSCHEDULINGPRIORITY * pData)524 D3DKMTSetContextSchedulingPriority(CONST D3DKMT_SETCONTEXTSCHEDULINGPRIORITY *pData)
525 {
526    LOG_UNSUPPORTED_ENTRYPOINT();
527    return STATUS_NOT_IMPLEMENTED;
528 }
529 
530 
531 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetContextSchedulingPriority(D3DKMT_GETCONTEXTSCHEDULINGPRIORITY * pData)532 D3DKMTGetContextSchedulingPriority(D3DKMT_GETCONTEXTSCHEDULINGPRIORITY *pData)
533 {
534    LOG_UNSUPPORTED_ENTRYPOINT();
535    return STATUS_NOT_IMPLEMENTED;
536 }
537 
538 
539 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetProcessSchedulingPriorityClass(HANDLE hProcess,D3DKMT_SCHEDULINGPRIORITYCLASS Priority)540 D3DKMTSetProcessSchedulingPriorityClass(HANDLE hProcess, D3DKMT_SCHEDULINGPRIORITYCLASS Priority)
541 {
542    LOG_UNSUPPORTED_ENTRYPOINT();
543    return STATUS_NOT_IMPLEMENTED;
544 }
545 
546 
547 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetProcessSchedulingPriorityClass(HANDLE hProcess,D3DKMT_SCHEDULINGPRIORITYCLASS * pPriority)548 D3DKMTGetProcessSchedulingPriorityClass(HANDLE hProcess, D3DKMT_SCHEDULINGPRIORITYCLASS *pPriority)
549 {
550    LOG_UNSUPPORTED_ENTRYPOINT();
551    return STATUS_NOT_IMPLEMENTED;
552 }
553 
554 
555 EXTERN_C NTSTATUS APIENTRY
D3DKMTReleaseProcessVidPnSourceOwners(HANDLE hProcess)556 D3DKMTReleaseProcessVidPnSourceOwners(HANDLE hProcess)
557 {
558    LOG_UNSUPPORTED_ENTRYPOINT();
559    return STATUS_NOT_IMPLEMENTED;
560 }
561 
562 
563 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetScanLine(D3DKMT_GETSCANLINE * pData)564 D3DKMTGetScanLine(D3DKMT_GETSCANLINE *pData)
565 {
566    LOG_UNSUPPORTED_ENTRYPOINT();
567    return STATUS_NOT_IMPLEMENTED;
568 }
569 
570 
571 EXTERN_C NTSTATUS APIENTRY
D3DKMTChangeSurfacePointer(CONST D3DKMT_CHANGESURFACEPOINTER * pData)572 D3DKMTChangeSurfacePointer(CONST D3DKMT_CHANGESURFACEPOINTER *pData)
573 {
574    LOG_UNSUPPORTED_ENTRYPOINT();
575    return STATUS_NOT_IMPLEMENTED;
576 }
577 
578 
579 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetQueuedLimit(CONST D3DKMT_SETQUEUEDLIMIT * pData)580 D3DKMTSetQueuedLimit(CONST D3DKMT_SETQUEUEDLIMIT *pData)
581 {
582    LOG_UNSUPPORTED_ENTRYPOINT();
583    return STATUS_NOT_IMPLEMENTED;
584 }
585 
586 
587 EXTERN_C NTSTATUS APIENTRY
D3DKMTPollDisplayChildren(CONST D3DKMT_POLLDISPLAYCHILDREN * pData)588 D3DKMTPollDisplayChildren(CONST D3DKMT_POLLDISPLAYCHILDREN *pData)
589 {
590    LOG_UNSUPPORTED_ENTRYPOINT();
591    return STATUS_NOT_IMPLEMENTED;
592 }
593 
594 
595 EXTERN_C NTSTATUS APIENTRY
D3DKMTInvalidateActiveVidPn(CONST D3DKMT_INVALIDATEACTIVEVIDPN * pData)596 D3DKMTInvalidateActiveVidPn(CONST D3DKMT_INVALIDATEACTIVEVIDPN *pData)
597 {
598    LOG_UNSUPPORTED_ENTRYPOINT();
599    return STATUS_NOT_IMPLEMENTED;
600 }
601 
602 
603 EXTERN_C NTSTATUS APIENTRY
D3DKMTCheckOcclusion(CONST D3DKMT_CHECKOCCLUSION * pData)604 D3DKMTCheckOcclusion(CONST D3DKMT_CHECKOCCLUSION *pData)
605 {
606    LOG_UNSUPPORTED_ENTRYPOINT();
607    return STATUS_NOT_IMPLEMENTED;
608 }
609 
610 
611 EXTERN_C NTSTATUS APIENTRY
D3DKMTWaitForIdle(CONST D3DKMT_WAITFORIDLE * pData)612 D3DKMTWaitForIdle(CONST D3DKMT_WAITFORIDLE *pData)
613 {
614    LOG_UNSUPPORTED_ENTRYPOINT();
615    return STATUS_NOT_IMPLEMENTED;
616 }
617 
618 
619 EXTERN_C NTSTATUS APIENTRY
D3DKMTCheckMonitorPowerState(CONST D3DKMT_CHECKMONITORPOWERSTATE * pData)620 D3DKMTCheckMonitorPowerState(CONST D3DKMT_CHECKMONITORPOWERSTATE *pData)
621 {
622    LOG_UNSUPPORTED_ENTRYPOINT();
623    return STATUS_NOT_IMPLEMENTED;
624 }
625 
626 
627 EXTERN_C BOOLEAN APIENTRY
D3DKMTCheckExclusiveOwnership(VOID)628 D3DKMTCheckExclusiveOwnership(VOID)
629 {
630    LOG_UNSUPPORTED_ENTRYPOINT();
631    return FALSE;
632 }
633 
634 
635 EXTERN_C NTSTATUS APIENTRY
D3DKMTCheckVidPnExclusiveOwnership(CONST D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP * pData)636 D3DKMTCheckVidPnExclusiveOwnership(CONST D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *pData)
637 {
638    LOG_UNSUPPORTED_ENTRYPOINT();
639    return STATUS_NOT_IMPLEMENTED;
640 }
641 
642 
643 EXTERN_C NTSTATUS APIENTRY
D3DKMTSetDisplayPrivateDriverFormat(CONST D3DKMT_SETDISPLAYPRIVATEDRIVERFORMAT * pData)644 D3DKMTSetDisplayPrivateDriverFormat(CONST D3DKMT_SETDISPLAYPRIVATEDRIVERFORMAT *pData)
645 {
646    LOG_UNSUPPORTED_ENTRYPOINT();
647    return STATUS_NOT_IMPLEMENTED;
648 }
649 
650 
651 EXTERN_C NTSTATUS APIENTRY
D3DKMTSharedPrimaryLockNotification(CONST D3DKMT_SHAREDPRIMARYLOCKNOTIFICATION * pData)652 D3DKMTSharedPrimaryLockNotification(CONST D3DKMT_SHAREDPRIMARYLOCKNOTIFICATION *pData)
653 {
654    LOG_UNSUPPORTED_ENTRYPOINT();
655    return STATUS_NOT_IMPLEMENTED;
656 }
657 
658 
659 EXTERN_C NTSTATUS APIENTRY
D3DKMTSharedPrimaryUnLockNotification(CONST D3DKMT_SHAREDPRIMARYUNLOCKNOTIFICATION * pData)660 D3DKMTSharedPrimaryUnLockNotification(CONST D3DKMT_SHAREDPRIMARYUNLOCKNOTIFICATION *pData)
661 {
662    LOG_UNSUPPORTED_ENTRYPOINT();
663    return STATUS_NOT_IMPLEMENTED;
664 }
665 
666 
667 EXTERN_C NTSTATUS APIENTRY
D3DKMTCreateKeyedMutex(D3DKMT_CREATEKEYEDMUTEX * pData)668 D3DKMTCreateKeyedMutex(D3DKMT_CREATEKEYEDMUTEX *pData)
669 {
670    LOG_UNSUPPORTED_ENTRYPOINT();
671    return STATUS_NOT_IMPLEMENTED;
672 }
673 
674 
675 EXTERN_C NTSTATUS APIENTRY
D3DKMTOpenKeyedMutex(D3DKMT_OPENKEYEDMUTEX * pData)676 D3DKMTOpenKeyedMutex(D3DKMT_OPENKEYEDMUTEX *pData)
677 {
678    LOG_UNSUPPORTED_ENTRYPOINT();
679    return STATUS_NOT_IMPLEMENTED;
680 }
681 
682 
683 EXTERN_C NTSTATUS APIENTRY
D3DKMTDestroyKeyedMutex(CONST D3DKMT_DESTROYKEYEDMUTEX * pData)684 D3DKMTDestroyKeyedMutex(CONST D3DKMT_DESTROYKEYEDMUTEX *pData)
685 {
686    LOG_UNSUPPORTED_ENTRYPOINT();
687    return STATUS_NOT_IMPLEMENTED;
688 }
689 
690 
691 EXTERN_C NTSTATUS APIENTRY
D3DKMTAcquireKeyedMutex(D3DKMT_ACQUIREKEYEDMUTEX * pData)692 D3DKMTAcquireKeyedMutex(D3DKMT_ACQUIREKEYEDMUTEX *pData)
693 {
694    LOG_UNSUPPORTED_ENTRYPOINT();
695    return STATUS_NOT_IMPLEMENTED;
696 }
697 
698 
699 EXTERN_C NTSTATUS APIENTRY
D3DKMTReleaseKeyedMutex(D3DKMT_RELEASEKEYEDMUTEX * pData)700 D3DKMTReleaseKeyedMutex(D3DKMT_RELEASEKEYEDMUTEX *pData)
701 {
702    LOG_UNSUPPORTED_ENTRYPOINT();
703    return STATUS_NOT_IMPLEMENTED;
704 }
705 
706 
707 EXTERN_C NTSTATUS APIENTRY
D3DKMTConfigureSharedResource(CONST D3DKMT_CONFIGURESHAREDRESOURCE * pData)708 D3DKMTConfigureSharedResource(CONST D3DKMT_CONFIGURESHAREDRESOURCE *pData)
709 {
710    LOG_UNSUPPORTED_ENTRYPOINT();
711    return STATUS_NOT_IMPLEMENTED;
712 }
713 
714 
715 EXTERN_C NTSTATUS APIENTRY
D3DKMTGetOverlayState(D3DKMT_GETOVERLAYSTATE * pData)716 D3DKMTGetOverlayState(D3DKMT_GETOVERLAYSTATE *pData)
717 {
718    LOG_UNSUPPORTED_ENTRYPOINT();
719    return STATUS_NOT_IMPLEMENTED;
720 }
721 
722 
723 EXTERN_C NTSTATUS APIENTRY
D3DKMTCheckSharedResourceAccess(CONST D3DKMT_CHECKSHAREDRESOURCEACCESS * pData)724 D3DKMTCheckSharedResourceAccess(CONST D3DKMT_CHECKSHAREDRESOURCEACCESS *pData)
725 {
726    LOG_UNSUPPORTED_ENTRYPOINT();
727    return STATUS_NOT_IMPLEMENTED;
728 }
729