VirtualBox

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

Last change on this file was 108903, checked in by vboxsync, 4 weeks ago

Devices/Graphics: use a helper function for calculation of surface dimensions. jiraref:VBP-1629

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