summaryrefslogtreecommitdiffstats
path: root/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c')
-rw-r--r--src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c b/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c
new file mode 100644
index 00000000..bd773f59
--- /dev/null
+++ b/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c
@@ -0,0 +1,86 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "cr_spu.h"
+#include "arrayspu.h"
+#include "cr_mem.h"
+#include <stdio.h>
+
+extern SPUNamedFunctionTable _cr_array_table[];
+
+extern SPUOptions arraySPUOptions[];
+
+static SPUFunctions array_functions = {
+ NULL, /* CHILD COPY */
+ NULL, /* DATA */
+ _cr_array_table /* THE ACTUAL FUNCTIONS */
+};
+
+static SPUFunctions *arraySPUInit( int id, SPU *child, SPU *self,
+ unsigned int context_id,
+ unsigned int num_contexts )
+{
+
+ (void) context_id;
+ (void) num_contexts;
+
+#ifdef CHROMIUM_THREADSAFE
+ crInitMutex(&_ArrayMutex);
+#endif
+
+ array_spu.id = id;
+ array_spu.has_child = 0;
+ if (child)
+ {
+ crSPUInitDispatchTable( &(array_spu.child) );
+ crSPUCopyDispatchTable( &(array_spu.child), &(child->dispatch_table) );
+ array_spu.has_child = 1;
+ }
+ crSPUInitDispatchTable( &(array_spu.super) );
+ crSPUCopyDispatchTable( &(array_spu.super), &(self->superSPU->dispatch_table) );
+ arrayspuSetVBoxConfiguration();
+
+ crStateInit();
+/** @todo seems default context ain't needed at all*/
+ array_spu.defaultctx = crStateCreateContext( NULL, 0, NULL );
+#ifdef CR_ARB_vertex_buffer_object
+ array_spu.defaultctx->bufferobject.retainBufferData = GL_TRUE;
+#endif
+ /* we call SetCurrent instead of MakeCurrent as the differencer
+ * isn't setup yet anyway */
+ crStateSetCurrent( array_spu.defaultctx );
+
+ array_spu.numContexts = 0;
+ crMemZero(array_spu.context, CR_MAX_CONTEXTS * sizeof(ContextInfo));
+
+ return &array_functions;
+}
+
+static void arraySPUSelfDispatch(SPUDispatchTable *self)
+{
+ crSPUInitDispatchTable( &(array_spu.self) );
+ crSPUCopyDispatchTable( &(array_spu.self), self );
+}
+
+static int arraySPUCleanup(void)
+{
+ return 1;
+}
+
+int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
+ SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
+ SPUOptionsPtr *options, int *flags )
+{
+ *name = "array";
+ *super = "passthrough";
+ *init = arraySPUInit;
+ *self = arraySPUSelfDispatch;
+ *cleanup = arraySPUCleanup;
+ *options = arraySPUOptions;
+ *flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
+
+ return 1;
+}