//====== Copyright c 1996-2007, Valve Corporation, All rights reserved. =======// // // Purpose: // // $NoKeywords: $ // //=============================================================================// #ifndef SUBPROCESS_H #define SUBPROCESS_H #ifdef _WIN32 #pragma once #endif class SubProcessKernelObjects { friend class SubProcessKernelObjects_Memory; public: SubProcessKernelObjects( void ); ~SubProcessKernelObjects( void ); private: SubProcessKernelObjects( SubProcessKernelObjects const & ); SubProcessKernelObjects & operator =( SubProcessKernelObjects const & ); protected: BOOL Create( char const *szBaseName ); BOOL Open( char const *szBaseName ); public: BOOL IsValid( void ) const; void Close( void ); protected: HANDLE m_hMemorySection; HANDLE m_hMutex; HANDLE m_hEvent[2]; DWORD m_dwCookie; }; class SubProcessKernelObjects_Create : public SubProcessKernelObjects { public: SubProcessKernelObjects_Create( char const *szBaseName ) { Create( szBaseName ), m_dwCookie = 1; } }; class SubProcessKernelObjects_Open : public SubProcessKernelObjects { public: SubProcessKernelObjects_Open( char const *szBaseName ) { Open( szBaseName ), m_dwCookie = 0; } }; class SubProcessKernelObjects_Memory { public: SubProcessKernelObjects_Memory( SubProcessKernelObjects *p ) : m_pObjs( p ), m_pLockData( NULL ), m_pMemory( NULL ) { } ~SubProcessKernelObjects_Memory() { Unlock(); } public: void * Lock( void ); BOOL Unlock( void ); public: BOOL IsValid( void ) const { return m_pLockData != NULL; } void * GetMemory( void ) const { return m_pMemory; } protected: void *m_pMemory; private: SubProcessKernelObjects *m_pObjs; void *m_pLockData; }; // // Response implementation // class CSubProcessResponse : public CmdSink::IResponse { public: explicit CSubProcessResponse( void const *pvMemory ); ~CSubProcessResponse( void ) { } public: virtual bool Succeeded( void ) { return ( 1 == m_dwResult ); } virtual size_t GetResultBufferLen( void ) { return ( Succeeded() ? m_dwResultBufferLength : 0 ); } virtual const void * GetResultBuffer( void ) { return ( Succeeded() ? m_pvResultBuffer : NULL ); } virtual const char * GetListing( void ) { return (const char *) ( ( m_szListing && * m_szListing ) ? m_szListing : NULL ); } protected: void const *m_pvMemory; DWORD m_dwResult; DWORD m_dwResultBufferLength; void const *m_pvResultBuffer; char const *m_szListing; }; int ShaderCompile_Subprocess_Main( char const *szSubProcessData ); #endif // #ifndef SUBPROCESS_H