vghwinterface/vghwapiwrapper/inc/KhronosAPIWrapper.h
branchbug235_bringup_0
changeset 53 c2ef9095503a
parent 30 f204b762818d
child 71 243bbc1d70db
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vghwinterface/vghwapiwrapper/inc/KhronosAPIWrapper.h	Wed Oct 06 17:59:01 2010 +0100
@@ -0,0 +1,125 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// 
+
+#ifndef KHRONOSAPIWRAPPER_H
+#define KHRONOSAPIWRAPPER_H
+
+#ifndef PSU_PLATFORMTHREADING_H
+#include "platformthreading.h"
+#endif
+
+#ifndef PSU_PLATFORMTYPES_H
+#include "platformtypes.h"
+#endif
+
+#include "requestbuffer.h"
+
+class APIWrapperStack;
+class RemoteFunctionCall;
+class RemoteFunctionCallData;
+class DriverAPIWrapper;
+class OpenVGAPIWrapper;
+class EGLAPIWrapper;
+class OGLES11Wrapper;
+
+#define KHRONOS_API_W_MULTITHREAD
+
+#ifdef WIN32
+#ifdef KHRONOSAPIWRAPPER_EXPORTS
+#define KHRONOSAPIWRAPPER_API __declspec(dllexport)
+#else
+#define KHRONOSAPIWRAPPER_API __declspec(dllimport)
+#endif
+#else
+#define KHRONOSAPIWRAPPER_API
+#endif
+
+class MGraphicsVHWCallback;
+
+class KHRONOSAPIWRAPPER_API KhronosAPIWrapper: private MRequestBufferBookKeepingReader
+{
+    public:
+
+        KhronosAPIWrapper( MGraphicsVHWCallback* aServiceIf, void* surfacebuffer,
+            void* inputdata, void* outputdata );
+        ~KhronosAPIWrapper();
+
+        void WorkerThread();
+
+        unsigned long Execute();
+        unsigned long InputParameterOffset();
+
+        void SetInputBufferTail(uint32_t p_val);
+        uint32_t InputBufferTail();
+        void SetInputBufferHead(uint32_t p_val);
+        uint32_t InputBufferHead();
+        void SetInputBufferReadCount(uint32_t p_val);
+        uint32_t InputBufferReadCount();
+        void SetInputBufferWriteCount(uint32_t p_val);
+        uint32_t InputBufferWriteCount();
+        void IncrementInputBufferReadCount( TUint32 aReadCount );
+        TUint32 InputMaxTailIndex();
+        void SetInputMaxTailIndex( TUint32 aIndex );
+
+		//For the purpose of wrappers that need each other's services
+		DriverAPIWrapper* GetDriverWrapper() { return m_DriverAPIWrapper; }
+		EGLAPIWrapper* GetEGLWrapper() { return m_EGLWrapper; }
+
+    private:
+//From MRequestBufferBookKeeping
+        TUint32 GetWriteCount();
+        void IncrementReadCount( TUint32 aReadCount );
+        TUint32 GetReadCount();
+
+        TUint32 BufferTail();
+        void SetBufferTail( TUint32 aIndex );
+        TUint32 BufferHead();
+
+        TUint32 MaxTailIndex();
+        void SetMaxTailIndex( TUint32 aIndex );
+
+    protected:
+        int HandleNextRequest();
+        bool m_initDone;
+        void* m_currentResult;
+        void* m_currentInput;
+        MGraphicsVHWCallback* iServiceIf;
+        Psu::PLATFORM_THREAD_T m_threadHandle;
+        Psu::PLATFORM_SEMAPHORE_T m_SemapHandle;
+        bool m_exit;
+        void* m_surfaceBuffer;
+
+//Input buffer
+        Psu::PLATFORM_MUTEX_T m_InputBufferMutex;
+        uint32_t m_InputBufferTail;
+        uint32_t m_InputBufferHead;
+        uint32_t m_InputBufferReadCount;
+        uint32_t m_InputbufferWriteCount;
+        uint32_t m_InputBufferMaxTailIndex;
+    private:
+        RequestBufferReader* m_InputRequestBuffer;
+        APIWrapperStack* iStack;
+		TUint32 m_lastProcessId;
+		TUint32 m_lastThreadId;
+		int m_lastVgError;
+		int m_lastEglError;
+		DriverAPIWrapper* m_DriverAPIWrapper;
+		OpenVGAPIWrapper* m_OpenVGWrapper;
+		OGLES11Wrapper* m_OGLESWrapper;
+		EGLAPIWrapper* m_EGLWrapper;
+
+		RemoteFunctionCallData* iRFCData;
+};
+#endif