expose the gfx drivers memory attributes via the gfx hidd attributes.
[AROS.git] / workbench / hidds / vmwaresvga / vmwaresvga_galliumclass.c
blobd4d717003de1ee2256f0ea9a206ffc270f32da0e
1 /*
2 Copyright 2015-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 "util/u_memory.h"
24 #include "pipebuffer/pb_buffer.h"
26 struct VMWareSVGAPBBuf
28 struct pb_buffer pbbuf;
29 void *map;
32 #if (AROS_BIG_ENDIAN == 1)
33 #define AROS_PIXFMT RECTFMT_RAW /* Big Endian Archs. */
34 #else
35 #define AROS_PIXFMT RECTFMT_BGRA32 /* Little Endian Archs. */
36 #endif
39 // ****************************************************************************
40 // winsys/support functions
41 // ****************************************************************************
43 static SVGA3dHardwareVersion VMWareSVGA_GetHWVersion(struct svga_winsys_screen *sws)
45 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
47 #if (0)
48 if (sws->have_gb_objects)
50 #endif
51 D(bug("[VMWareSVGA:Gallium] %s: returning SVGA3D_HWVERSION_WS8_B1\n", __func__));
52 return SVGA3D_HWVERSION_WS8_B1;
53 #if (0)
55 return (SVGA3dHardwareVersion) vws->ioctl.hwversion;
56 #else
57 return 0;
58 #endif
61 static boolean VMWareSVGA_GetCap(struct svga_winsys_screen *sws,
62 SVGA3dDevCapIndex index,
63 SVGA3dDevCapResult *result)
65 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
67 #if (0)
68 if (index > vws->ioctl.num_cap_3d ||
69 index >= SVGA3D_DEVCAP_MAX ||
70 !vws->ioctl.cap_3d[index].has_cap)
71 #endif
72 return FALSE;
73 #if (0)
74 *result = vws->ioctl.cap_3d[index].result;
75 return TRUE;
76 #endif
79 static struct svga_winsys_context *VMWareSVGA_ContextCreate(struct svga_winsys_screen *sws)
81 struct svga_winsys_context *wsctx;
83 D(bug("[VMWareSVGA:Gallium] %s(0x%p)\n", __func__, sws));
85 wsctx = CALLOC_STRUCT(svga_winsys_context);
87 D(bug("[VMWareSVGA:Gallium] %s: svga_winsys_context @ 0x%p\n", __func__, wsctx));
89 return wsctx;
92 static struct svga_winsys_surface *VMWareSVGA_SurfaceCreate(
93 struct svga_winsys_screen *sws,
94 SVGA3dSurfaceAllFlags flags,
95 SVGA3dSurfaceFormat format,
96 unsigned usage,
97 SVGA3dSize size,
98 uint32 numLayers,
99 uint32 numMipLevels,
100 unsigned sampleCount)
102 struct svga_winsys_surface *surf = NULL;
104 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
106 #if (0)
107 surf = CALLOC_STRUCT(svga_winsys_surface);
108 #endif
110 return surf;
113 static struct svga_winsys_surface *VMWareSVGA_SurfaceFromHandle(struct svga_winsys_screen *sws,
114 struct winsys_handle *whandle,
115 SVGA3dSurfaceFormat *format)
117 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
119 return NULL;
122 static boolean VMWareSVGA_SurfaceGetHandle(struct svga_winsys_screen *sws,
123 struct svga_winsys_surface *surface,
124 unsigned stride,
125 struct winsys_handle *whandle)
127 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
129 return FALSE;
132 static boolean VMWareSVGA_SurfaceIsFlushed(struct svga_winsys_screen *sws,
133 struct svga_winsys_surface *surface)
135 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
137 return TRUE;
140 static void VMWareSVGA_SurfaceReference(struct svga_winsys_screen *sws,
141 struct svga_winsys_surface **pdst,
142 struct svga_winsys_surface *src)
144 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
147 static boolean VMWareSVGA_SurfaceCanCreate(struct svga_winsys_screen *sws,
148 SVGA3dSurfaceFormat format,
149 SVGA3dSize size,
150 uint32 numLayers,
151 uint32 numMipLevels,
152 uint32 numSamples)
154 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
156 return TRUE;
159 static struct svga_winsys_buffer *VMWareSVGA_BufferCreate( struct svga_winsys_screen *sws,
160 unsigned alignment,
161 unsigned usage,
162 unsigned size )
164 struct VMWareSVGAPBBuf *buf;
166 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
168 buf = CALLOC_STRUCT(VMWareSVGAPBBuf);
170 return (struct svga_winsys_buffer *)buf;
173 static void *VMWareSVGA_BufferMap( struct svga_winsys_screen *sws,
174 struct svga_winsys_buffer *buf,
175 unsigned usage )
177 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
178 return ((struct VMWareSVGAPBBuf *)(buf))->map;
181 static void VMWareSVGA_BufferUnMap( struct svga_winsys_screen *sws,
182 struct svga_winsys_buffer *buf )
184 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
187 static void VMWareSVGA_BufferDestroy( struct svga_winsys_screen *sws,
188 struct svga_winsys_buffer *buf )
190 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
191 FREE(buf);
194 static void VMWareSVGA_FenceReference( struct svga_winsys_screen *sws,
195 struct pipe_fence_handle **pdst,
196 struct pipe_fence_handle *src )
198 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
201 static int VMWareSVGA_FenceSignalled( struct svga_winsys_screen *sws,
202 struct pipe_fence_handle *fence,
203 unsigned flag )
205 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
207 return 0;
210 static int VMWareSVGA_FenceFinish( struct svga_winsys_screen *sws,
211 struct pipe_fence_handle *fence,
212 uint64_t timeout,
213 unsigned flag )
215 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
217 return 0;
220 static struct svga_winsys_gb_shader *VMWareSVGA_ShaderCreate(struct svga_winsys_screen *sws,
221 SVGA3dShaderType shaderType,
222 const uint32 *bytecode,
223 uint32 bytecodeLen)
225 struct svga_winsys_gb_shader *shader = NULL;
227 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
229 return shader;
232 static void VMWareSVGA_ShaderDestroy(struct svga_winsys_screen *sws,
233 struct svga_winsys_gb_shader *shader)
235 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
238 static struct svga_winsys_gb_query *VMWareSVGA_QueryCreate(struct svga_winsys_screen *sws, uint32 len)
240 struct svga_winsys_gb_query *query = NULL;
242 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
244 return query;
247 static void VMWareSVGA_QueryDestroy(struct svga_winsys_screen *sws,
248 struct svga_winsys_gb_query *query)
250 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
253 static int VMWareSVGA_QueryInit(struct svga_winsys_screen *sws,
254 struct svga_winsys_gb_query *query,
255 unsigned offset,
256 SVGA3dQueryState queryState)
258 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
260 return 0;
263 static void VMWareSVGA_QueryGetResult(struct svga_winsys_screen *sws,
264 struct svga_winsys_gb_query *query,
265 unsigned offset,
266 SVGA3dQueryState *queryState,
267 void *result, uint32 resultLen)
269 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
274 static void VMWareSVGA_StatsInc(enum svga_stats_count index)
276 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
279 static void VMWareSVGA_StatsTimePush(enum svga_stats_time index,
280 struct svga_winsys_stats_timeframe *tf)
282 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
285 static void VMWareSVGA_StatsTimePop()
287 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
291 // ****************************************************************************
292 // Gallium Hidd Methods
293 // ****************************************************************************
295 OOP_Object *METHOD(GalliumVMWareSVGA, Root, New)
297 IPTR interfaceVers;
299 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
301 interfaceVers = GetTagData(aHidd_Gallium_InterfaceVersion, -1, msg->attrList);
302 if (interfaceVers != GALLIUM_INTERFACE_VERSION)
303 return NULL;
305 o = (OOP_Object *)OOP_DoSuperMethod(cl, o, (OOP_Msg) msg);
306 if (0)
308 struct HIDDGalliumVMWareSVGAData * data = OOP_INST_DATA(cl, o);
310 data->wsi.destroy = NULL;
311 data->wsi.get_hw_version = VMWareSVGA_GetHWVersion;
312 data->wsi.get_cap = VMWareSVGA_GetCap;
314 data->wsi.context_create = VMWareSVGA_ContextCreate;
316 data->wsi.surface_create = VMWareSVGA_SurfaceCreate;
317 data->wsi.surface_is_flushed = VMWareSVGA_SurfaceIsFlushed;
318 data->wsi.surface_reference = VMWareSVGA_SurfaceReference;
319 data->wsi.surface_from_handle = VMWareSVGA_SurfaceFromHandle;
320 data->wsi.surface_get_handle = VMWareSVGA_SurfaceGetHandle;
321 data->wsi.surface_can_create = VMWareSVGA_SurfaceCanCreate;
323 data->wsi.buffer_create = VMWareSVGA_BufferCreate;
324 data->wsi.buffer_map = VMWareSVGA_BufferMap;
325 data->wsi.buffer_unmap = VMWareSVGA_BufferUnMap;
326 data->wsi.buffer_destroy = VMWareSVGA_BufferDestroy;
328 data->wsi.fence_reference = VMWareSVGA_FenceReference;
329 data->wsi.fence_signalled = VMWareSVGA_FenceSignalled;
330 data->wsi.fence_finish = VMWareSVGA_FenceFinish;
331 #if (0)
332 data->wsi.fence_get_fd = vmw_svga_winsys_fence_get_fd;
333 data->wsi.fence_create_fd = vmw_svga_winsys_fence_create_fd;
334 data->wsi.fence_server_sync = vmw_svga_winsys_fence_server_sync;
335 #endif
337 data->wsi.shader_create = VMWareSVGA_ShaderCreate;
338 data->wsi.shader_destroy = VMWareSVGA_ShaderDestroy;
340 data->wsi.query_create = VMWareSVGA_QueryCreate;
341 data->wsi.query_destroy = VMWareSVGA_QueryDestroy;
342 data->wsi.query_init = VMWareSVGA_QueryInit;
343 data->wsi.query_get_result = VMWareSVGA_QueryGetResult;
345 data->wsi.stats_inc = VMWareSVGA_StatsInc;
346 data->wsi.stats_time_push = VMWareSVGA_StatsTimePush;
347 data->wsi.stats_time_pop = VMWareSVGA_StatsTimePop;
350 return o;
353 VOID METHOD(GalliumVMWareSVGA, Root, Dispose)
355 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
357 OOP_DoSuperMethod(cl, o, (OOP_Msg)msg);
360 VOID METHOD(GalliumVMWareSVGA, Root, Get)
362 ULONG idx;
364 if (IS_GALLIUM_ATTR(msg->attrID, idx))
366 switch (idx)
368 /* Overload the property */
369 case aoHidd_Gallium_InterfaceVersion:
370 *msg->storage = GALLIUM_INTERFACE_VERSION;
371 return;
375 /* Use parent class for all other properties */
376 OOP_DoSuperMethod(cl, o, (OOP_Msg)msg);
379 APTR METHOD(GalliumVMWareSVGA, Hidd_Gallium, CreatePipeScreen)
381 struct HIDDGalliumVMWareSVGAData * data = OOP_INST_DATA(cl, o);
382 struct pipe_screen *screen = NULL;
384 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));
386 screen = svga_screen_create(&data->wsi);
388 D(bug("[VMWareSVGA:Gallium] %s: screen @ 0x%p\n", __func__, screen));
390 return screen;
394 VOID METHOD(GalliumVMWareSVGA, Hidd_Gallium, DisplayResource)
396 D(bug("[VMWareSVGA:Gallium] %s()\n", __func__));