VirtualBox

source: vbox/trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp@ 84849

Last change on this file since 84849 was 84849, checked in by vboxsync, 5 years ago

DevVGA-SVGA3d: Jettison the titlebar and border of the window we pass to CreateDeviceEx, as things goes sideways if we don't have any pixels in the client area. The titlebar size and stuff changes with the subsystem/os version number in the PE header, so when the new linker started putting 6.00 there instead of 5.02, things stopped working on a bunch of W10 systems. bugref:8489

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 43.0 KB
Line 
1/* $Id: DevVGA-SVGA3d-shared.cpp 84849 2020-06-16 14:23:39Z vboxsync $ */
2/** @file
3 * DevVMWare - VMWare SVGA device
4 */
5
6/*
7 * Copyright (C) 2013-2020 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19/*********************************************************************************************************************************
20* Header Files *
21*********************************************************************************************************************************/
22#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
23#include <VBox/vmm/pdmdev.h>
24#include <VBox/version.h>
25#include <iprt/errcore.h>
26#include <VBox/log.h>
27#include <VBox/vmm/pgm.h>
28
29#include <iprt/assert.h>
30#include <iprt/semaphore.h>
31#include <iprt/uuid.h>
32#include <iprt/mem.h>
33#include <iprt/avl.h>
34
35#include <VBoxVideo.h> /* required by DevVGA.h */
36
37/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
38#include "DevVGA.h"
39
40#include "DevVGA-SVGA.h"
41#include "DevVGA-SVGA3d.h"
42#define VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
43#include "DevVGA-SVGA3d-internal.h"
44
45
46#ifdef RT_OS_WINDOWS
47# define VMSVGA3D_WNDCLASSNAME L"VMSVGA3DWNDCLS"
48
49static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
50
51
52/**
53 * Send a message to the async window thread and wait for a reply
54 *
55 * @returns VBox status code.
56 * @param pWindowThread Thread handle
57 * @param WndRequestSem Semaphore handle for waiting
58 * @param msg Message id
59 * @param wParam First parameter
60 * @param lParam Second parameter
61 */
62int vmsvga3dSendThreadMessage(RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, UINT msg, WPARAM wParam, LPARAM lParam)
63{
64 int rc;
65 BOOL ret;
66
67 ret = PostThreadMessage(RTThreadGetNative(pWindowThread), msg, wParam, lParam);
68 AssertMsgReturn(ret, ("PostThreadMessage %x failed with %d\n", RTThreadGetNative(pWindowThread), GetLastError()), VERR_INTERNAL_ERROR);
69
70 rc = RTSemEventWait(WndRequestSem, RT_INDEFINITE_WAIT);
71 Assert(RT_SUCCESS(rc));
72
73 return rc;
74}
75
76/**
77 * The async window handling thread
78 *
79 * @returns VBox status code.
80 * @param hThreadSelf This thread.
81 * @param pvUser Request sempahore handle.
82 */
83DECLCALLBACK(int) vmsvga3dWindowThread(RTTHREAD hThreadSelf, void *pvUser)
84{
85 RT_NOREF(hThreadSelf);
86 RTSEMEVENT WndRequestSem = (RTSEMEVENT)pvUser;
87 WNDCLASSEXW wc;
88
89 /* Register our own window class. */
90 wc.cbSize = sizeof(wc);
91 wc.style = CS_OWNDC;
92 wc.lpfnWndProc = (WNDPROC)vmsvga3dWndProc;
93 wc.cbClsExtra = 0;
94 wc.cbWndExtra = 0;
95 wc.hInstance = GetModuleHandle("VBoxDD.dll"); /** @todo hardcoded name.. */
96 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
97 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
98 wc.hbrBackground = NULL;
99 wc.lpszMenuName = NULL;
100 wc.lpszClassName = VMSVGA3D_WNDCLASSNAME;
101 wc.hIconSm = NULL;
102
103 if (!RegisterClassExW(&wc))
104 {
105 Log(("RegisterClass failed with %x\n", GetLastError()));
106 return VERR_INTERNAL_ERROR;
107 }
108
109 LogFlow(("vmsvga3dWindowThread: started loop\n"));
110 while (true)
111 {
112 MSG msg;
113 if (GetMessage(&msg, 0, 0, 0))
114 {
115 if (msg.message == WM_VMSVGA3D_EXIT)
116 {
117 /* Signal to the caller that we're done. */
118 RTSemEventSignal(WndRequestSem);
119 break;
120 }
121
122 if (msg.message == WM_VMSVGA3D_WAKEUP)
123 {
124 continue;
125 }
126
127 if (msg.message == WM_VMSVGA3D_CREATEWINDOW)
128 {
129 HWND hWnd;
130 HWND *phWnd = (HWND *)msg.wParam;
131 LPCREATESTRUCTW pCS = (LPCREATESTRUCTW)msg.lParam;
132
133 *phWnd = hWnd = CreateWindowExW(pCS->dwExStyle,
134 VMSVGA3D_WNDCLASSNAME,
135 pCS->lpszName,
136 pCS->style,
137 pCS->x,
138 pCS->y,
139 pCS->cx,
140 pCS->cy,
141 pCS->hwndParent,
142 pCS->hMenu,
143 pCS->hInstance,
144 NULL);
145 AssertMsg(hWnd, ("CreateWindowEx %x %ls %ls %x (%d,%d)(%d,%d), %x %x %x error=%x\n", pCS->dwExStyle,
146 pCS->lpszName, VMSVGA3D_WNDCLASSNAME, pCS->style, pCS->x, pCS->y, pCS->cx, pCS->cy,
147 pCS->hwndParent, pCS->hMenu, pCS->hInstance, GetLastError()));
148
149#ifdef VBOX_STRICT
150 /* Must have a non-zero client rectangle! */
151 RECT ClientRect;
152 GetClientRect(hWnd, &ClientRect);
153 Assert(ClientRect.right > ClientRect.left);
154 Assert(ClientRect.bottom > ClientRect.top);
155#endif
156
157 /* Signal to the caller that we're done. */
158 RTSemEventSignal(WndRequestSem);
159 continue;
160 }
161
162 if (msg.message == WM_VMSVGA3D_DESTROYWINDOW)
163 {
164 BOOL fRc = DestroyWindow((HWND)msg.wParam);
165 Assert(fRc); NOREF(fRc);
166
167 /* Signal to the caller that we're done. */
168 RTSemEventSignal(WndRequestSem);
169 continue;
170 }
171
172#if 0 /* in case CreateDeviceEx fails again and we want to eliminat wrong-thread. */
173 if (msg.message == WM_VMSVGA3D_CREATE_DEVICE)
174 {
175 VMSVGA3DCREATEDEVICEPARAMS *pParams = (VMSVGA3DCREATEDEVICEPARAMS *)msg.lParam;
176 pParams->hrc = pParams->pState->pD3D9->CreateDeviceEx(D3DADAPTER_DEFAULT,
177 D3DDEVTYPE_HAL,
178 pParams->pContext->hwnd,
179 D3DCREATE_MULTITHREADED | D3DCREATE_MIXED_VERTEXPROCESSING, //D3DCREATE_HARDWARE_VERTEXPROCESSING,
180 pParams->pPresParams,
181 NULL,
182 &pParams->pContext->pDevice);
183 AssertMsg(pParams->hrc == D3D_OK, ("WM_VMSVGA3D_CREATE_DEVICE: CreateDevice failed with %x\n", pParams->hrc));
184
185 RTSemEventSignal(WndRequestSem);
186 continue;
187 }
188#endif
189
190 TranslateMessage(&msg);
191 DispatchMessage(&msg);
192 }
193 else
194 {
195 Log(("GetMessage failed with %x\n", GetLastError()));
196 break;
197 }
198 }
199
200 Log(("vmsvga3dWindowThread: end loop\n"));
201 return VINF_SUCCESS;
202}
203
204/* Window procedure for our top level window overlays. */
205static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
206{
207 switch (uMsg)
208 {
209 case WM_CREATE:
210 {
211 /* Ditch the title bar (caption) to avoid having a zero height
212 client area as that makes IDirect3D9Ex::CreateDeviceEx fail.
213 For the style adjustment to take place, we must apply the
214 SWP_FRAMECHANGED thru SetWindowPos. */
215 LONG flStyle = GetWindowLongW(hwnd, GWL_STYLE);
216 flStyle &= ~WS_CAPTION /* both titlebar and border. Some paranoia: */ | WS_THICKFRAME | WS_SYSMENU;
217 SetWindowLong(hwnd, GWL_STYLE, flStyle);
218 SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
219 SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
220 break;
221 }
222
223 case WM_CLOSE:
224 Log7(("vmsvga3dWndProc(%p): WM_CLOSE\n", hwnd));
225 break;
226
227 case WM_DESTROY:
228 Log7(("vmsvga3dWndProc(%p): WM_DESTROY\n", hwnd));
229 break;
230
231 case WM_NCHITTEST:
232 Log7(("vmsvga3dWndProc(%p): WM_NCHITTEST\n", hwnd));
233 return HTNOWHERE;
234
235# if 0 /* flicker experiment, no help here. */
236 case WM_PAINT:
237 Log7(("vmsvga3dWndProc(%p): WM_PAINT %p %p\n", hwnd, wParam, lParam));
238 ValidateRect(hwnd, NULL);
239 return 0;
240 case WM_ERASEBKGND:
241 Log7(("vmsvga3dWndProc(%p): WM_ERASEBKGND %p %p\n", hwnd, wParam, lParam));
242 return TRUE;
243 case WM_NCPAINT:
244 Log7(("vmsvga3dWndProc(%p): WM_NCPAINT %p %p\n", hwnd, wParam, lParam));
245 break;
246 case WM_WINDOWPOSCHANGING:
247 {
248 PWINDOWPOS pPos = (PWINDOWPOS)lParam;
249 Log7(("vmsvga3dWndProc(%p): WM_WINDOWPOSCHANGING %p %p pos=(%d,%d) size=(%d,%d) flags=%#x\n",
250 hwnd, wParam, lParam, pPos->x, pPos->y, pPos->cx, pPos->cy, pPos->flags));
251 break;
252 }
253 case WM_WINDOWPOSCHANGED:
254 {
255 PWINDOWPOS pPos = (PWINDOWPOS)lParam;
256 Log7(("vmsvga3dWndProc(%p): WM_WINDOWPOSCHANGED %p %p pos=(%d,%d) size=(%d,%d) flags=%#x\n",
257 hwnd, wParam, lParam, pPos->x, pPos->y, pPos->cx, pPos->cy, pPos->flags));
258 break;
259 }
260 case WM_MOVE:
261 Log7(("vmsvga3dWndProc(%p): WM_MOVE %p %p\n", hwnd, wParam, lParam));
262 break;
263 case WM_SIZE:
264 Log7(("vmsvga3dWndProc(%p): WM_SIZE %p %p\n", hwnd, wParam, lParam));
265 break;
266
267 default:
268 Log7(("vmsvga3dWndProc(%p): %#x %p %p\n", hwnd, uMsg, wParam, lParam));
269# endif
270 }
271 return DefWindowProc(hwnd, uMsg, wParam, lParam);
272}
273
274int vmsvga3dContextWindowCreate(HINSTANCE hInstance, RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, HWND *pHwnd)
275{
276 /* Create a context window with minimal 4x4 size. We will never use the swapchain
277 * to present the rendered image. Rendered images from the guest will be copied to
278 * the VMSVGA SCREEN object, which can be either an offscreen render target or
279 * system memory in the guest VRAM.
280 */
281 CREATESTRUCTW cs;
282 cs.lpCreateParams = NULL;
283 cs.hInstance = hInstance;
284 cs.hMenu = NULL;
285 cs.hwndParent = HWND_DESKTOP;
286 cs.cx = 4;
287 cs.cy = 4;
288 cs.x = 0;
289 cs.y = 0;
290 cs.style = WS_DISABLED;
291 cs.lpszName = NULL;
292 cs.lpszClass = 0;
293 cs.dwExStyle = WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY;
294
295 return vmsvga3dSendThreadMessage(pWindowThread, WndRequestSem, WM_VMSVGA3D_CREATEWINDOW, (WPARAM)pHwnd, (LPARAM)&cs);
296}
297
298#endif /* RT_OS_WINDOWS */
299
300
301/**
302 * Calculate the size and dimensions of one block.
303 */
304uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format,
305 uint32_t *pcxBlock,
306 uint32_t *pcyBlock)
307{
308 uint32_t u32 = 0;
309 if (!pcxBlock) pcxBlock = &u32;
310 if (!pcyBlock) pcyBlock = &u32;
311
312 switch (format)
313 {
314 case SVGA3D_X8R8G8B8:
315 case SVGA3D_A8R8G8B8:
316 *pcxBlock = 1;
317 *pcyBlock = 1;
318 return 4;
319
320 case SVGA3D_R5G6B5:
321 case SVGA3D_X1R5G5B5:
322 case SVGA3D_A1R5G5B5:
323 case SVGA3D_A4R4G4B4:
324 *pcxBlock = 1;
325 *pcyBlock = 1;
326 return 2;
327
328 case SVGA3D_Z_D32:
329 case SVGA3D_Z_D24S8:
330 case SVGA3D_Z_D24X8:
331 case SVGA3D_Z_DF24:
332 case SVGA3D_Z_D24S8_INT:
333 *pcxBlock = 1;
334 *pcyBlock = 1;
335 return 4;
336
337 case SVGA3D_Z_D16:
338 case SVGA3D_Z_DF16:
339 case SVGA3D_Z_D15S1:
340 *pcxBlock = 1;
341 *pcyBlock = 1;
342 return 2;
343
344 case SVGA3D_LUMINANCE8:
345 case SVGA3D_LUMINANCE4_ALPHA4:
346 *pcxBlock = 1;
347 *pcyBlock = 1;
348 return 1;
349
350 case SVGA3D_LUMINANCE16:
351 case SVGA3D_LUMINANCE8_ALPHA8:
352 *pcxBlock = 1;
353 *pcyBlock = 1;
354 return 2;
355
356 case SVGA3D_DXT1:
357 *pcxBlock = 4;
358 *pcyBlock = 4;
359 return 8;
360
361 case SVGA3D_DXT2:
362 case SVGA3D_DXT3:
363 case SVGA3D_DXT4:
364 case SVGA3D_DXT5:
365 *pcxBlock = 4;
366 *pcyBlock = 4;
367 return 16;
368
369 case SVGA3D_BUMPU8V8:
370 case SVGA3D_BUMPL6V5U5:
371 *pcxBlock = 1;
372 *pcyBlock = 1;
373 return 2;
374
375 case SVGA3D_BUMPX8L8V8U8:
376 case SVGA3D_Q8W8V8U8:
377 *pcxBlock = 1;
378 *pcyBlock = 1;
379 return 4;
380
381 case SVGA3D_V8U8:
382 case SVGA3D_CxV8U8:
383 *pcxBlock = 1;
384 *pcyBlock = 1;
385 return 2;
386
387 case SVGA3D_X8L8V8U8:
388 case SVGA3D_A2W10V10U10:
389 *pcxBlock = 1;
390 *pcyBlock = 1;
391 return 4;
392
393 case SVGA3D_ARGB_S10E5: /* 16-bit floating-point ARGB */
394 *pcxBlock = 1;
395 *pcyBlock = 1;
396 return 8;
397 case SVGA3D_ARGB_S23E8: /* 32-bit floating-point ARGB */
398 *pcxBlock = 1;
399 *pcyBlock = 1;
400 return 16;
401
402 case SVGA3D_A2R10G10B10:
403 *pcxBlock = 1;
404 *pcyBlock = 1;
405 return 4;
406
407 case SVGA3D_ALPHA8:
408 *pcxBlock = 1;
409 *pcyBlock = 1;
410 return 1;
411
412 case SVGA3D_R_S10E5:
413 *pcxBlock = 1;
414 *pcyBlock = 1;
415 return 2;
416
417 case SVGA3D_R_S23E8:
418 case SVGA3D_RG_S10E5:
419 *pcxBlock = 1;
420 *pcyBlock = 1;
421 return 4;
422
423 case SVGA3D_RG_S23E8:
424 *pcxBlock = 1;
425 *pcyBlock = 1;
426 return 8;
427
428 /*
429 * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
430 * the most efficient format to use when creating new surfaces
431 * expressly for index or vertex data.
432 */
433 case SVGA3D_BUFFER:
434 *pcxBlock = 1;
435 *pcyBlock = 1;
436 return 1;
437
438 case SVGA3D_UYVY:
439 *pcxBlock = 2;
440 *pcyBlock = 1;
441 return 4;
442
443 case SVGA3D_YUY2:
444 *pcxBlock = 2;
445 *pcyBlock = 1;
446 return 4;
447
448 case SVGA3D_V16U16:
449 *pcxBlock = 1;
450 *pcyBlock = 1;
451 return 4;
452
453 case SVGA3D_G16R16:
454 *pcxBlock = 1;
455 *pcyBlock = 1;
456 return 4;
457 case SVGA3D_A16B16G16R16:
458 *pcxBlock = 1;
459 *pcyBlock = 1;
460 return 8;
461 case SVGA3D_R8G8B8A8_UNORM:
462 case SVGA3D_R8G8B8A8_SNORM:
463 *pcxBlock = 1;
464 *pcyBlock = 1;
465 return 4;
466 case SVGA3D_R16G16_UNORM:
467 *pcxBlock = 1;
468 *pcyBlock = 1;
469 return 4;
470
471 default:
472 *pcxBlock = 1;
473 *pcyBlock = 1;
474 AssertFailedReturn(4);
475 }
476}
477
478#ifdef LOG_ENABLED
479
480const char *vmsvga3dGetCapString(uint32_t idxCap)
481{
482 switch (idxCap)
483 {
484 case SVGA3D_DEVCAP_3D:
485 return "SVGA3D_DEVCAP_3D";
486 case SVGA3D_DEVCAP_MAX_LIGHTS:
487 return "SVGA3D_DEVCAP_MAX_LIGHTS";
488 case SVGA3D_DEVCAP_MAX_TEXTURES:
489 return "SVGA3D_DEVCAP_MAX_TEXTURES";
490 case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
491 return "SVGA3D_DEVCAP_MAX_CLIP_PLANES";
492 case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
493 return "SVGA3D_DEVCAP_VERTEX_SHADER_VERSION";
494 case SVGA3D_DEVCAP_VERTEX_SHADER:
495 return "SVGA3D_DEVCAP_VERTEX_SHADER";
496 case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
497 return "SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION";
498 case SVGA3D_DEVCAP_FRAGMENT_SHADER:
499 return "SVGA3D_DEVCAP_FRAGMENT_SHADER";
500 case SVGA3D_DEVCAP_MAX_RENDER_TARGETS:
501 return "SVGA3D_DEVCAP_MAX_RENDER_TARGETS";
502 case SVGA3D_DEVCAP_S23E8_TEXTURES:
503 return "SVGA3D_DEVCAP_S23E8_TEXTURES";
504 case SVGA3D_DEVCAP_S10E5_TEXTURES:
505 return "SVGA3D_DEVCAP_S10E5_TEXTURES";
506 case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
507 return "SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND";
508 case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
509 return "SVGA3D_DEVCAP_D16_BUFFER_FORMAT";
510 case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
511 return "SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT";
512 case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
513 return "SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT";
514 case SVGA3D_DEVCAP_QUERY_TYPES:
515 return "SVGA3D_DEVCAP_QUERY_TYPES";
516 case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
517 return "SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING";
518 case SVGA3D_DEVCAP_MAX_POINT_SIZE:
519 return "SVGA3D_DEVCAP_MAX_POINT_SIZE";
520 case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
521 return "SVGA3D_DEVCAP_MAX_SHADER_TEXTURES";
522 case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
523 return "SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH";
524 case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
525 return "SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT";
526 case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
527 return "SVGA3D_DEVCAP_MAX_VOLUME_EXTENT";
528 case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
529 return "SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT";
530 case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
531 return "SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO";
532 case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
533 return "SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY";
534 case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
535 return "SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT";
536 case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
537 return "SVGA3D_DEVCAP_MAX_VERTEX_INDEX";
538 case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
539 return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS";
540 case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
541 return "SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS";
542 case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
543 return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS";
544 case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
545 return "SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS";
546 case SVGA3D_DEVCAP_TEXTURE_OPS:
547 return "SVGA3D_DEVCAP_TEXTURE_OPS";
548 case SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES:
549 return "SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES";
550 case SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES:
551 return "SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES";
552 case SVGA3D_DEVCAP_ALPHATOCOVERAGE:
553 return "SVGA3D_DEVCAP_ALPHATOCOVERAGE";
554 case SVGA3D_DEVCAP_SUPERSAMPLE:
555 return "SVGA3D_DEVCAP_SUPERSAMPLE";
556 case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
557 return "SVGA3D_DEVCAP_AUTOGENMIPMAPS";
558 case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
559 return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES";
560 case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
561 return "SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS";
562 case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
563 return "SVGA3D_DEVCAP_MAX_CONTEXT_IDS";
564 case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
565 return "SVGA3D_DEVCAP_MAX_SURFACE_IDS";
566 case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
567 return "SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8";
568 case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
569 return "SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8";
570 case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
571 return "SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10";
572 case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
573 return "SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5";
574 case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
575 return "SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5";
576 case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
577 return "SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4";
578 case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
579 return "SVGA3D_DEVCAP_SURFACEFMT_R5G6B5";
580 case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
581 return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16";
582 case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
583 return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8";
584 case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
585 return "SVGA3D_DEVCAP_SURFACEFMT_ALPHA8";
586 case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
587 return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8";
588 case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
589 return "SVGA3D_DEVCAP_SURFACEFMT_Z_D16";
590 case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
591 return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8";
592 case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
593 return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8";
594 case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
595 return "SVGA3D_DEVCAP_SURFACEFMT_Z_DF16";
596 case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
597 return "SVGA3D_DEVCAP_SURFACEFMT_Z_DF24";
598 case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
599 return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT";
600 case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
601 return "SVGA3D_DEVCAP_SURFACEFMT_DXT1";
602 case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
603 return "SVGA3D_DEVCAP_SURFACEFMT_DXT2";
604 case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
605 return "SVGA3D_DEVCAP_SURFACEFMT_DXT3";
606 case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
607 return "SVGA3D_DEVCAP_SURFACEFMT_DXT4";
608 case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
609 return "SVGA3D_DEVCAP_SURFACEFMT_DXT5";
610 case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
611 return "SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8";
612 case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
613 return "SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10";
614 case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
615 return "SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8";
616 case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
617 return "SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8";
618 case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
619 return "SVGA3D_DEVCAP_SURFACEFMT_CxV8U8";
620 case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
621 return "SVGA3D_DEVCAP_SURFACEFMT_R_S10E5";
622 case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
623 return "SVGA3D_DEVCAP_SURFACEFMT_R_S23E8";
624 case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
625 return "SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5";
626 case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
627 return "SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8";
628 case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
629 return "SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5";
630 case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
631 return "SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8";
632 case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
633 return "SVGA3D_DEVCAP_SURFACEFMT_V16U16";
634 case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
635 return "SVGA3D_DEVCAP_SURFACEFMT_G16R16";
636 case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
637 return "SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16";
638 case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
639 return "SVGA3D_DEVCAP_SURFACEFMT_UYVY";
640 case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
641 return "SVGA3D_DEVCAP_SURFACEFMT_YUY2";
642 case SVGA3D_DEVCAP_SURFACEFMT_NV12:
643 return "SVGA3D_DEVCAP_SURFACEFMT_NV12";
644 case SVGA3D_DEVCAP_SURFACEFMT_AYUV:
645 return "SVGA3D_DEVCAP_SURFACEFMT_AYUV";
646 case SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM:
647 return "SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM";
648 case SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM:
649 return "SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM";
650 default:
651 return "UNEXPECTED";
652 }
653}
654
655const char *vmsvga3dGet3dFormatString(uint32_t format)
656{
657 static char szFormat[1024];
658
659 szFormat[0] = 0;
660
661 if (format & SVGA3DFORMAT_OP_TEXTURE)
662 strcat(szFormat, " - SVGA3DFORMAT_OP_TEXTURE\n");
663 if (format & SVGA3DFORMAT_OP_VOLUMETEXTURE)
664 strcat(szFormat, " - SVGA3DFORMAT_OP_VOLUMETEXTURE\n");
665 if (format & SVGA3DFORMAT_OP_CUBETEXTURE)
666 strcat(szFormat, " - SVGA3DFORMAT_OP_CUBETEXTURE\n");
667 if (format & SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET)
668 strcat(szFormat, " - SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET\n");
669 if (format & SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET)
670 strcat(szFormat, " - SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET\n");
671 if (format & SVGA3DFORMAT_OP_ZSTENCIL)
672 strcat(szFormat, " - SVGA3DFORMAT_OP_ZSTENCIL\n");
673 if (format & SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH)
674 strcat(szFormat, " - SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH\n");
675 if (format & SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET)
676 strcat(szFormat, " - SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET\n");
677 if (format & SVGA3DFORMAT_OP_DISPLAYMODE)
678 strcat(szFormat, " - SVGA3DFORMAT_OP_DISPLAYMODE\n");
679 if (format & SVGA3DFORMAT_OP_3DACCELERATION)
680 strcat(szFormat, " - SVGA3DFORMAT_OP_3DACCELERATION\n");
681 if (format & SVGA3DFORMAT_OP_PIXELSIZE)
682 strcat(szFormat, " - SVGA3DFORMAT_OP_PIXELSIZE\n");
683 if (format & SVGA3DFORMAT_OP_CONVERT_TO_ARGB)
684 strcat(szFormat, " - SVGA3DFORMAT_OP_CONVERT_TO_ARGB\n");
685 if (format & SVGA3DFORMAT_OP_OFFSCREENPLAIN)
686 strcat(szFormat, " - SVGA3DFORMAT_OP_OFFSCREENPLAIN\n");
687 if (format & SVGA3DFORMAT_OP_SRGBREAD)
688 strcat(szFormat, " - SVGA3DFORMAT_OP_SRGBREAD\n");
689 if (format & SVGA3DFORMAT_OP_BUMPMAP)
690 strcat(szFormat, " - SVGA3DFORMAT_OP_BUMPMAP\n");
691 if (format & SVGA3DFORMAT_OP_DMAP)
692 strcat(szFormat, " - SVGA3DFORMAT_OP_DMAP\n");
693 if (format & SVGA3DFORMAT_OP_NOFILTER)
694 strcat(szFormat, " - SVGA3DFORMAT_OP_NOFILTER\n");
695 if (format & SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB)
696 strcat(szFormat, " - SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB\n");
697 if (format & SVGA3DFORMAT_OP_SRGBWRITE)
698 strcat(szFormat, " - SVGA3DFORMAT_OP_SRGBWRITE\n");
699 if (format & SVGA3DFORMAT_OP_NOALPHABLEND)
700 strcat(szFormat, " - SVGA3DFORMAT_OP_NOALPHABLEND\n");
701 if (format & SVGA3DFORMAT_OP_AUTOGENMIPMAP)
702 strcat(szFormat, " - SVGA3DFORMAT_OP_AUTOGENMIPMAP\n");
703 if (format & SVGA3DFORMAT_OP_VERTEXTEXTURE)
704 strcat(szFormat, " - SVGA3DFORMAT_OP_VERTEXTEXTURE\n");
705 if (format & SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP)
706 strcat(szFormat, " - SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP\n");
707 return szFormat;
708}
709
710const char *vmsvga3dGetRenderStateName(uint32_t state)
711{
712 switch (state)
713 {
714 case SVGA3D_RS_ZENABLE: /* SVGA3dBool */
715 return "SVGA3D_RS_ZENABLE";
716 case SVGA3D_RS_ZWRITEENABLE: /* SVGA3dBool */
717 return "SVGA3D_RS_ZWRITEENABLE";
718 case SVGA3D_RS_ALPHATESTENABLE: /* SVGA3dBool */
719 return "SVGA3D_RS_ALPHATESTENABLE";
720 case SVGA3D_RS_DITHERENABLE: /* SVGA3dBool */
721 return "SVGA3D_RS_DITHERENABLE";
722 case SVGA3D_RS_BLENDENABLE: /* SVGA3dBool */
723 return "SVGA3D_RS_BLENDENABLE";
724 case SVGA3D_RS_FOGENABLE: /* SVGA3dBool */
725 return "SVGA3D_RS_FOGENABLE";
726 case SVGA3D_RS_SPECULARENABLE: /* SVGA3dBool */
727 return "SVGA3D_RS_SPECULARENABLE";
728 case SVGA3D_RS_STENCILENABLE: /* SVGA3dBool */
729 return "SVGA3D_RS_STENCILENABLE";
730 case SVGA3D_RS_LIGHTINGENABLE: /* SVGA3dBool */
731 return "SVGA3D_RS_LIGHTINGENABLE";
732 case SVGA3D_RS_NORMALIZENORMALS: /* SVGA3dBool */
733 return "SVGA3D_RS_NORMALIZENORMALS";
734 case SVGA3D_RS_POINTSPRITEENABLE: /* SVGA3dBool */
735 return "SVGA3D_RS_POINTSPRITEENABLE";
736 case SVGA3D_RS_POINTSCALEENABLE: /* SVGA3dBool */
737 return "SVGA3D_RS_POINTSCALEENABLE";
738 case SVGA3D_RS_STENCILREF: /* uint32_t */
739 return "SVGA3D_RS_STENCILREF";
740 case SVGA3D_RS_STENCILMASK: /* uint32_t */
741 return "SVGA3D_RS_STENCILMASK";
742 case SVGA3D_RS_STENCILWRITEMASK: /* uint32_t */
743 return "SVGA3D_RS_STENCILWRITEMASK";
744 case SVGA3D_RS_POINTSIZE: /* float */
745 return "SVGA3D_RS_POINTSIZE";
746 case SVGA3D_RS_POINTSIZEMIN: /* float */
747 return "SVGA3D_RS_POINTSIZEMIN";
748 case SVGA3D_RS_POINTSIZEMAX: /* float */
749 return "SVGA3D_RS_POINTSIZEMAX";
750 case SVGA3D_RS_POINTSCALE_A: /* float */
751 return "SVGA3D_RS_POINTSCALE_A";
752 case SVGA3D_RS_POINTSCALE_B: /* float */
753 return "SVGA3D_RS_POINTSCALE_B";
754 case SVGA3D_RS_POINTSCALE_C: /* float */
755 return "SVGA3D_RS_POINTSCALE_C";
756 case SVGA3D_RS_AMBIENT: /* SVGA3dColor - identical */
757 return "SVGA3D_RS_AMBIENT";
758 case SVGA3D_RS_CLIPPLANEENABLE: /* SVGA3dClipPlanes - identical */
759 return "SVGA3D_RS_CLIPPLANEENABLE";
760 case SVGA3D_RS_FOGCOLOR: /* SVGA3dColor - identical */
761 return "SVGA3D_RS_FOGCOLOR";
762 case SVGA3D_RS_FOGSTART: /* float */
763 return "SVGA3D_RS_FOGSTART";
764 case SVGA3D_RS_FOGEND: /* float */
765 return "SVGA3D_RS_FOGEND";
766 case SVGA3D_RS_FOGDENSITY: /* float */
767 return "SVGA3D_RS_FOGDENSITY";
768 case SVGA3D_RS_RANGEFOGENABLE: /* SVGA3dBool */
769 return "SVGA3D_RS_RANGEFOGENABLE";
770 case SVGA3D_RS_FOGMODE: /* SVGA3dFogMode */
771 return "SVGA3D_RS_FOGMODE";
772 case SVGA3D_RS_FILLMODE: /* SVGA3dFillMode */
773 return "SVGA3D_RS_FILLMODE";
774 case SVGA3D_RS_SHADEMODE: /* SVGA3dShadeMode */
775 return "SVGA3D_RS_SHADEMODE";
776 case SVGA3D_RS_LINEPATTERN: /* SVGA3dLinePattern */
777 return "SVGA3D_RS_LINEPATTERN";
778 case SVGA3D_RS_SRCBLEND: /* SVGA3dBlendOp */
779 return "SVGA3D_RS_SRCBLEND";
780 case SVGA3D_RS_DSTBLEND: /* SVGA3dBlendOp */
781 return "SVGA3D_RS_DSTBLEND";
782 case SVGA3D_RS_BLENDEQUATION: /* SVGA3dBlendEquation */
783 return "SVGA3D_RS_BLENDEQUATION";
784 case SVGA3D_RS_CULLMODE: /* SVGA3dFace */
785 return "SVGA3D_RS_CULLMODE";
786 case SVGA3D_RS_ZFUNC: /* SVGA3dCmpFunc */
787 return "SVGA3D_RS_ZFUNC";
788 case SVGA3D_RS_ALPHAFUNC: /* SVGA3dCmpFunc */
789 return "SVGA3D_RS_ALPHAFUNC";
790 case SVGA3D_RS_STENCILFUNC: /* SVGA3dCmpFunc */
791 return "SVGA3D_RS_STENCILFUNC";
792 case SVGA3D_RS_STENCILFAIL: /* SVGA3dStencilOp */
793 return "SVGA3D_RS_STENCILFAIL";
794 case SVGA3D_RS_STENCILZFAIL: /* SVGA3dStencilOp */
795 return "SVGA3D_RS_STENCILZFAIL";
796 case SVGA3D_RS_STENCILPASS: /* SVGA3dStencilOp */
797 return "SVGA3D_RS_STENCILPASS";
798 case SVGA3D_RS_ALPHAREF: /* float (0.0 .. 1.0) */
799 return "SVGA3D_RS_ALPHAREF";
800 case SVGA3D_RS_FRONTWINDING: /* SVGA3dFrontWinding */
801 return "SVGA3D_RS_FRONTWINDING";
802 case SVGA3D_RS_COORDINATETYPE: /* SVGA3dCoordinateType */
803 return "SVGA3D_RS_COORDINATETYPE";
804 case SVGA3D_RS_ZBIAS: /* float */
805 return "SVGA3D_RS_ZBIAS";
806 case SVGA3D_RS_COLORWRITEENABLE: /* SVGA3dColorMask */
807 return "SVGA3D_RS_COLORWRITEENABLE";
808 case SVGA3D_RS_VERTEXMATERIALENABLE: /* SVGA3dBool */
809 return "SVGA3D_RS_VERTEXMATERIALENABLE";
810 case SVGA3D_RS_DIFFUSEMATERIALSOURCE: /* SVGA3dVertexMaterial */
811 return "SVGA3D_RS_DIFFUSEMATERIALSOURCE";
812 case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial */
813 return "SVGA3D_RS_SPECULARMATERIALSOURCE";
814 case SVGA3D_RS_AMBIENTMATERIALSOURCE: /* SVGA3dVertexMaterial */
815 return "SVGA3D_RS_AMBIENTMATERIALSOURCE";
816 case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial */
817 return "SVGA3D_RS_EMISSIVEMATERIALSOURCE";
818 case SVGA3D_RS_TEXTUREFACTOR: /* SVGA3dColor */
819 return "SVGA3D_RS_TEXTUREFACTOR";
820 case SVGA3D_RS_LOCALVIEWER: /* SVGA3dBool */
821 return "SVGA3D_RS_LOCALVIEWER";
822 case SVGA3D_RS_SCISSORTESTENABLE: /* SVGA3dBool */
823 return "SVGA3D_RS_SCISSORTESTENABLE";
824 case SVGA3D_RS_BLENDCOLOR: /* SVGA3dColor */
825 return "SVGA3D_RS_BLENDCOLOR";
826 case SVGA3D_RS_STENCILENABLE2SIDED: /* SVGA3dBool */
827 return "SVGA3D_RS_STENCILENABLE2SIDED";
828 case SVGA3D_RS_CCWSTENCILFUNC: /* SVGA3dCmpFunc */
829 return "SVGA3D_RS_CCWSTENCILFUNC";
830 case SVGA3D_RS_CCWSTENCILFAIL: /* SVGA3dStencilOp */
831 return "SVGA3D_RS_CCWSTENCILFAIL";
832 case SVGA3D_RS_CCWSTENCILZFAIL: /* SVGA3dStencilOp */
833 return "SVGA3D_RS_CCWSTENCILZFAIL";
834 case SVGA3D_RS_CCWSTENCILPASS: /* SVGA3dStencilOp */
835 return "SVGA3D_RS_CCWSTENCILPASS";
836 case SVGA3D_RS_VERTEXBLEND: /* SVGA3dVertexBlendFlags */
837 return "SVGA3D_RS_VERTEXBLEND";
838 case SVGA3D_RS_SLOPESCALEDEPTHBIAS: /* float */
839 return "SVGA3D_RS_SLOPESCALEDEPTHBIAS";
840 case SVGA3D_RS_DEPTHBIAS: /* float */
841 return "SVGA3D_RS_DEPTHBIAS";
842 case SVGA3D_RS_OUTPUTGAMMA: /* float */
843 return "SVGA3D_RS_OUTPUTGAMMA";
844 case SVGA3D_RS_ZVISIBLE: /* SVGA3dBool */
845 return "SVGA3D_RS_ZVISIBLE";
846 case SVGA3D_RS_LASTPIXEL: /* SVGA3dBool */
847 return "SVGA3D_RS_LASTPIXEL";
848 case SVGA3D_RS_CLIPPING: /* SVGA3dBool */
849 return "SVGA3D_RS_CLIPPING";
850 case SVGA3D_RS_WRAP0: /* SVGA3dWrapFlags */
851 return "SVGA3D_RS_WRAP0";
852 case SVGA3D_RS_WRAP1: /* SVGA3dWrapFlags */
853 return "SVGA3D_RS_WRAP1";
854 case SVGA3D_RS_WRAP2: /* SVGA3dWrapFlags */
855 return "SVGA3D_RS_WRAP2";
856 case SVGA3D_RS_WRAP3: /* SVGA3dWrapFlags */
857 return "SVGA3D_RS_WRAP3";
858 case SVGA3D_RS_WRAP4: /* SVGA3dWrapFlags */
859 return "SVGA3D_RS_WRAP4";
860 case SVGA3D_RS_WRAP5: /* SVGA3dWrapFlags */
861 return "SVGA3D_RS_WRAP5";
862 case SVGA3D_RS_WRAP6: /* SVGA3dWrapFlags */
863 return "SVGA3D_RS_WRAP6";
864 case SVGA3D_RS_WRAP7: /* SVGA3dWrapFlags */
865 return "SVGA3D_RS_WRAP7";
866 case SVGA3D_RS_WRAP8: /* SVGA3dWrapFlags */
867 return "SVGA3D_RS_WRAP8";
868 case SVGA3D_RS_WRAP9: /* SVGA3dWrapFlags */
869 return "SVGA3D_RS_WRAP9";
870 case SVGA3D_RS_WRAP10: /* SVGA3dWrapFlags */
871 return "SVGA3D_RS_WRAP10";
872 case SVGA3D_RS_WRAP11: /* SVGA3dWrapFlags */
873 return "SVGA3D_RS_WRAP11";
874 case SVGA3D_RS_WRAP12: /* SVGA3dWrapFlags */
875 return "SVGA3D_RS_WRAP12";
876 case SVGA3D_RS_WRAP13: /* SVGA3dWrapFlags */
877 return "SVGA3D_RS_WRAP13";
878 case SVGA3D_RS_WRAP14: /* SVGA3dWrapFlags */
879 return "SVGA3D_RS_WRAP14";
880 case SVGA3D_RS_WRAP15: /* SVGA3dWrapFlags */
881 return "SVGA3D_RS_WRAP15";
882 case SVGA3D_RS_MULTISAMPLEANTIALIAS: /* SVGA3dBool */
883 return "SVGA3D_RS_MULTISAMPLEANTIALIAS";
884 case SVGA3D_RS_MULTISAMPLEMASK: /* uint32_t */
885 return "SVGA3D_RS_MULTISAMPLEMASK";
886 case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
887 return "SVGA3D_RS_INDEXEDVERTEXBLENDENABLE";
888 case SVGA3D_RS_TWEENFACTOR: /* float */
889 return "SVGA3D_RS_TWEENFACTOR";
890 case SVGA3D_RS_ANTIALIASEDLINEENABLE: /* SVGA3dBool */
891 return "SVGA3D_RS_ANTIALIASEDLINEENABLE";
892 case SVGA3D_RS_COLORWRITEENABLE1: /* SVGA3dColorMask */
893 return "SVGA3D_RS_COLORWRITEENABLE1";
894 case SVGA3D_RS_COLORWRITEENABLE2: /* SVGA3dColorMask */
895 return "SVGA3D_RS_COLORWRITEENABLE2";
896 case SVGA3D_RS_COLORWRITEENABLE3: /* SVGA3dColorMask */
897 return "SVGA3D_RS_COLORWRITEENABLE3";
898 case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
899 return "SVGA3D_RS_SEPARATEALPHABLENDENABLE";
900 case SVGA3D_RS_SRCBLENDALPHA: /* SVGA3dBlendOp */
901 return "SVGA3D_RS_SRCBLENDALPHA";
902 case SVGA3D_RS_DSTBLENDALPHA: /* SVGA3dBlendOp */
903 return "SVGA3D_RS_DSTBLENDALPHA";
904 case SVGA3D_RS_BLENDEQUATIONALPHA: /* SVGA3dBlendEquation */
905 return "SVGA3D_RS_BLENDEQUATIONALPHA";
906 case SVGA3D_RS_TRANSPARENCYANTIALIAS: /* SVGA3dTransparencyAntialiasType */
907 return "SVGA3D_RS_TRANSPARENCYANTIALIAS";
908 case SVGA3D_RS_LINEAA: /* SVGA3dBool */
909 return "SVGA3D_RS_LINEAA";
910 case SVGA3D_RS_LINEWIDTH: /* float */
911 return "SVGA3D_RS_LINEWIDTH";
912 default:
913 return "UNKNOWN";
914 }
915}
916
917const char *vmsvga3dTextureStateToString(SVGA3dTextureStateName textureState)
918{
919 switch (textureState)
920 {
921 case SVGA3D_TS_BIND_TEXTURE:
922 return "SVGA3D_TS_BIND_TEXTURE";
923 case SVGA3D_TS_COLOROP:
924 return "SVGA3D_TS_COLOROP";
925 case SVGA3D_TS_COLORARG1:
926 return "SVGA3D_TS_COLORARG1";
927 case SVGA3D_TS_COLORARG2:
928 return "SVGA3D_TS_COLORARG2";
929 case SVGA3D_TS_ALPHAOP:
930 return "SVGA3D_TS_ALPHAOP";
931 case SVGA3D_TS_ALPHAARG1:
932 return "SVGA3D_TS_ALPHAARG1";
933 case SVGA3D_TS_ALPHAARG2:
934 return "SVGA3D_TS_ALPHAARG2";
935 case SVGA3D_TS_ADDRESSU:
936 return "SVGA3D_TS_ADDRESSU";
937 case SVGA3D_TS_ADDRESSV:
938 return "SVGA3D_TS_ADDRESSV";
939 case SVGA3D_TS_MIPFILTER:
940 return "SVGA3D_TS_MIPFILTER";
941 case SVGA3D_TS_MAGFILTER:
942 return "SVGA3D_TS_MAGFILTER";
943 case SVGA3D_TS_MINFILTER:
944 return "SVGA3D_TS_MINFILTER";
945 case SVGA3D_TS_BORDERCOLOR:
946 return "SVGA3D_TS_BORDERCOLOR";
947 case SVGA3D_TS_TEXCOORDINDEX:
948 return "SVGA3D_TS_TEXCOORDINDEX";
949 case SVGA3D_TS_TEXTURETRANSFORMFLAGS:
950 return "SVGA3D_TS_TEXTURETRANSFORMFLAGS";
951 case SVGA3D_TS_TEXCOORDGEN:
952 return "SVGA3D_TS_TEXCOORDGEN";
953 case SVGA3D_TS_BUMPENVMAT00:
954 return "SVGA3D_TS_BUMPENVMAT00";
955 case SVGA3D_TS_BUMPENVMAT01:
956 return "SVGA3D_TS_BUMPENVMAT01";
957 case SVGA3D_TS_BUMPENVMAT10:
958 return "SVGA3D_TS_BUMPENVMAT10";
959 case SVGA3D_TS_BUMPENVMAT11:
960 return "SVGA3D_TS_BUMPENVMAT11";
961 case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:
962 return "SVGA3D_TS_TEXTURE_MIPMAP_LEVEL";
963 case SVGA3D_TS_TEXTURE_LOD_BIAS:
964 return "SVGA3D_TS_TEXTURE_LOD_BIAS";
965 case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL:
966 return "SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL";
967 case SVGA3D_TS_ADDRESSW:
968 return "SVGA3D_TS_ADDRESSW";
969 case SVGA3D_TS_GAMMA:
970 return "SVGA3D_TS_GAMMA";
971 case SVGA3D_TS_BUMPENVLSCALE:
972 return "SVGA3D_TS_BUMPENVLSCALE";
973 case SVGA3D_TS_BUMPENVLOFFSET:
974 return "SVGA3D_TS_BUMPENVLOFFSET";
975 case SVGA3D_TS_COLORARG0:
976 return "SVGA3D_TS_COLORARG0";
977 case SVGA3D_TS_ALPHAARG0:
978 return "SVGA3D_TS_ALPHAARG0";
979 default:
980 return "UNKNOWN";
981 }
982}
983
984const char *vmsvgaTransformToString(SVGA3dTransformType type)
985{
986 switch (type)
987 {
988 case SVGA3D_TRANSFORM_INVALID:
989 return "SVGA3D_TRANSFORM_INVALID";
990 case SVGA3D_TRANSFORM_WORLD:
991 return "SVGA3D_TRANSFORM_WORLD";
992 case SVGA3D_TRANSFORM_VIEW:
993 return "SVGA3D_TRANSFORM_VIEW";
994 case SVGA3D_TRANSFORM_PROJECTION:
995 return "SVGA3D_TRANSFORM_PROJECTION";
996 case SVGA3D_TRANSFORM_TEXTURE0:
997 return "SVGA3D_TRANSFORM_TEXTURE0";
998 case SVGA3D_TRANSFORM_TEXTURE1:
999 return "SVGA3D_TRANSFORM_TEXTURE1";
1000 case SVGA3D_TRANSFORM_TEXTURE2:
1001 return "SVGA3D_TRANSFORM_TEXTURE2";
1002 case SVGA3D_TRANSFORM_TEXTURE3:
1003 return "SVGA3D_TRANSFORM_TEXTURE3";
1004 case SVGA3D_TRANSFORM_TEXTURE4:
1005 return "SVGA3D_TRANSFORM_TEXTURE4";
1006 case SVGA3D_TRANSFORM_TEXTURE5:
1007 return "SVGA3D_TRANSFORM_TEXTURE5";
1008 case SVGA3D_TRANSFORM_TEXTURE6:
1009 return "SVGA3D_TRANSFORM_TEXTURE6";
1010 case SVGA3D_TRANSFORM_TEXTURE7:
1011 return "SVGA3D_TRANSFORM_TEXTURE7";
1012 case SVGA3D_TRANSFORM_WORLD1:
1013 return "SVGA3D_TRANSFORM_WORLD1";
1014 case SVGA3D_TRANSFORM_WORLD2:
1015 return "SVGA3D_TRANSFORM_WORLD2";
1016 case SVGA3D_TRANSFORM_WORLD3:
1017 return "SVGA3D_TRANSFORM_WORLD3";
1018 default:
1019 return "UNKNOWN";
1020 }
1021}
1022
1023const char *vmsvgaDeclUsage2String(SVGA3dDeclUsage usage)
1024{
1025 switch (usage)
1026 {
1027 case SVGA3D_DECLUSAGE_POSITION:
1028 return "SVGA3D_DECLUSAGE_POSITION";
1029 case SVGA3D_DECLUSAGE_BLENDWEIGHT:
1030 return "SVGA3D_DECLUSAGE_BLENDWEIGHT";
1031 case SVGA3D_DECLUSAGE_BLENDINDICES:
1032 return "SVGA3D_DECLUSAGE_BLENDINDICES";
1033 case SVGA3D_DECLUSAGE_NORMAL:
1034 return "SVGA3D_DECLUSAGE_NORMAL";
1035 case SVGA3D_DECLUSAGE_PSIZE:
1036 return "SVGA3D_DECLUSAGE_PSIZE";
1037 case SVGA3D_DECLUSAGE_TEXCOORD:
1038 return "SVGA3D_DECLUSAGE_TEXCOORD";
1039 case SVGA3D_DECLUSAGE_TANGENT:
1040 return "SVGA3D_DECLUSAGE_TANGENT";
1041 case SVGA3D_DECLUSAGE_BINORMAL:
1042 return "SVGA3D_DECLUSAGE_BINORMAL";
1043 case SVGA3D_DECLUSAGE_TESSFACTOR:
1044 return "SVGA3D_DECLUSAGE_TESSFACTOR";
1045 case SVGA3D_DECLUSAGE_POSITIONT:
1046 return "SVGA3D_DECLUSAGE_POSITIONT";
1047 case SVGA3D_DECLUSAGE_COLOR:
1048 return "SVGA3D_DECLUSAGE_COLOR";
1049 case SVGA3D_DECLUSAGE_FOG:
1050 return "SVGA3D_DECLUSAGE_FOG";
1051 case SVGA3D_DECLUSAGE_DEPTH:
1052 return "SVGA3D_DECLUSAGE_DEPTH";
1053 case SVGA3D_DECLUSAGE_SAMPLE:
1054 return "SVGA3D_DECLUSAGE_SAMPLE";
1055 default:
1056 return "UNKNOWN!!";
1057 }
1058}
1059
1060const char *vmsvgaDeclMethod2String(SVGA3dDeclMethod method)
1061{
1062 switch (method)
1063 {
1064 case SVGA3D_DECLMETHOD_DEFAULT:
1065 return "SVGA3D_DECLMETHOD_DEFAULT";
1066 case SVGA3D_DECLMETHOD_PARTIALU:
1067 return "SVGA3D_DECLMETHOD_PARTIALU";
1068 case SVGA3D_DECLMETHOD_PARTIALV:
1069 return "SVGA3D_DECLMETHOD_PARTIALV";
1070 case SVGA3D_DECLMETHOD_CROSSUV:
1071 return "SVGA3D_DECLMETHOD_CROSSUV";
1072 case SVGA3D_DECLMETHOD_UV:
1073 return "SVGA3D_DECLMETHOD_UV";
1074 case SVGA3D_DECLMETHOD_LOOKUP:
1075 return "SVGA3D_DECLMETHOD_LOOKUP";
1076 case SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED:
1077 return "SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED";
1078 default:
1079 return "UNKNOWN!!";
1080 }
1081}
1082
1083const char *vmsvgaDeclType2String(SVGA3dDeclType type)
1084{
1085 switch (type)
1086 {
1087 case SVGA3D_DECLTYPE_FLOAT1:
1088 return "SVGA3D_DECLTYPE_FLOAT1";
1089 case SVGA3D_DECLTYPE_FLOAT2:
1090 return "SVGA3D_DECLTYPE_FLOAT2";
1091 case SVGA3D_DECLTYPE_FLOAT3:
1092 return "SVGA3D_DECLTYPE_FLOAT3";
1093 case SVGA3D_DECLTYPE_FLOAT4:
1094 return "SVGA3D_DECLTYPE_FLOAT4";
1095 case SVGA3D_DECLTYPE_D3DCOLOR:
1096 return "SVGA3D_DECLTYPE_D3DCOLOR";
1097 case SVGA3D_DECLTYPE_UBYTE4:
1098 return "SVGA3D_DECLTYPE_UBYTE4";
1099 case SVGA3D_DECLTYPE_SHORT2:
1100 return "SVGA3D_DECLTYPE_SHORT2";
1101 case SVGA3D_DECLTYPE_SHORT4:
1102 return "SVGA3D_DECLTYPE_SHORT4";
1103 case SVGA3D_DECLTYPE_UBYTE4N:
1104 return "SVGA3D_DECLTYPE_UBYTE4N";
1105 case SVGA3D_DECLTYPE_SHORT2N:
1106 return "SVGA3D_DECLTYPE_SHORT2N";
1107 case SVGA3D_DECLTYPE_SHORT4N:
1108 return "SVGA3D_DECLTYPE_SHORT4N";
1109 case SVGA3D_DECLTYPE_USHORT2N:
1110 return "SVGA3D_DECLTYPE_USHORT2N";
1111 case SVGA3D_DECLTYPE_USHORT4N:
1112 return "SVGA3D_DECLTYPE_USHORT4N";
1113 case SVGA3D_DECLTYPE_UDEC3:
1114 return "SVGA3D_DECLTYPE_UDEC3";
1115 case SVGA3D_DECLTYPE_DEC3N:
1116 return "SVGA3D_DECLTYPE_DEC3N";
1117 case SVGA3D_DECLTYPE_FLOAT16_2:
1118 return "SVGA3D_DECLTYPE_FLOAT16_2";
1119 case SVGA3D_DECLTYPE_FLOAT16_4:
1120 return "SVGA3D_DECLTYPE_FLOAT16_4";
1121 default:
1122 return "UNKNOWN!!";
1123 }
1124}
1125
1126const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType)
1127{
1128 switch (PrimitiveType)
1129 {
1130 case SVGA3D_PRIMITIVE_TRIANGLELIST:
1131 return "SVGA3D_PRIMITIVE_TRIANGLELIST";
1132 case SVGA3D_PRIMITIVE_POINTLIST:
1133 return "SVGA3D_PRIMITIVE_POINTLIST";
1134 case SVGA3D_PRIMITIVE_LINELIST:
1135 return "SVGA3D_PRIMITIVE_LINELIST";
1136 case SVGA3D_PRIMITIVE_LINESTRIP:
1137 return "SVGA3D_PRIMITIVE_LINESTRIP";
1138 case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
1139 return "SVGA3D_PRIMITIVE_TRIANGLESTRIP";
1140 case SVGA3D_PRIMITIVE_TRIANGLEFAN:
1141 return "SVGA3D_PRIMITIVE_TRIANGLEFAN";
1142 default:
1143 return "UNKNOWN";
1144 }
1145}
1146
1147#endif /* LOG_ENABLED */
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette