add place-holder directory for the a3000 wd533c93 scsi controller implementation.
[AROS.git] / workbench / hidds / vmwaresvga / vmwaresvga_gallium_screen.c
blob9d7b568b91f151701a3c00345d2bfec28e077a86
1 /*
2 Copyright 2019, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <aros/debug.h>
8 #include <proto/exec.h>
9 #include <proto/graphics.h>
10 #include <proto/utility.h>
11 #include <proto/oop.h>
13 #include <aros/libcall.h>
14 #include <aros/asmcall.h>
15 #include <aros/symbolsets.h>
16 #include <utility/tagitem.h>
18 #include <hidd/gallium.h>
19 #include <gallium/gallium.h>
21 #include "vmwaresvga_intern.h"
23 #include "svga3d_surfacedefs.h"
25 // ****************************************************************************
26 // winsys screen support functions
27 // ****************************************************************************
29 static SVGA3dHardwareVersion VMWareSVGA_WSScr_GetHWVersion(struct svga_winsys_screen *sws)
31 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
32 SVGA3dHardwareVersion retval;
34 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
36 if (sws->have_gb_objects)
38 retval = SVGA3D_HWVERSION_WS8_B1;
40 else
42 volatile ULONG *fifo = data->hwdata->mmiobase;
43 if (data->hwdata->fifocapabilities & SVGA_FIFO_CAP_3D_HWVERSION_REVISED)
44 retval = (SVGA3dHardwareVersion)fifo[SVGA_FIFO_3D_HWVERSION_REVISED];
45 else
46 retval = (SVGA3dHardwareVersion)fifo[SVGA_FIFO_3D_HWVERSION];
49 D(bug("[VMWareSVGA:Gallium] %s: returning #%08x\n", __func__, retval);)
51 return retval;
54 static void VMWareSVGA_WSScr_CopyDev3DCaps(struct HIDDGalliumVMWareSVGAData *data, ULONG capcnt)
56 int i;
58 D(bug("[VMWareSVGA:Gallium] %s(%d)\n", __func__, capcnt);)
60 if (capcnt > SVGA3D_DEVCAP_MAX)
61 capcnt = SVGA3D_DEVCAP_MAX;
63 D(bug("[VMWareSVGA:Gallium] %s: copying %d capabilities ...\n", __func__, capcnt);)
65 for (i = 0; i < capcnt; ++i) {
66 if (i == SVGA3D_DEVCAP_DEAD5) // SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES is deprecated
68 data->cap_3d[i].has_cap = FALSE;
69 data->cap_3d[i].result = (SVGA3dDevCapResult)0;
70 D(bug("[VMWareSVGA:Gallium] %s: ** deprecated\n", __func__);)
72 else
74 data->cap_3d[i].has_cap = TRUE;
75 vmwareWriteReg(data->hwdata, SVGA_REG_DEV_CAP, i);
76 data->cap_3d[i].result = (SVGA3dDevCapResult)vmwareReadReg(data->hwdata, SVGA_REG_DEV_CAP);
77 D(bug("[VMWareSVGA:Gallium] %s: %08x\n", __func__, data->cap_3d[i].result);)
82 static void VMWareSVGA_WSScr_InitHW3DCaps(struct HIDDGalliumVMWareSVGAData *data)
84 ULONG cap_count;
86 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__);)
88 if ((data->use_gbobjects) && (data->hwdata->capabilities & SVGA_CAP_GBOBJECTS))
90 cap_count = SVGA3D_DEVCAP_MAX;
91 data->size_3dcaps = cap_count * sizeof(ULONG);
93 else
95 cap_count = (SVGA_FIFO_3D_CAPS_LAST - SVGA_FIFO_3D_CAPS + 1);
96 data->size_3dcaps = cap_count * sizeof(ULONG);
99 D(bug("[VMWareSVGA:Gallium] %s: cap size = %d\n", __func__, data->size_3dcaps);)
101 data->cap_3d = AllocMem((cap_count * sizeof(struct VMWareSVGA3DCap)), MEMF_CLEAR|MEMF_ANY);
103 D(bug("[VMWareSVGA:Gallium] %s: cap_3d[%d] allocated @ 0x%p\n", __func__, cap_count, data->cap_3d);)
104 if ((data->use_gbobjects) && (data->hwdata->capabilities & SVGA_CAP_GBOBJECTS)) {
105 VMWareSVGA_WSScr_CopyDev3DCaps(data, cap_count);
106 } else {
107 volatile ULONG *fifo = data->hwdata->mmiobase;
108 int i;
110 for (i = 0; i < cap_count; i++)
112 data->cap_3d[i].has_cap = TRUE;
113 data->cap_3d[i].result = (SVGA3dDevCapResult)fifo[SVGA_FIFO_3D_CAPS + i];
117 if (data->hwdata->capabilities & SVGA_CAP_GBOBJECTS) {
118 data->hwdata->txrmax = vmwareReadReg(data->hwdata, SVGA_REG_MOB_MAX_SIZE);
120 else
121 data->hwdata->txrmax = VMW_MAX_DEFAULT_TEXTURE_SIZE;
123 D(bug("[VMWareSVGA:Gallium] %s: max texture size = %d\n", __func__, data->hwdata->txrmax);)
126 static boolean VMWareSVGA_WSScr_GetCap(struct svga_winsys_screen *sws,
127 SVGA3dDevCapIndex index,
128 SVGA3dDevCapResult *result)
130 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
132 D(bug("[VMWareSVGA:Gallium] %s(%d)\n", __func__, index);)
134 if ((index > (data->size_3dcaps / sizeof(ULONG))) ||
135 (index >= SVGA3D_DEVCAP_MAX) ||
136 (!data->cap_3d[index].has_cap))
138 D(bug("[VMWareSVGA:Gallium] %s: unsupported\n", __func__);)
139 return FALSE;
142 *result = data->cap_3d[index].result;
143 D(bug("[VMWareSVGA:Gallium] %s: returning %08x\n", __func__, *result);)
145 return TRUE;
148 /******************************/
150 static struct svga_winsys_buffer *VMWareSVGA_WSScr_BufferCreate( struct svga_winsys_screen *sws,
151 unsigned alignment,
152 unsigned usage,
153 unsigned size )
155 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
156 struct VMWareSVGAPBBuf *buf;
158 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
160 buf = CALLOC_STRUCT(VMWareSVGAPBBuf);
162 buf->allocated_size = size + alignment;
163 if( !(buf->allocated_map = VMWareSVGA_MemAlloc(data->hwdata, buf->allocated_size) ) )
165 FREE(buf);
166 return NULL;
168 if (alignment)
169 buf->map = (APTR)(((IPTR)buf->allocated_map + (alignment - 1)) & ~(alignment - 1));
170 else
171 buf->map = buf->allocated_map;
172 buf->size = size;
174 return (struct svga_winsys_buffer *)buf;
177 static void *VMWareSVGA_WSScr_BufferMap( struct svga_winsys_screen *sws,
178 struct svga_winsys_buffer *buf,
179 unsigned usage )
181 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
182 return ((struct VMWareSVGAPBBuf *)(buf))->map;
185 static void VMWareSVGA_WSScr_BufferUnMap( struct svga_winsys_screen *sws,
186 struct svga_winsys_buffer *buf )
188 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
191 static void VMWareSVGA_WSScr_BufferDestroy( struct svga_winsys_screen *sws,
192 struct svga_winsys_buffer *buf )
194 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
195 struct VMWareSVGAPBBuf *pbuf = (struct VMWareSVGAPBBuf *)buf;
197 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
199 if (pbuf->allocated_map)
200 VMWareSVGA_MemFree(data->hwdata, pbuf->allocated_map, pbuf->allocated_size);
201 FREE(pbuf);
204 /******************************/
206 static struct svga_winsys_context *VMWareSVGA_WSScr_ContextCreate(struct svga_winsys_screen *sws)
208 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
209 struct HIDDGalliumVMWareSVGACtx *hiddwsctx;
210 struct svga_winsys_context *wsctx;
212 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
214 hiddwsctx = CALLOC_STRUCT(HIDDGalliumVMWareSVGACtx);
215 wsctx = &hiddwsctx->wscbase;
216 hiddwsctx->wscsws = sws;
218 D(bug("[VMWareSVGA:Gallium] %s: svga_winsys_context @ 0x%p\n", __func__, wsctx));
220 hiddwsctx->command = &data->hwdata->fifocmdbuf;
221 D(bug("[VMWareSVGA:Gallium] %s: FIFO Reserve @ 0x%p, buffer @ 0x%p\n", __func__, hiddwsctx->command, hiddwsctx->command->buffer));
223 VMWareSVGA_WSCtx_WinSysInit(data, hiddwsctx);
224 if (wsctx->cid == -1)
226 D(bug("[VMWareSVGA:Gallium] %s: Failed to allocate a hardware context!!\n", __func__));
227 FREE(hiddwsctx);
228 return NULL;
230 return wsctx;
233 ULONG VMWareSVGA_DefineSurface(struct HIDDGalliumVMWareSVGAData *data, struct svga_winsys_surface *srf, SVGA3dSize size, SVGA3dSurfaceAllFlags flags, SVGA3dSurfaceFormat format, uint32 numMipLevels)
235 ULONG sid = ++data->srfcnt;
236 SVGA3dCmdHeader *header;
237 SVGA3dCmdDefineSurface *cmd;
238 SVGA3dSize *mipSizes;
239 SVGA3dSurfaceFace *faces;
240 int i;
242 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
244 header = reserveVMWareSVGAFIFO(data->hwdata, sizeof *header + sizeof *cmd +
245 sizeof *mipSizes * numMipLevels);
247 header->id = SVGA_3D_CMD_SURFACE_DEFINE;
248 header->size = sizeof *cmd;
249 cmd = (SVGA3dCmdDefineSurface *)&header[1];
251 cmd->sid = sid;
252 cmd->surfaceFlags = flags;
253 cmd->format = format;
255 faces = &cmd->face[0];
256 mipSizes = (SVGA3dSize*) &cmd[1];
257 memset(faces, 0, sizeof *faces * SVGA3D_MAX_SURFACE_FACES);
258 memset(mipSizes, 0, sizeof *mipSizes * numMipLevels);
260 faces[0].numMipLevels = numMipLevels;
262 for (i = 0; i < numMipLevels; i++)
264 mipSizes[i].width = size.width;
265 mipSizes[i].height = size.height;
266 mipSizes[i].depth = size.depth;
268 commitVMWareSVGAFIFO(data->hwdata, data->hwdata->fifocmdbuf.reserved);
270 D(bug("[VMWareSVGA:Gallium] %s: returning %d\n", __func__, sid));
272 return sid;
275 static struct svga_winsys_surface *VMWareSVGA_WSScr_SurfaceCreate(
276 struct svga_winsys_screen *sws,
277 SVGA3dSurfaceAllFlags flags,
278 SVGA3dSurfaceFormat format,
279 unsigned usage,
280 SVGA3dSize size,
281 uint32 numLayers,
282 uint32 numMipLevels,
283 unsigned sampleCount)
285 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
286 struct HIDDGalliumVMWareSVGASurf *surface = NULL;
287 struct pb_buffer *pb_buf;
289 uint32_t buffer_size;
290 uint32_t num_samples = 1;
292 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
294 surface = CALLOC_STRUCT(HIDDGalliumVMWareSVGASurf);
295 D(bug("[VMWareSVGA:Gallium] %s: HIDDGalliumVMWareSVGASurf @ 0x%p\n", __func__, surface));
297 pipe_reference_init(&surface->refcnt, 1);
300 * Used for the backing buffer GB surfaces, and to approximate
301 * when to flush on non-GB hosts.
303 buffer_size = svga3dsurface_get_serialized_size_extended(format, size,
304 numMipLevels,
305 numLayers,
306 num_samples);
307 if (flags & SVGA3D_SURFACE_BIND_STREAM_OUTPUT)
308 buffer_size += sizeof(SVGA3dDXSOState);
310 if (buffer_size <= data->hwdata->txrmax) {
311 D(bug("[VMWareSVGA:Gallium] %s: buffsize = %d\n", __func__, buffer_size));
313 // allocate page aligned gfx memory
314 surface->surfbuf = VMWareSVGA_WSScr_BufferCreate(sws, 4096,
316 buffer_size);
318 surface->sid = VMWareSVGA_DefineSurface(data,
319 VMWareSVGA_WSSurf_WinSysSurfFromHiddSurf(surface),
320 size,
321 flags, format, numMipLevels);
323 D(bug("[VMWareSVGA:Gallium] %s: surface buffer @ 0x%p (allocated @ 0x%p, %d bytes)\n", __func__, ((struct VMWareSVGAPBBuf *)(surface->surfbuf))->map, ((struct VMWareSVGAPBBuf *)(surface->surfbuf))->allocated_map, ((struct VMWareSVGAPBBuf *)(surface->surfbuf))->allocated_size));
325 else
327 FREE(surface);
328 return NULL;
330 return VMWareSVGA_WSSurf_WinSysSurfFromHiddSurf(surface);
333 static struct svga_winsys_surface *VMWareSVGA_WSScr_SurfaceFromHandle(struct svga_winsys_screen *sws,
334 struct winsys_handle *whandle,
335 SVGA3dSurfaceFormat *format)
337 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
339 return NULL;
342 static boolean VMWareSVGA_WSScr_SurfaceGetHandle(struct svga_winsys_screen *sws,
343 struct svga_winsys_surface *surface,
344 unsigned stride,
345 struct winsys_handle *whandle)
347 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
349 return FALSE;
352 static boolean VMWareSVGA_WSScr_SurfaceIsFlushed(struct svga_winsys_screen *sws,
353 struct svga_winsys_surface *surface)
355 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
357 return TRUE;
360 static void VMWareSVGA_WSScr_SurfaceReference(struct svga_winsys_screen *sws,
361 struct svga_winsys_surface **pdst,
362 struct svga_winsys_surface *src)
364 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
366 *pdst = src;
369 static boolean VMWareSVGA_WSScr_SurfaceCanCreate(struct svga_winsys_screen *sws,
370 SVGA3dSurfaceFormat format,
371 SVGA3dSize size,
372 uint32 numLayers,
373 uint32 numMipLevels,
374 uint32 numSamples)
376 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
377 uint32_t buffer_size;
379 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
381 buffer_size = svga3dsurface_get_serialized_size(format, size,
382 numMipLevels,
383 numLayers);
384 if (numSamples > 1)
385 buffer_size *= numSamples;
387 if (buffer_size > data->hwdata->txrmax) {
388 return FALSE;
391 return TRUE;
394 static int
395 VMWareSVGA_WSScr_FenceGet(struct svga_winsys_screen *sws,
396 struct pipe_fence_handle *fence,
397 boolean duplicate)
399 return (int)(IPTR)fence;
402 static void
403 VMWareSVGA_WSScr_FenceCreate(struct svga_winsys_screen *sws,
404 struct pipe_fence_handle **fence,
405 int32_t fd)
407 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
408 *fence = (struct pipe_fence_handle *)(IPTR)fenceVMWareSVGAFIFO(data->hwdata);
411 static void VMWareSVGA_WSScr_FenceReference( struct svga_winsys_screen *sws,
412 struct pipe_fence_handle **pdst,
413 struct pipe_fence_handle *src )
415 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
416 D(bug("[VMWareSVGA:Gallium] %s: src = 0x%p\n", __func__, src));
417 D(bug("[VMWareSVGA:Gallium] %s: dst storage @ 0x%p\n", __func__, pdst));
419 *pdst = src;
422 static int VMWareSVGA_WSScr_FenceSignalled( struct svga_winsys_screen *sws,
423 struct pipe_fence_handle *fence,
424 unsigned flag )
426 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
428 return 0;
431 static int VMWareSVGA_WSScr_FenceFinish( struct svga_winsys_screen *sws,
432 struct pipe_fence_handle *fence,
433 uint64_t timeout,
434 unsigned flag )
436 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
438 return 0;
441 static struct svga_winsys_gb_shader *VMWareSVGA_WSScr_ShaderCreate(struct svga_winsys_screen *sws,
442 SVGA3dShaderType shaderType,
443 const uint32 *bytecode,
444 uint32 bytecodeLen)
446 struct HIDDGalliumVMWareSVGAData *data = VMWareSVGA_WSScr_HiddDataFromWinSys(sws);
447 struct HIDDGalliumVMWareSVGAShader *shader = NULL;
448 void *code;
450 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
452 shader = CALLOC_STRUCT(HIDDGalliumVMWareSVGAShader);
453 if(!shader)
454 return NULL;
456 pipe_reference_init(&shader->refcnt, 1);
457 shader->shaderbuf = VMWareSVGA_WSScr_BufferCreate(sws, 64,
458 SVGA_BUFFER_USAGE_SHADER,
459 bytecodeLen);
461 code = VMWareSVGA_WSScr_BufferMap(sws, shader->shaderbuf, PIPE_TRANSFER_WRITE);
462 memcpy(code, bytecode, bytecodeLen);
463 VMWareSVGA_WSScr_BufferUnMap(sws, shader->shaderbuf);
465 if (!sws->have_vgpu10) {
466 switch (shaderType) {
467 case SVGA3D_SHADERTYPE_VS:
468 D(bug("[VMWareSVGA:Gallium] %s: vertex shader", __func__);)
469 break;
470 case SVGA3D_SHADERTYPE_PS:
471 D(bug("[VMWareSVGA:Gallium] %s: pixel shader", __func__);)
472 break;
473 default:
474 bug("[VMWareSVGA:Gallium] %s: Invalid shader type.", __func__, shaderType);
475 break;
479 return VMWareSVGA_WSSurf_WinsysShaderHiddShader(shader);
482 static void VMWareSVGA_WSScr_ShaderDestroy(struct svga_winsys_screen *sws,
483 struct svga_winsys_gb_shader *shader)
485 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
488 static struct svga_winsys_gb_query *VMWareSVGA_WSScr_QueryCreate(struct svga_winsys_screen *sws, uint32 len)
490 struct svga_winsys_gb_query *query = NULL;
492 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
494 return query;
497 static void VMWareSVGA_WSScr_QueryDestroy(struct svga_winsys_screen *sws,
498 struct svga_winsys_gb_query *query)
500 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
503 static int VMWareSVGA_WSScr_QueryInit(struct svga_winsys_screen *sws,
504 struct svga_winsys_gb_query *query,
505 unsigned offset,
506 SVGA3dQueryState queryState)
508 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
510 return 0;
513 static void VMWareSVGA_WSScr_QueryGetResult(struct svga_winsys_screen *sws,
514 struct svga_winsys_gb_query *query,
515 unsigned offset,
516 SVGA3dQueryState *queryState,
517 void *result, uint32 resultLen)
519 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
522 static void VMWareSVGA_WSScr_StatsInc(enum svga_stats_count index)
524 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__);)
527 static void VMWareSVGA_WSScr_StatsTimePush(enum svga_stats_time index,
528 struct svga_winsys_stats_timeframe *tf)
530 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__);)
533 static void VMWareSVGA_WSScr_StatsTimePop()
535 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__);)
538 void VMWareSVGA_WSScr_WinSysInit(struct HIDDGalliumVMWareSVGAData * data)
540 data->wssbase.destroy = NULL;
541 data->wssbase.get_hw_version = VMWareSVGA_WSScr_GetHWVersion;
542 data->wssbase.get_cap = VMWareSVGA_WSScr_GetCap;
544 data->wssbase.context_create = VMWareSVGA_WSScr_ContextCreate;
546 data->wssbase.surface_create = VMWareSVGA_WSScr_SurfaceCreate;
547 data->wssbase.surface_is_flushed = VMWareSVGA_WSScr_SurfaceIsFlushed;
548 data->wssbase.surface_reference = VMWareSVGA_WSScr_SurfaceReference;
549 data->wssbase.surface_from_handle = VMWareSVGA_WSScr_SurfaceFromHandle;
550 data->wssbase.surface_get_handle = VMWareSVGA_WSScr_SurfaceGetHandle;
551 data->wssbase.surface_can_create = VMWareSVGA_WSScr_SurfaceCanCreate;
553 data->wssbase.buffer_create = VMWareSVGA_WSScr_BufferCreate;
554 data->wssbase.buffer_map = VMWareSVGA_WSScr_BufferMap;
555 data->wssbase.buffer_unmap = VMWareSVGA_WSScr_BufferUnMap;
556 data->wssbase.buffer_destroy = VMWareSVGA_WSScr_BufferDestroy;
558 data->wssbase.fence_get_fd = VMWareSVGA_WSScr_FenceGet;
559 data->wssbase.fence_create_fd = VMWareSVGA_WSScr_FenceCreate;
560 #if (0)
561 data->wssbase.fence_server_sync = vmw_svga_winsys_fence_server_sync;
562 #endif
563 data->wssbase.fence_reference = VMWareSVGA_WSScr_FenceReference;
564 data->wssbase.fence_signalled = VMWareSVGA_WSScr_FenceSignalled;
565 data->wssbase.fence_finish = VMWareSVGA_WSScr_FenceFinish;
567 data->wssbase.shader_create = VMWareSVGA_WSScr_ShaderCreate;
568 data->wssbase.shader_destroy = VMWareSVGA_WSScr_ShaderDestroy;
570 data->wssbase.query_create = VMWareSVGA_WSScr_QueryCreate;
571 data->wssbase.query_destroy = VMWareSVGA_WSScr_QueryDestroy;
572 data->wssbase.query_init = VMWareSVGA_WSScr_QueryInit;
573 data->wssbase.query_get_result = VMWareSVGA_WSScr_QueryGetResult;
575 data->wssbase.stats_inc = VMWareSVGA_WSScr_StatsInc;
576 data->wssbase.stats_time_push = VMWareSVGA_WSScr_StatsTimePush;
577 data->wssbase.stats_time_pop = VMWareSVGA_WSScr_StatsTimePop;
579 data->use_gbobjects = TRUE; // use Guest-backed objects...
581 data->wssbase.have_gb_objects = FALSE;
582 data->wssbase.have_gb_dma = FALSE;
583 data->wssbase.need_to_rebind_resources = FALSE;
585 data->wssbase.have_vgpu10 = FALSE;
586 data->wssbase.have_sm4_1 = FALSE;
587 data->wssbase.have_intra_surface_copy = FALSE;
589 if (data->use_gbobjects)
591 if (data->hwdata->capabilities & SVGA_CAP_GBOBJECTS)
592 data->wssbase.have_gb_objects = TRUE;
595 VMWareSVGA_WSScr_InitHW3DCaps(data);