Expose wrapper C interface for Syborg from KhronosAPIWrapper. Needs update to QEMU! bug235_bringup_0
authorMatt Plumtree <matt.plumtree@nokia.com>
Tue, 02 Nov 2010 09:40:31 +0000
branchbug235_bringup_0
changeset 71 243bbc1d70db
parent 70 08233365fef6
child 72 fd0a704154b9
Expose wrapper C interface for Syborg from KhronosAPIWrapper. Needs update to QEMU! Make KhronosAPIWrapper buildable using GCC.
CMakeLists.txt
vghwinterface/vghwapiwrapper/CMakeLists.txt
vghwinterface/vghwapiwrapper/group/bld.inf
vghwinterface/vghwapiwrapper/inc/KhronosAPIWrapper.h
vghwinterface/vghwapiwrapper/inc/platformtypes.h
vghwinterface/vghwapiwrapper/inc/simulator_graphicswrapper.h
vghwinterface/vghwapiwrapper/inc/syborg-graphicswrapper.h
vghwinterface/vghwapiwrapper/src/driverapiwrapper.cpp
vghwinterface/vghwapiwrapper/src/eglapiwrapper.cpp
vghwinterface/vghwapiwrapper/src/opengles11apiwrapper.cpp
vghwinterface/vghwapiwrapper/src/openvgapiwrapper.cpp
vghwinterface/vghwapiwrapper/src/simulator_graphicswrapper.cpp
vghwinterface/vghwapiwrapper/src/syborg-graphicswrapper.cpp
--- a/CMakeLists.txt	Mon Nov 01 18:11:59 2010 +0000
+++ b/CMakeLists.txt	Tue Nov 02 09:40:31 2010 +0000
@@ -72,8 +72,7 @@
     if (SIMULATOR_EXTENSIONS)
         add_subdirectory(vghwinterface/vghwapiwrapper)	# Simulator serialization (host)
         add_dependencies(KhronosAPIWrapper libEGL libGLESv1 libGLESv2)
-        add_dependencies(syborg-graphicswrapper libEGL libGLESv1 libGLESv2)
-        set(ALL_TARGETS libEGL libOpenVG libGLESv1 libGLESv2 KhronosAPIWrapper syborg-graphicswrapper)
+        set(ALL_TARGETS libEGL libOpenVG libGLESv1 libGLESv2 KhronosAPIWrapper)
     else(SIMULATOR_EXTENSIONS)
         set(ALL_TARGETS libEGL libOpenVG libGLESv1 libGLESv2)
     endif(SIMULATOR_EXTENSIONS)
--- a/vghwinterface/vghwapiwrapper/CMakeLists.txt	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/CMakeLists.txt	Tue Nov 02 09:40:31 2010 +0000
@@ -38,7 +38,7 @@
     ${WRAPPER_INC_DIR}/openvgapiwrapper.h
     ${WRAPPER_INC_DIR}/driverapiwrapper.h
     ${WRAPPER_INC_DIR}/opengles11apiwrapper.h
-    ${WRAPPER_INC_DIR}/syborg-graphicswrapper.h
+    ${WRAPPER_INC_DIR}/simulator_graphicswrapper.h
     ${WRAPPER_INC_DIR}/hostthreadadapter.h
     ${WRAPPER_INC_DIR}/platformthreading.h
     ${WRAPPER_INC_DIR}/platformtypes.h
@@ -56,7 +56,7 @@
     ${WRAPPER_SRC_DIR}/openvgapiwrapper.cpp
     ${WRAPPER_SRC_DIR}/driverapiwrapper.cpp
     ${WRAPPER_SRC_DIR}/opengles11apiwrapper.cpp    
-    ${WRAPPER_SRC_DIR}/syborg-graphicswrapper.cpp
+    ${WRAPPER_SRC_DIR}/simulator_graphicswrapper.cpp
     ${WRAPPER_SRC_DIR}/platformthreading.cpp
 
     ${SERIALIZER_SRC_DIR}/eglrfc.cpp
@@ -77,10 +77,8 @@
 
 link_directories(${GLOBAL_LIB_DIR})
 
-add_definitions(-DKHRONOSAPIWRAPPER_EXPORTS -DSYBORG_GRAPHICSWRAPPER_EXPORTS)
+add_definitions(-DKHRONOSAPIWRAPPER_EXPORTS -DSIMULATOR_GRAPHICSWRAPPER_EXPORTS)
 
 add_library(KhronosAPIWrapper SHARED ${WRAPPER_SRC_FILES})
-add_library(syborg-graphicswrapper SHARED ${WRAPPER_SRC_FILES})
 
 target_link_libraries(KhronosAPIWrapper ${WRAPPER_PLATFORM_LINK_LIBRARIES})
-target_link_libraries(syborg-graphicswrapper ${WRAPPER_PLATFORM_LINK_LIBRARIES})
--- a/vghwinterface/vghwapiwrapper/group/bld.inf	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/group/bld.inf	Tue Nov 02 09:40:31 2010 +0000
@@ -0,0 +1,50 @@
+/* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and /or associated documentation files
+ * (the "Materials "), to deal in the Materials without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Materials,
+ * and to permit persons to whom the Materials are furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
+ * THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * Build information for host wrapper
+ */
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_EXTENSIONS
+
+// Dynamic library.
+start extension graphics_simulator/hostbuild
+option TARGET_NAME      KhronosAPIWrapper
+option TARGET_TYPE      dll
+option SOURCE_DIRS      ../src
+option SOURCE_FOLDER    ../../vghwserialiser/src
+option SOURCE           eglrfc.cpp remotefunctioncall.cpp serializedfunctioncall.cpp driverrfc.cpp opengles11rfc.cpp openvgrfc.cpp
+option INCLUDES         ../inc ../../inc ../../../inc ../../vghwserialiser/inc
+option SYS_INCLUDES     OS_LAYER_PUBLIC_EXPORT_PATH(tools)
+option MACROS           KHRONOSAPIWRAPPER_EXPORTS SIMULATOR_GRAPHICSWRAPPER_EXPORTS
+option COMPILE_OPTIONS  -msse2 -mfpmath=sse -march=pentium4
+option NO_STD_INCLUDE   ON
+option SHARED_LIBS      libEGL libGLESv1 libOpenVG
+//option SHARED_LIBS libGLESv2   (when ready)
+end
--- a/vghwinterface/vghwapiwrapper/inc/KhronosAPIWrapper.h	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/inc/KhronosAPIWrapper.h	Tue Nov 02 09:40:31 2010 +0000
@@ -54,7 +54,7 @@
 
         KhronosAPIWrapper( MGraphicsVHWCallback* aServiceIf, void* surfacebuffer,
             void* inputdata, void* outputdata );
-        ~KhronosAPIWrapper();
+        virtual ~KhronosAPIWrapper();
 
         void WorkerThread();
 
--- a/vghwinterface/vghwapiwrapper/inc/platformtypes.h	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/inc/platformtypes.h	Tue Nov 02 09:40:31 2010 +0000
@@ -26,7 +26,7 @@
 #endif
 
 
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUG__)
 
 #if !defined(__STDC_CONSTANT_MACROS) && !defined(HAVE_STDINT_H)
 #define __STDC_CONSTANT_MACROS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vghwinterface/vghwapiwrapper/inc/simulator_graphicswrapper.h	Tue Nov 02 09:40:31 2010 +0000
@@ -0,0 +1,47 @@
+#ifndef _SIMULATOR_GRAPHICSWRAPPER_H
+#define _SIMULATOR_GRAPHICSWRAPPER_H
+
+#pragma once
+					  
+#ifdef WIN32
+#ifdef SIMULATOR_GRAPHICSWRAPPER_EXPORTS
+#define SIMULATOR_GRAPHICSWRAPPER_API __declspec(dllexport)
+#else
+#define SIMULATOR_GRAPHICSWRAPPER_API __declspec(dllimport)
+#endif
+#else
+#define SIMULATOR_GRAPHICSWRAPPER_API
+#endif
+
+Psu::PLATFORM_SEMAPHORE_T m_outputBufferSemaphore;
+int (*m_pythonCallBack)(int); 
+KhronosAPIWrapper* m_wrapper;
+														   
+
+// Derived from GraphicsVirtualHW.lisa
+static const int VVHW_BUFFER (0x3000000);
+static const int VVHW_INPUT_BUFFER (0x1000000);
+static const int VVHW_INPUT_BASE(0x0);
+static const int VVHW_OUTPUT_BUFFER (0x1000000);
+static const int VVHW_OUTPUT_BASE(0x1000000);
+static const int VVHW_FRAME_BUFFER (0x1000000);
+static const int VVHW_FRAME_BASE(0x2000000);
+
+class SimulatorGraphicsWrapper : public MGraphicsVHWCallback
+    {
+    public:
+
+        SimulatorGraphicsWrapper();
+        ~SimulatorGraphicsWrapper();
+
+        int Reset( uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase );
+
+        virtual void LockOutputBuffer();
+	    virtual void ReleaseOutputBuffer();
+	    virtual void ProcessingDone(int i);
+
+    private:
+    };
+
+
+#endif // _SIMULATOR_GRAPHICSWRAPPER_H
--- a/vghwinterface/vghwapiwrapper/inc/syborg-graphicswrapper.h	Mon Nov 01 18:11:59 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-#ifndef _SYBORG_GRAPHICSWRAPPER_H
-#define _SYBORG_GRAPHICSWRAPPER_H
-
-#pragma once
-					  
-#ifdef WIN32
-#ifdef SYBORG_GRAPHICSWRAPPER_EXPORTS
-#define SYBORG_GRAPHICSWRAPPER_API __declspec(dllexport)
-#else
-#define SYBORG_GRAPHICSWRAPPER_API __declspec(dllimport)
-#endif
-#else
-#define SYBORG_GRAPHICSWRAPPER_API
-#endif
-
-Psu::PLATFORM_SEMAPHORE_T m_outputBufferSemaphore;
-int (*m_pythonCallBack)(int); 
-KhronosAPIWrapper* m_wrapper;
-														   
-
-// Derived from GraphicsVirtualHW.lisa
-static const int VVHW_BUFFER (0x3000000);
-static const int VVHW_INPUT_BUFFER (0x1000000);
-static const int VVHW_INPUT_BASE(0x0);
-static const int VVHW_OUTPUT_BUFFER (0x1000000);
-static const int VVHW_OUTPUT_BASE(0x1000000);
-static const int VVHW_FRAME_BUFFER (0x1000000);
-static const int VVHW_FRAME_BASE(0x2000000);
-
-class SyborgGraphicsWrapper : public MGraphicsVHWCallback
-    {
-    public:
-
-        SyborgGraphicsWrapper();
-        ~SyborgGraphicsWrapper();
-
-        int Reset( uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase );
-
-        virtual void LockOutputBuffer();
-	    virtual void ReleaseOutputBuffer();
-	    virtual void ProcessingDone(int i);
-
-    private:
-    };
-
-
-#endif // _SYBORG_GRAPHICSWRAPPER_H
\ No newline at end of file
--- a/vghwinterface/vghwapiwrapper/src/driverapiwrapper.cpp	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/src/driverapiwrapper.cpp	Tue Nov 02 09:40:31 2010 +0000
@@ -245,13 +245,6 @@
 
 	::eglMakeCurrent( m_Dpy, m_DudSurface, m_DudSurface, m_PoolContext );
 
-	//eglCreatePbufferSurface
-	EGLint pbuffer_surface_attribs[] =
-	{
-      EGL_WIDTH,    w,
-	  EGL_HEIGHT,   h,
-      EGL_NONE
-	};
 	VGImageFormat format = getVGColorFormat( pixelformat );
 	img = ::vgCreateImage(format, w, h, VG_IMAGE_QUALITY_NONANTIALIASED);//todo: quality; how to decide (TSgImageInfo only provides w,h, pixelformat)?
 		if( img != VG_INVALID_HANDLE )
--- a/vghwinterface/vghwapiwrapper/src/eglapiwrapper.cpp	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/src/eglapiwrapper.cpp	Tue Nov 02 09:40:31 2010 +0000
@@ -61,7 +61,9 @@
 {
     TRACE("EGLAPIWrapper::WriteReply()\n");
 #ifdef LOG_ERROR
+#ifdef PRINT_TRACES
 	int operationid = (int)m_currentFunctionCall.Data().Header().iOpCode;
+#endif
 	int eglerror = ::eglSimulatorGetError();
 	if ( m_lastEglError != eglerror )
 	{
@@ -573,7 +575,6 @@
     EGLDisplay dpy;
     EGLConfig config;
     EGLContext share_context;
-	EGLBoolean sgSupporting(EGL_FALSE);
 
     m_currentFunctionCall.GetEGLDisplay( dpy, 0 );
     m_currentFunctionCall.GetEGLConfig( config, 1 );
@@ -926,7 +927,6 @@
 
 	//For storing all the configs
 	EGLConfig*  allConfigs = 0;
-	EGLint      allConfigsSize = 0;//size of the array
 	EGLint      allConfigsCnt = 0;//Number of actually received configurations
 
 	//Allocate temporary storage for the attributes for each config
--- a/vghwinterface/vghwapiwrapper/src/opengles11apiwrapper.cpp	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/src/opengles11apiwrapper.cpp	Tue Nov 02 09:40:31 2010 +0000
@@ -526,7 +526,9 @@
 int OGLES11Wrapper::WriteReply()
 {
 #ifdef LOG_ERROR
+#ifdef PRINT_TRACES
     int operationid = (int)m_currentFunctionCall.Data().Header().iOpCode;
+#endif
     
     int glerror = ::glGetError();
     if ( m_lastGlError != glerror )
--- a/vghwinterface/vghwapiwrapper/src/openvgapiwrapper.cpp	Mon Nov 01 18:11:59 2010 +0000
+++ b/vghwinterface/vghwapiwrapper/src/openvgapiwrapper.cpp	Tue Nov 02 09:40:31 2010 +0000
@@ -2170,4 +2170,4 @@
             break;
     }
     return ret;
-}
\ No newline at end of file
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vghwinterface/vghwapiwrapper/src/simulator_graphicswrapper.cpp	Tue Nov 02 09:40:31 2010 +0000
@@ -0,0 +1,150 @@
+// This is the main DLL file.
+
+#include "platformtypes.h"
+#include <KhronosAPIWrapper.h>
+#include <guestvideodriverinterfaceconstants.h>  //Registers and enums 
+#include <platformthreading.h>  //mutex
+#include <graphicsvhwcallback.h>
+#include "simulator_graphicswrapper.h"
+
+SimulatorGraphicsWrapper::SimulatorGraphicsWrapper()
+    {															
+    }
+
+SimulatorGraphicsWrapper::~SimulatorGraphicsWrapper()
+    {
+    delete m_wrapper;
+    m_wrapper = 0;
+
+    Psu::platform_release_semaphore(m_outputBufferSemaphore);
+    }
+
+int SimulatorGraphicsWrapper::Reset( uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase )
+    {
+    int ret = -1;
+    if ( m_wrapper )
+        {
+        delete m_wrapper;
+	    }
+    m_wrapper = NULL;
+
+    uint8_t *cmd_buffer = (uint8_t *)aCommandMemBase;
+    uint8_t *frame_buffer = (uint8_t *)aGraphicsMemBase;
+    if( (cmd_buffer != NULL) && (frame_buffer != NULL) )
+        {
+        m_wrapper = new KhronosAPIWrapper( (MGraphicsVHWCallback*)this,
+            frame_buffer, &cmd_buffer[VVHW_INPUT_BASE], &cmd_buffer[VVHW_OUTPUT_BASE] );
+        //Reset synchronisation mechanisms
+        Psu::platform_release_semaphore(m_outputBufferSemaphore);
+        Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
+        ret = 0;
+        }
+    else
+        {
+        ret = -1;
+        }
+    return ret;
+    }
+
+void SimulatorGraphicsWrapper::LockOutputBuffer()
+    {
+    #ifdef KHRONOS_API_W_MULTITHREAD
+    Psu::platform_wait_for_signal(m_outputBufferSemaphore);
+    #endif
+    }
+
+void SimulatorGraphicsWrapper::ReleaseOutputBuffer(){}
+
+void SimulatorGraphicsWrapper::ProcessingDone(int i)
+    {
+    m_pythonCallBack( i );
+    }
+
+extern "C"
+    {
+    SIMULATOR_GRAPHICSWRAPPER_API SimulatorGraphicsWrapper* create_SimulatorGraphicsWrapper()
+        {
+        return new SimulatorGraphicsWrapper();
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API int initialize_SimulatorGraphicsWrapper( SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
+        // Change to proper error handling
+        return 0;
+        }
+
+    SIMULATOR_GRAPHICSWRAPPER_API int set_GraphicsCallBack( SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, int (*aGraphicsCallBack) (int) )
+        {
+        m_pythonCallBack = aGraphicsCallBack;
+        // Change to proper error handling
+        return 0;
+        }
+
+    SIMULATOR_GRAPHICSWRAPPER_API int reset_SimulatorGraphicsWrapper(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase )
+        {
+        return aSimulatorGraphicsWrapper->Reset( aGraphicsMemBase, aCommandMemBase );
+        }
+
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_InputBufferTail(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        return m_wrapper->InputBufferTail();
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_InputBufferHead(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        return m_wrapper->InputBufferHead( );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_InputBufferReadCount(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        return m_wrapper->InputBufferReadCount( );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_InputBufferWriteCount(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        return m_wrapper->InputBufferWriteCount( );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_InputMaxTailIndex(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        return m_wrapper->InputMaxTailIndex( );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_cmd_memsize( void )
+        {
+        return (VVI_PARAMETERS_INPUT_MEMORY_SIZE +
+                VVI_PARAMETERS_OUTPUT_MEMORY_SIZE);
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API uint32_t get_framebuffer_memsize( void )
+        {
+        return VVI_SURFACEBUFFER_BASE_ADDRESS;
+        }
+
+    
+    SIMULATOR_GRAPHICSWRAPPER_API unsigned int execute_command(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        return m_wrapper->Execute( );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API void set_InputBufferTail(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, uint32_t aVal )
+        {
+        m_wrapper->SetInputBufferTail( aVal );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API void set_InputBufferHead(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, uint32_t aVal )
+        {
+        m_wrapper->SetInputBufferHead( aVal );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API void set_InputBufferReadCount(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, uint32_t aVal )
+        {
+        m_wrapper->SetInputBufferReadCount( aVal );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API void set_InputBufferWriteCount(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, uint32_t aVal )
+        {
+        m_wrapper->SetInputBufferWriteCount( aVal );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API void set_InputMaxTailIndex(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper, uint32_t aVal )
+        {
+        m_wrapper->SetInputMaxTailIndex( aVal );
+        }
+    SIMULATOR_GRAPHICSWRAPPER_API void signal_outputbuffer_semafore(  SimulatorGraphicsWrapper* aSimulatorGraphicsWrapper )
+        {
+        #ifdef KHRONOS_API_W_MULTITHREAD
+            Psu::platform_signal_semaphore(m_outputBufferSemaphore);
+        #endif
+        }
+
+    }
--- a/vghwinterface/vghwapiwrapper/src/syborg-graphicswrapper.cpp	Mon Nov 01 18:11:59 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-// This is the main DLL file.
-
-#include "platformtypes.h"
-#include <KhronosAPIWrapper.h>
-#include <guestvideodriverinterfaceconstants.h>  //Registers and enums 
-#include <platformthreading.h>  //mutex
-#include <graphicsvhwcallback.h>
-#include "syborg-graphicswrapper.h"
-
-SyborgGraphicsWrapper::SyborgGraphicsWrapper()
-    {															
-    }
-
-SyborgGraphicsWrapper::~SyborgGraphicsWrapper()
-    {
-    delete m_wrapper;
-    m_wrapper = 0;
-
-    Psu::platform_release_semaphore(m_outputBufferSemaphore);
-    }
-
-int SyborgGraphicsWrapper::Reset( uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase )
-    {
-    int ret = -1;
-    if ( m_wrapper )
-        {
-        delete m_wrapper;
-	    }
-    m_wrapper = NULL;
-
-    uint8_t *cmd_buffer = (uint8_t *)aCommandMemBase;
-    uint8_t *frame_buffer = (uint8_t *)aGraphicsMemBase;
-    if( (cmd_buffer != NULL) && (frame_buffer != NULL) )
-        {
-        m_wrapper = new KhronosAPIWrapper( (MGraphicsVHWCallback*)this,
-            frame_buffer, &cmd_buffer[VVHW_INPUT_BASE], &cmd_buffer[VVHW_OUTPUT_BASE] );
-        //Reset synchronisation mechanisms
-        Psu::platform_release_semaphore(m_outputBufferSemaphore);
-        Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
-        ret = 0;
-        }
-    else
-        {
-        ret = -1;
-        }
-    return ret;
-    }
-
-void SyborgGraphicsWrapper::LockOutputBuffer()
-    {
-    #ifdef KHRONOS_API_W_MULTITHREAD
-    Psu::platform_wait_for_signal(m_outputBufferSemaphore);
-    #endif
-    }
-
-void SyborgGraphicsWrapper::ReleaseOutputBuffer(){}
-
-void SyborgGraphicsWrapper::ProcessingDone(int i)
-    {
-    m_pythonCallBack( i );
-    }
-
-extern "C"
-    {
-    SYBORG_GRAPHICSWRAPPER_API SyborgGraphicsWrapper* create_SyborgGraphicsWrapper()
-        {
-        return new SyborgGraphicsWrapper();
-        }
-    SYBORG_GRAPHICSWRAPPER_API int initialize_SyborgGraphicsWrapper( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
-        // Change to proper error handling
-        return 0;
-        }
-
-    SYBORG_GRAPHICSWRAPPER_API int set_GraphicsCallBack( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, int (*aGraphicsCallBack) (int) )
-        {
-        m_pythonCallBack = aGraphicsCallBack;
-        // Change to proper error handling
-        return 0;
-        }
-
-    SYBORG_GRAPHICSWRAPPER_API int reset_SyborgGraphicsWrapper(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase )
-        {
-        return aSyborgGraphicsWrapper->Reset( aGraphicsMemBase, aCommandMemBase );
-        }
-
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferTail(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        return m_wrapper->InputBufferTail();
-        }
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferHead(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        return m_wrapper->InputBufferHead( );
-        }
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferReadCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        return m_wrapper->InputBufferReadCount( );
-        }
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferWriteCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        return m_wrapper->InputBufferWriteCount( );
-        }
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputMaxTailIndex(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        return m_wrapper->InputMaxTailIndex( );
-        }
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_cmd_memsize( void )
-        {
-        return (VVI_PARAMETERS_INPUT_MEMORY_SIZE +
-                VVI_PARAMETERS_OUTPUT_MEMORY_SIZE);
-        }
-    SYBORG_GRAPHICSWRAPPER_API uint32_t get_framebuffer_memsize( void )
-        {
-        return VVI_SURFACEBUFFER_BASE_ADDRESS;
-        }
-
-    
-    SYBORG_GRAPHICSWRAPPER_API unsigned int execute_command(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        return m_wrapper->Execute( );
-        }
-    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferTail(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
-        {
-        m_wrapper->SetInputBufferTail( aVal );
-        }
-    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferHead(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
-        {
-        m_wrapper->SetInputBufferHead( aVal );
-        }
-    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferReadCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
-        {
-        m_wrapper->SetInputBufferReadCount( aVal );
-        }
-    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferWriteCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
-        {
-        m_wrapper->SetInputBufferWriteCount( aVal );
-        }
-    SYBORG_GRAPHICSWRAPPER_API void set_InputMaxTailIndex(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
-        {
-        m_wrapper->SetInputMaxTailIndex( aVal );
-        }
-    SYBORG_GRAPHICSWRAPPER_API void signal_outputbuffer_semafore(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
-        {
-        #ifdef KHRONOS_API_W_MULTITHREAD
-            Psu::platform_signal_semaphore(m_outputBufferSemaphore);
-        #endif
-        }
-
-    }