Mercurial > games > semicongine
diff fuhtark_test/include/winapi/mspcall.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fuhtark_test/include/winapi/mspcall.h Wed Nov 26 21:36:48 2025 +0700 @@ -0,0 +1,76 @@ +#ifndef __MSPCALL_H_ +#define __MSPCALL_H_ + +class ATL_NO_VTABLE CMSPCallBase : public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITStreamControl,&IID_ITStreamControl,&LIBID_TAPI3Lib> { +public: + DECLARE_POLY_AGGREGATABLE(CMSPCallBase) + BEGIN_COM_MAP(CMSPCallBase) + COM_INTERFACE_ENTRY(IDispatch) + COM_INTERFACE_ENTRY(ITStreamControl) + END_COM_MAP() + DECLARE_GET_CONTROLLING_UNKNOWN() + DECLARE_VQI() + CMSPCallBase(); + virtual ~CMSPCallBase(); + virtual ULONG MSPCallAddRef (void) = 0; + virtual ULONG MSPCallRelease (void) = 0; + STDMETHOD (CreateStream) (long lMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream); + STDMETHOD (EnumerateStreams) (IEnumStream **ppEnumStream); + STDMETHOD (RemoveStream) (ITStream *pStream) = 0; + STDMETHOD (get_Streams) (VARIANT *pStreams); + virtual HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType) = 0; + virtual HRESULT ShutDown() = 0; + virtual HRESULT ReceiveTSPCallData(PBYTE pBuffer,DWORD dwSize); + HRESULT HandleStreamEvent(MSPEVENTITEM *EventItem) const; +protected: + virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream) = 0; + virtual HRESULT CreateStreamObject(DWORD dwMediaType,TERMINAL_DIRECTION Direction,IMediaEvent *pGraph,ITStream **ppStream) = 0; +protected: + CMSPAddress *m_pMSPAddress; + MSP_HANDLE m_htCall; + DWORD m_dwMediaType; + CMSPArray <ITStream *> m_Streams; + CMSPCritSection m_lock; +}; + +class ATL_NO_VTABLE CMSPCallMultiGraph : public CMSPCallBase { +public: + typedef struct { + CMSPCallMultiGraph *pMSPCall; + ITStream *pITStream; + IMediaEvent *pIMediaEvent; + } MSPSTREAMCONTEXT,*PMSPSTREAMCONTEXT; + typedef struct _THREADPOOLWAITBLOCK { + HANDLE hWaitHandle; + MSPSTREAMCONTEXT *pContext; + WINBOOL operator ==(struct _THREADPOOLWAITBLOCK &t) { return ((hWaitHandle==t.hWaitHandle) && (pContext==t.pContext)); } + } THREADPOOLWAITBLOCK,*PTHREADPOOLWAITBLOCK; +public: + CMSPCallMultiGraph(); + virtual ~CMSPCallMultiGraph(); + STDMETHOD (RemoveStream) (ITStream *ppStream); + HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType); + HRESULT ShutDown(); + static VOID NTAPI DispatchGraphEvent(VOID *pContext,BOOLEAN bFlag); + virtual VOID HandleGraphEvent(MSPSTREAMCONTEXT *pContext); + virtual HRESULT ProcessGraphEvent(ITStream *pITStream,long lEventCode,LONG_PTR lParam1,LONG_PTR lParam2); +protected: + HRESULT RegisterWaitEvent(IMediaEvent *pIMediaEvent,ITStream *pITStream); + HRESULT UnregisterWaitEvent(int index); + virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream); +protected: + CMSPArray <THREADPOOLWAITBLOCK> m_ThreadPoolWaitBlocks; +}; + +struct MULTI_GRAPH_EVENT_DATA { + CMSPCallMultiGraph *pCall; + ITStream *pITStream; + long lEventCode; + LONG_PTR lParam1; + LONG_PTR lParam2; + IMediaEvent *pIMediaEvent; + MULTI_GRAPH_EVENT_DATA() : pIMediaEvent(NULL),pITStream(NULL),lEventCode(0),lParam1(0),lParam2(0) { } +}; + +DWORD WINAPI AsyncMultiGraphEvent(LPVOID pVoid); +#endif
