17ec681f3Smrg/*
27ec681f3Smrg * Copyright 2013 Joakim Sindholt <opensource@zhasha.com>
37ec681f3Smrg *
47ec681f3Smrg * Permission is hereby granted, free of charge, to any person obtaining a
57ec681f3Smrg * copy of this software and associated documentation files (the "Software"),
67ec681f3Smrg * to deal in the Software without restriction, including without limitation
77ec681f3Smrg * on the rights to use, copy, modify, merge, publish, distribute, sub
87ec681f3Smrg * license, and/or sell copies of the Software, and to permit persons to whom
97ec681f3Smrg * the Software is furnished to do so, subject to the following conditions:
107ec681f3Smrg *
117ec681f3Smrg * The above copyright notice and this permission notice (including the next
127ec681f3Smrg * paragraph) shall be included in all copies or substantial portions of the
137ec681f3Smrg * Software.
147ec681f3Smrg *
157ec681f3Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
167ec681f3Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
177ec681f3Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
187ec681f3Smrg * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
197ec681f3Smrg * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
207ec681f3Smrg * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
217ec681f3Smrg * USE OR OTHER DEALINGS IN THE SOFTWARE. */
227ec681f3Smrg
237ec681f3Smrg#include "authenticatedchannel9.h"
247ec681f3Smrg#include "basetexture9.h"
257ec681f3Smrg#include "cryptosession9.h"
267ec681f3Smrg#include "cubetexture9.h"
277ec681f3Smrg#include "device9.h"
287ec681f3Smrg#include "device9ex.h"
297ec681f3Smrg#include "device9video.h"
307ec681f3Smrg#include "indexbuffer9.h"
317ec681f3Smrg#include "pixelshader9.h"
327ec681f3Smrg#include "query9.h"
337ec681f3Smrg#include "resource9.h"
347ec681f3Smrg#include "stateblock9.h"
357ec681f3Smrg#include "surface9.h"
367ec681f3Smrg#include "swapchain9.h"
377ec681f3Smrg#include "swapchain9ex.h"
387ec681f3Smrg#include "texture9.h"
397ec681f3Smrg#include "vertexbuffer9.h"
407ec681f3Smrg#include "vertexdeclaration9.h"
417ec681f3Smrg#include "vertexshader9.h"
427ec681f3Smrg#include "volume9.h"
437ec681f3Smrg#include "volumetexture9.h"
447ec681f3Smrg
457ec681f3Smrg#include "d3d9.h"
467ec681f3Smrg#include "nine_lock.h"
477ec681f3Smrg
487ec681f3Smrg#include "os/os_thread.h"
497ec681f3Smrg
507ec681f3Smrg/* Global mutex as described by MSDN */
517ec681f3Smrgstatic mtx_t d3dlock_global = _MTX_INITIALIZER_NP;
527ec681f3Smrg
537ec681f3Smrgvoid
547ec681f3SmrgNineLockGlobalMutex()
557ec681f3Smrg{
567ec681f3Smrg    mtx_lock(&d3dlock_global);
577ec681f3Smrg}
587ec681f3Smrg
597ec681f3Smrgvoid
607ec681f3SmrgNineUnlockGlobalMutex()
617ec681f3Smrg{
627ec681f3Smrg    mtx_unlock(&d3dlock_global);
637ec681f3Smrg}
647ec681f3Smrg
657ec681f3Smrgstatic HRESULT NINE_WINAPI
667ec681f3SmrgLockAuthenticatedChannel9_GetCertificateSize( struct NineAuthenticatedChannel9 *This,
677ec681f3Smrg                                              UINT *pCertificateSize )
687ec681f3Smrg{
697ec681f3Smrg    HRESULT r;
707ec681f3Smrg    mtx_lock(&d3dlock_global);
717ec681f3Smrg    r = NineAuthenticatedChannel9_GetCertificateSize(This, pCertificateSize);
727ec681f3Smrg    mtx_unlock(&d3dlock_global);
737ec681f3Smrg    return r;
747ec681f3Smrg}
757ec681f3Smrg
767ec681f3Smrgstatic HRESULT NINE_WINAPI
777ec681f3SmrgLockAuthenticatedChannel9_GetCertificate( struct NineAuthenticatedChannel9 *This,
787ec681f3Smrg                                          UINT CertifacteSize,
797ec681f3Smrg                                          BYTE *ppCertificate )
807ec681f3Smrg{
817ec681f3Smrg    HRESULT r;
827ec681f3Smrg    mtx_lock(&d3dlock_global);
837ec681f3Smrg    r = NineAuthenticatedChannel9_GetCertificate(This, CertifacteSize, ppCertificate);
847ec681f3Smrg    mtx_unlock(&d3dlock_global);
857ec681f3Smrg    return r;
867ec681f3Smrg}
877ec681f3Smrg
887ec681f3Smrgstatic HRESULT NINE_WINAPI
897ec681f3SmrgLockAuthenticatedChannel9_NegotiateKeyExchange( struct NineAuthenticatedChannel9 *This,
907ec681f3Smrg                                                UINT DataSize,
917ec681f3Smrg                                                void *pData )
927ec681f3Smrg{
937ec681f3Smrg    HRESULT r;
947ec681f3Smrg    mtx_lock(&d3dlock_global);
957ec681f3Smrg    r = NineAuthenticatedChannel9_NegotiateKeyExchange(This, DataSize, pData);
967ec681f3Smrg    mtx_unlock(&d3dlock_global);
977ec681f3Smrg    return r;
987ec681f3Smrg}
997ec681f3Smrg
1007ec681f3Smrgstatic HRESULT NINE_WINAPI
1017ec681f3SmrgLockAuthenticatedChannel9_Query( struct NineAuthenticatedChannel9 *This,
1027ec681f3Smrg                                 UINT InputSize,
1037ec681f3Smrg                                 const void *pInput,
1047ec681f3Smrg                                 UINT OutputSize,
1057ec681f3Smrg                                 void *pOutput )
1067ec681f3Smrg{
1077ec681f3Smrg    HRESULT r;
1087ec681f3Smrg    mtx_lock(&d3dlock_global);
1097ec681f3Smrg    r = NineAuthenticatedChannel9_Query(This, InputSize, pInput, OutputSize, pOutput);
1107ec681f3Smrg    mtx_unlock(&d3dlock_global);
1117ec681f3Smrg    return r;
1127ec681f3Smrg}
1137ec681f3Smrg
1147ec681f3Smrgstatic HRESULT NINE_WINAPI
1157ec681f3SmrgLockAuthenticatedChannel9_Configure( struct NineAuthenticatedChannel9 *This,
1167ec681f3Smrg                                     UINT InputSize,
1177ec681f3Smrg                                     const void *pInput,
1187ec681f3Smrg                                     D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT *pOutput )
1197ec681f3Smrg{
1207ec681f3Smrg    HRESULT r;
1217ec681f3Smrg    mtx_lock(&d3dlock_global);
1227ec681f3Smrg    r = NineAuthenticatedChannel9_Configure(This, InputSize, pInput, pOutput);
1237ec681f3Smrg    mtx_unlock(&d3dlock_global);
1247ec681f3Smrg    return r;
1257ec681f3Smrg}
1267ec681f3Smrg
1277ec681f3SmrgIDirect3DAuthenticatedChannel9Vtbl LockAuthenticatedChannel9_vtable = {
1287ec681f3Smrg    (void *)NineUnknown_QueryInterface,
1297ec681f3Smrg    (void *)NineUnknown_AddRef,
1307ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
1317ec681f3Smrg    (void *)LockAuthenticatedChannel9_GetCertificateSize,
1327ec681f3Smrg    (void *)LockAuthenticatedChannel9_GetCertificate,
1337ec681f3Smrg    (void *)LockAuthenticatedChannel9_NegotiateKeyExchange,
1347ec681f3Smrg    (void *)LockAuthenticatedChannel9_Query,
1357ec681f3Smrg    (void *)LockAuthenticatedChannel9_Configure
1367ec681f3Smrg};
1377ec681f3Smrg
1387ec681f3Smrgstatic HRESULT NINE_WINAPI
1397ec681f3SmrgLockUnknown_SetPrivateData( struct NineUnknown *This,
1407ec681f3Smrg                            REFGUID refguid,
1417ec681f3Smrg                            const void *pData,
1427ec681f3Smrg                            DWORD SizeOfData,
1437ec681f3Smrg                            DWORD Flags )
1447ec681f3Smrg{
1457ec681f3Smrg    HRESULT r;
1467ec681f3Smrg    mtx_lock(&d3dlock_global);
1477ec681f3Smrg    r = NineUnknown_SetPrivateData(This, refguid, pData, SizeOfData, Flags);
1487ec681f3Smrg    mtx_unlock(&d3dlock_global);
1497ec681f3Smrg    return r;
1507ec681f3Smrg}
1517ec681f3Smrg
1527ec681f3Smrgstatic HRESULT NINE_WINAPI
1537ec681f3SmrgLockUnknown_GetPrivateData( struct NineUnknown *This,
1547ec681f3Smrg                            REFGUID refguid,
1557ec681f3Smrg                            void *pData,
1567ec681f3Smrg                            DWORD *pSizeOfData )
1577ec681f3Smrg{
1587ec681f3Smrg    HRESULT r;
1597ec681f3Smrg    mtx_lock(&d3dlock_global);
1607ec681f3Smrg    r = NineUnknown_GetPrivateData(This, refguid, pData, pSizeOfData);
1617ec681f3Smrg    mtx_unlock(&d3dlock_global);
1627ec681f3Smrg    return r;
1637ec681f3Smrg}
1647ec681f3Smrg
1657ec681f3Smrgstatic HRESULT NINE_WINAPI
1667ec681f3SmrgLockUnknown_FreePrivateData( struct NineUnknown *This,
1677ec681f3Smrg                             REFGUID refguid )
1687ec681f3Smrg{
1697ec681f3Smrg    HRESULT r;
1707ec681f3Smrg    mtx_lock(&d3dlock_global);
1717ec681f3Smrg    r = NineUnknown_FreePrivateData(This, refguid);
1727ec681f3Smrg    mtx_unlock(&d3dlock_global);
1737ec681f3Smrg    return r;
1747ec681f3Smrg}
1757ec681f3Smrg
1767ec681f3Smrg#if 0
1777ec681f3Smrgstatic HRESULT NINE_WINAPI
1787ec681f3SmrgLockResource9_GetDevice( struct NineResource9 *This,
1797ec681f3Smrg                         IDirect3DDevice9 **ppDevice )
1807ec681f3Smrg{
1817ec681f3Smrg    HRESULT r;
1827ec681f3Smrg    mtx_lock(&d3dlock_global);
1837ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
1847ec681f3Smrg    mtx_unlock(&d3dlock_global);
1857ec681f3Smrg    return r;
1867ec681f3Smrg}
1877ec681f3Smrg#endif
1887ec681f3Smrg
1897ec681f3Smrgstatic DWORD NINE_WINAPI
1907ec681f3SmrgLockResource9_SetPriority( struct NineResource9 *This,
1917ec681f3Smrg                           DWORD PriorityNew )
1927ec681f3Smrg{
1937ec681f3Smrg    DWORD r;
1947ec681f3Smrg    mtx_lock(&d3dlock_global);
1957ec681f3Smrg    r = NineResource9_SetPriority(This, PriorityNew);
1967ec681f3Smrg    mtx_unlock(&d3dlock_global);
1977ec681f3Smrg    return r;
1987ec681f3Smrg}
1997ec681f3Smrg
2007ec681f3Smrgstatic DWORD NINE_WINAPI
2017ec681f3SmrgLockResource9_GetPriority( struct NineResource9 *This )
2027ec681f3Smrg{
2037ec681f3Smrg    DWORD r;
2047ec681f3Smrg    mtx_lock(&d3dlock_global);
2057ec681f3Smrg    r = NineResource9_GetPriority(This);
2067ec681f3Smrg    mtx_unlock(&d3dlock_global);
2077ec681f3Smrg    return r;
2087ec681f3Smrg}
2097ec681f3Smrg
2107ec681f3Smrg#if 0
2117ec681f3Smrgstatic void NINE_WINAPI
2127ec681f3SmrgLockResource9_PreLoad( struct NineResource9 *This )
2137ec681f3Smrg{
2147ec681f3Smrg    mtx_lock(&d3dlock_global);
2157ec681f3Smrg    NineResource9_PreLoad(This);
2167ec681f3Smrg    mtx_unlock(&d3dlock_global);
2177ec681f3Smrg}
2187ec681f3Smrg#endif
2197ec681f3Smrg
2207ec681f3Smrg#if 0
2217ec681f3Smrgstatic D3DRESOURCETYPE NINE_WINAPI
2227ec681f3SmrgLockResource9_GetType( struct NineResource9 *This )
2237ec681f3Smrg{
2247ec681f3Smrg    D3DRESOURCETYPE r;
2257ec681f3Smrg    mtx_lock(&d3dlock_global);
2267ec681f3Smrg    r = NineResource9_GetType(This);
2277ec681f3Smrg    mtx_unlock(&d3dlock_global);
2287ec681f3Smrg    return r;
2297ec681f3Smrg}
2307ec681f3Smrg#endif
2317ec681f3Smrg
2327ec681f3Smrgstatic DWORD NINE_WINAPI
2337ec681f3SmrgLockBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
2347ec681f3Smrg                         DWORD LODNew )
2357ec681f3Smrg{
2367ec681f3Smrg    DWORD r;
2377ec681f3Smrg    mtx_lock(&d3dlock_global);
2387ec681f3Smrg    r = NineBaseTexture9_SetLOD(This, LODNew);
2397ec681f3Smrg    mtx_unlock(&d3dlock_global);
2407ec681f3Smrg    return r;
2417ec681f3Smrg}
2427ec681f3Smrg
2437ec681f3Smrgstatic DWORD NINE_WINAPI
2447ec681f3SmrgLockBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
2457ec681f3Smrg{
2467ec681f3Smrg    DWORD r;
2477ec681f3Smrg    mtx_lock(&d3dlock_global);
2487ec681f3Smrg    r = NineBaseTexture9_GetLOD(This);
2497ec681f3Smrg    mtx_unlock(&d3dlock_global);
2507ec681f3Smrg    return r;
2517ec681f3Smrg}
2527ec681f3Smrg
2537ec681f3Smrgstatic DWORD NINE_WINAPI
2547ec681f3SmrgLockBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This )
2557ec681f3Smrg{
2567ec681f3Smrg    DWORD r;
2577ec681f3Smrg    mtx_lock(&d3dlock_global);
2587ec681f3Smrg    r = NineBaseTexture9_GetLevelCount(This);
2597ec681f3Smrg    mtx_unlock(&d3dlock_global);
2607ec681f3Smrg    return r;
2617ec681f3Smrg}
2627ec681f3Smrg
2637ec681f3Smrgstatic HRESULT NINE_WINAPI
2647ec681f3SmrgLockBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
2657ec681f3Smrg                                       D3DTEXTUREFILTERTYPE FilterType )
2667ec681f3Smrg{
2677ec681f3Smrg    HRESULT r;
2687ec681f3Smrg    mtx_lock(&d3dlock_global);
2697ec681f3Smrg    r = NineBaseTexture9_SetAutoGenFilterType(This, FilterType);
2707ec681f3Smrg    mtx_unlock(&d3dlock_global);
2717ec681f3Smrg    return r;
2727ec681f3Smrg}
2737ec681f3Smrg
2747ec681f3Smrgstatic D3DTEXTUREFILTERTYPE NINE_WINAPI
2757ec681f3SmrgLockBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This )
2767ec681f3Smrg{
2777ec681f3Smrg    D3DTEXTUREFILTERTYPE r;
2787ec681f3Smrg    mtx_lock(&d3dlock_global);
2797ec681f3Smrg    r = NineBaseTexture9_GetAutoGenFilterType(This);
2807ec681f3Smrg    mtx_unlock(&d3dlock_global);
2817ec681f3Smrg    return r;
2827ec681f3Smrg}
2837ec681f3Smrg
2847ec681f3Smrgstatic void NINE_WINAPI
2857ec681f3SmrgLockBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
2867ec681f3Smrg{
2877ec681f3Smrg    mtx_lock(&d3dlock_global);
2887ec681f3Smrg    NineBaseTexture9_PreLoad(This);
2897ec681f3Smrg    mtx_unlock(&d3dlock_global);
2907ec681f3Smrg}
2917ec681f3Smrg
2927ec681f3Smrgstatic void NINE_WINAPI
2937ec681f3SmrgLockBaseTexture9_GenerateMipSubLevels( struct NineBaseTexture9 *This )
2947ec681f3Smrg{
2957ec681f3Smrg    mtx_lock(&d3dlock_global);
2967ec681f3Smrg    NineBaseTexture9_GenerateMipSubLevels(This);
2977ec681f3Smrg    mtx_unlock(&d3dlock_global);
2987ec681f3Smrg}
2997ec681f3Smrg
3007ec681f3Smrgstatic HRESULT NINE_WINAPI
3017ec681f3SmrgLockCryptoSession9_GetCertificateSize( struct NineCryptoSession9 *This,
3027ec681f3Smrg                                       UINT *pCertificateSize )
3037ec681f3Smrg{
3047ec681f3Smrg    HRESULT r;
3057ec681f3Smrg    mtx_lock(&d3dlock_global);
3067ec681f3Smrg    r = NineCryptoSession9_GetCertificateSize(This, pCertificateSize);
3077ec681f3Smrg    mtx_unlock(&d3dlock_global);
3087ec681f3Smrg    return r;
3097ec681f3Smrg}
3107ec681f3Smrg
3117ec681f3Smrgstatic HRESULT NINE_WINAPI
3127ec681f3SmrgLockCryptoSession9_GetCertificate( struct NineCryptoSession9 *This,
3137ec681f3Smrg                                   UINT CertifacteSize,
3147ec681f3Smrg                                   BYTE *ppCertificate )
3157ec681f3Smrg{
3167ec681f3Smrg    HRESULT r;
3177ec681f3Smrg    mtx_lock(&d3dlock_global);
3187ec681f3Smrg    r = NineCryptoSession9_GetCertificate(This, CertifacteSize, ppCertificate);
3197ec681f3Smrg    mtx_unlock(&d3dlock_global);
3207ec681f3Smrg    return r;
3217ec681f3Smrg}
3227ec681f3Smrg
3237ec681f3Smrgstatic HRESULT NINE_WINAPI
3247ec681f3SmrgLockCryptoSession9_NegotiateKeyExchange( struct NineCryptoSession9 *This,
3257ec681f3Smrg                                         UINT DataSize,
3267ec681f3Smrg                                         void *pData )
3277ec681f3Smrg{
3287ec681f3Smrg    HRESULT r;
3297ec681f3Smrg    mtx_lock(&d3dlock_global);
3307ec681f3Smrg    r = NineCryptoSession9_NegotiateKeyExchange(This, DataSize, pData);
3317ec681f3Smrg    mtx_unlock(&d3dlock_global);
3327ec681f3Smrg    return r;
3337ec681f3Smrg}
3347ec681f3Smrg
3357ec681f3Smrgstatic HRESULT NINE_WINAPI
3367ec681f3SmrgLockCryptoSession9_EncryptionBlt( struct NineCryptoSession9 *This,
3377ec681f3Smrg                                  IDirect3DSurface9 *pSrcSurface,
3387ec681f3Smrg                                  IDirect3DSurface9 *pDstSurface,
3397ec681f3Smrg                                  UINT DstSurfaceSize,
3407ec681f3Smrg                                  void *pIV )
3417ec681f3Smrg{
3427ec681f3Smrg    HRESULT r;
3437ec681f3Smrg    mtx_lock(&d3dlock_global);
3447ec681f3Smrg    r = NineCryptoSession9_EncryptionBlt(This, pSrcSurface, pDstSurface, DstSurfaceSize, pIV);
3457ec681f3Smrg    mtx_unlock(&d3dlock_global);
3467ec681f3Smrg    return r;
3477ec681f3Smrg}
3487ec681f3Smrg
3497ec681f3Smrgstatic HRESULT NINE_WINAPI
3507ec681f3SmrgLockCryptoSession9_DecryptionBlt( struct NineCryptoSession9 *This,
3517ec681f3Smrg                                  IDirect3DSurface9 *pSrcSurface,
3527ec681f3Smrg                                  IDirect3DSurface9 *pDstSurface,
3537ec681f3Smrg                                  UINT SrcSurfaceSize,
3547ec681f3Smrg                                  D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
3557ec681f3Smrg                                  void *pContentKey,
3567ec681f3Smrg                                  void *pIV )
3577ec681f3Smrg{
3587ec681f3Smrg    HRESULT r;
3597ec681f3Smrg    mtx_lock(&d3dlock_global);
3607ec681f3Smrg    r = NineCryptoSession9_DecryptionBlt(This, pSrcSurface, pDstSurface, SrcSurfaceSize, pEncryptedBlockInfo, pContentKey, pIV);
3617ec681f3Smrg    mtx_unlock(&d3dlock_global);
3627ec681f3Smrg    return r;
3637ec681f3Smrg}
3647ec681f3Smrg
3657ec681f3Smrgstatic HRESULT NINE_WINAPI
3667ec681f3SmrgLockCryptoSession9_GetSurfacePitch( struct NineCryptoSession9 *This,
3677ec681f3Smrg                                    IDirect3DSurface9 *pSrcSurface,
3687ec681f3Smrg                                    UINT *pSurfacePitch )
3697ec681f3Smrg{
3707ec681f3Smrg    HRESULT r;
3717ec681f3Smrg    mtx_lock(&d3dlock_global);
3727ec681f3Smrg    r = NineCryptoSession9_GetSurfacePitch(This, pSrcSurface, pSurfacePitch);
3737ec681f3Smrg    mtx_unlock(&d3dlock_global);
3747ec681f3Smrg    return r;
3757ec681f3Smrg}
3767ec681f3Smrg
3777ec681f3Smrgstatic HRESULT NINE_WINAPI
3787ec681f3SmrgLockCryptoSession9_StartSessionKeyRefresh( struct NineCryptoSession9 *This,
3797ec681f3Smrg                                           void *pRandomNumber,
3807ec681f3Smrg                                           UINT RandomNumberSize )
3817ec681f3Smrg{
3827ec681f3Smrg    HRESULT r;
3837ec681f3Smrg    mtx_lock(&d3dlock_global);
3847ec681f3Smrg    r = NineCryptoSession9_StartSessionKeyRefresh(This, pRandomNumber, RandomNumberSize);
3857ec681f3Smrg    mtx_unlock(&d3dlock_global);
3867ec681f3Smrg    return r;
3877ec681f3Smrg}
3887ec681f3Smrg
3897ec681f3Smrgstatic HRESULT NINE_WINAPI
3907ec681f3SmrgLockCryptoSession9_FinishSessionKeyRefresh( struct NineCryptoSession9 *This )
3917ec681f3Smrg{
3927ec681f3Smrg    HRESULT r;
3937ec681f3Smrg    mtx_lock(&d3dlock_global);
3947ec681f3Smrg    r = NineCryptoSession9_FinishSessionKeyRefresh(This);
3957ec681f3Smrg    mtx_unlock(&d3dlock_global);
3967ec681f3Smrg    return r;
3977ec681f3Smrg}
3987ec681f3Smrg
3997ec681f3Smrgstatic HRESULT NINE_WINAPI
4007ec681f3SmrgLockCryptoSession9_GetEncryptionBltKey( struct NineCryptoSession9 *This,
4017ec681f3Smrg                                        void *pReadbackKey,
4027ec681f3Smrg                                        UINT KeySize )
4037ec681f3Smrg{
4047ec681f3Smrg    HRESULT r;
4057ec681f3Smrg    mtx_lock(&d3dlock_global);
4067ec681f3Smrg    r = NineCryptoSession9_GetEncryptionBltKey(This, pReadbackKey, KeySize);
4077ec681f3Smrg    mtx_unlock(&d3dlock_global);
4087ec681f3Smrg    return r;
4097ec681f3Smrg}
4107ec681f3Smrg
4117ec681f3SmrgIDirect3DCryptoSession9Vtbl LockCryptoSession9_vtable = {
4127ec681f3Smrg    (void *)NineUnknown_QueryInterface,
4137ec681f3Smrg    (void *)NineUnknown_AddRef,
4147ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
4157ec681f3Smrg    (void *)LockCryptoSession9_GetCertificateSize,
4167ec681f3Smrg    (void *)LockCryptoSession9_GetCertificate,
4177ec681f3Smrg    (void *)LockCryptoSession9_NegotiateKeyExchange,
4187ec681f3Smrg    (void *)LockCryptoSession9_EncryptionBlt,
4197ec681f3Smrg    (void *)LockCryptoSession9_DecryptionBlt,
4207ec681f3Smrg    (void *)LockCryptoSession9_GetSurfacePitch,
4217ec681f3Smrg    (void *)LockCryptoSession9_StartSessionKeyRefresh,
4227ec681f3Smrg    (void *)LockCryptoSession9_FinishSessionKeyRefresh,
4237ec681f3Smrg    (void *)LockCryptoSession9_GetEncryptionBltKey
4247ec681f3Smrg};
4257ec681f3Smrg
4267ec681f3Smrg#if 0
4277ec681f3Smrgstatic HRESULT NINE_WINAPI
4287ec681f3SmrgLockCubeTexture9_GetLevelDesc( struct NineCubeTexture9 *This,
4297ec681f3Smrg                               UINT Level,
4307ec681f3Smrg                               D3DSURFACE_DESC *pDesc )
4317ec681f3Smrg{
4327ec681f3Smrg    HRESULT r;
4337ec681f3Smrg    mtx_lock(&d3dlock_global);
4347ec681f3Smrg    r = NineCubeTexture9_GetLevelDesc(This, Level, pDesc);
4357ec681f3Smrg    mtx_unlock(&d3dlock_global);
4367ec681f3Smrg    return r;
4377ec681f3Smrg}
4387ec681f3Smrg#endif
4397ec681f3Smrg
4407ec681f3Smrg#if 0
4417ec681f3Smrgstatic HRESULT NINE_WINAPI
4427ec681f3SmrgLockCubeTexture9_GetCubeMapSurface( struct NineCubeTexture9 *This,
4437ec681f3Smrg                                    D3DCUBEMAP_FACES FaceType,
4447ec681f3Smrg                                    UINT Level,
4457ec681f3Smrg                                    IDirect3DSurface9 **ppCubeMapSurface )
4467ec681f3Smrg{
4477ec681f3Smrg    HRESULT r;
4487ec681f3Smrg    mtx_lock(&d3dlock_global);
4497ec681f3Smrg    r = NineCubeTexture9_GetCubeMapSurface(This, FaceType, Level, ppCubeMapSurface);
4507ec681f3Smrg    mtx_unlock(&d3dlock_global);
4517ec681f3Smrg    return r;
4527ec681f3Smrg}
4537ec681f3Smrg#endif
4547ec681f3Smrg
4557ec681f3Smrgstatic HRESULT NINE_WINAPI
4567ec681f3SmrgLockCubeTexture9_LockRect( struct NineCubeTexture9 *This,
4577ec681f3Smrg                           D3DCUBEMAP_FACES FaceType,
4587ec681f3Smrg                           UINT Level,
4597ec681f3Smrg                           D3DLOCKED_RECT *pLockedRect,
4607ec681f3Smrg                           const RECT *pRect,
4617ec681f3Smrg                           DWORD Flags )
4627ec681f3Smrg{
4637ec681f3Smrg    HRESULT r;
4647ec681f3Smrg    mtx_lock(&d3dlock_global);
4657ec681f3Smrg    r = NineCubeTexture9_LockRect(This, FaceType, Level, pLockedRect, pRect, Flags);
4667ec681f3Smrg    mtx_unlock(&d3dlock_global);
4677ec681f3Smrg    return r;
4687ec681f3Smrg}
4697ec681f3Smrg
4707ec681f3Smrgstatic HRESULT NINE_WINAPI
4717ec681f3SmrgLockCubeTexture9_UnlockRect( struct NineCubeTexture9 *This,
4727ec681f3Smrg                             D3DCUBEMAP_FACES FaceType,
4737ec681f3Smrg                             UINT Level )
4747ec681f3Smrg{
4757ec681f3Smrg    HRESULT r;
4767ec681f3Smrg    mtx_lock(&d3dlock_global);
4777ec681f3Smrg    r = NineCubeTexture9_UnlockRect(This, FaceType, Level);
4787ec681f3Smrg    mtx_unlock(&d3dlock_global);
4797ec681f3Smrg    return r;
4807ec681f3Smrg}
4817ec681f3Smrg
4827ec681f3Smrgstatic HRESULT NINE_WINAPI
4837ec681f3SmrgLockCubeTexture9_AddDirtyRect( struct NineCubeTexture9 *This,
4847ec681f3Smrg                               D3DCUBEMAP_FACES FaceType,
4857ec681f3Smrg                               const RECT *pDirtyRect )
4867ec681f3Smrg{
4877ec681f3Smrg    HRESULT r;
4887ec681f3Smrg    mtx_lock(&d3dlock_global);
4897ec681f3Smrg    r = NineCubeTexture9_AddDirtyRect(This, FaceType, pDirtyRect);
4907ec681f3Smrg    mtx_unlock(&d3dlock_global);
4917ec681f3Smrg    return r;
4927ec681f3Smrg}
4937ec681f3Smrg
4947ec681f3SmrgIDirect3DCubeTexture9Vtbl LockCubeTexture9_vtable = {
4957ec681f3Smrg    (void *)NineUnknown_QueryInterface,
4967ec681f3Smrg    (void *)NineUnknown_AddRef,
4977ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
4987ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
4997ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
5007ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
5017ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
5027ec681f3Smrg    (void *)LockResource9_SetPriority,
5037ec681f3Smrg    (void *)LockResource9_GetPriority,
5047ec681f3Smrg    (void *)LockBaseTexture9_PreLoad,
5057ec681f3Smrg    (void *)NineResource9_GetType, /* immutable */
5067ec681f3Smrg    (void *)LockBaseTexture9_SetLOD,
5077ec681f3Smrg    (void *)LockBaseTexture9_GetLOD,
5087ec681f3Smrg    (void *)LockBaseTexture9_GetLevelCount,
5097ec681f3Smrg    (void *)LockBaseTexture9_SetAutoGenFilterType,
5107ec681f3Smrg    (void *)LockBaseTexture9_GetAutoGenFilterType,
5117ec681f3Smrg    (void *)LockBaseTexture9_GenerateMipSubLevels,
5127ec681f3Smrg    (void *)NineCubeTexture9_GetLevelDesc, /* immutable */
5137ec681f3Smrg    (void *)NineCubeTexture9_GetCubeMapSurface, /* AddRef */
5147ec681f3Smrg    (void *)LockCubeTexture9_LockRect,
5157ec681f3Smrg    (void *)LockCubeTexture9_UnlockRect,
5167ec681f3Smrg    (void *)LockCubeTexture9_AddDirtyRect
5177ec681f3Smrg};
5187ec681f3Smrg
5197ec681f3Smrgstatic HRESULT NINE_WINAPI
5207ec681f3SmrgLockDevice9_TestCooperativeLevel( struct NineDevice9 *This )
5217ec681f3Smrg{
5227ec681f3Smrg    HRESULT r;
5237ec681f3Smrg    mtx_lock(&d3dlock_global);
5247ec681f3Smrg    r = NineDevice9_TestCooperativeLevel(This);
5257ec681f3Smrg    mtx_unlock(&d3dlock_global);
5267ec681f3Smrg    return r;
5277ec681f3Smrg}
5287ec681f3Smrg
5297ec681f3Smrgstatic UINT NINE_WINAPI
5307ec681f3SmrgLockDevice9_GetAvailableTextureMem( struct NineDevice9 *This )
5317ec681f3Smrg{
5327ec681f3Smrg    UINT r;
5337ec681f3Smrg    mtx_lock(&d3dlock_global);
5347ec681f3Smrg    r = NineDevice9_GetAvailableTextureMem(This);
5357ec681f3Smrg    mtx_unlock(&d3dlock_global);
5367ec681f3Smrg    return r;
5377ec681f3Smrg}
5387ec681f3Smrg
5397ec681f3Smrgstatic HRESULT NINE_WINAPI
5407ec681f3SmrgLockDevice9_EvictManagedResources( struct NineDevice9 *This )
5417ec681f3Smrg{
5427ec681f3Smrg    HRESULT r;
5437ec681f3Smrg    mtx_lock(&d3dlock_global);
5447ec681f3Smrg    r = NineDevice9_EvictManagedResources(This);
5457ec681f3Smrg    mtx_unlock(&d3dlock_global);
5467ec681f3Smrg    return r;
5477ec681f3Smrg}
5487ec681f3Smrg
5497ec681f3Smrgstatic HRESULT NINE_WINAPI
5507ec681f3SmrgLockDevice9_GetDirect3D( struct NineDevice9 *This,
5517ec681f3Smrg                         IDirect3D9 **ppD3D9 )
5527ec681f3Smrg{
5537ec681f3Smrg    HRESULT r;
5547ec681f3Smrg    mtx_lock(&d3dlock_global);
5557ec681f3Smrg    r = NineDevice9_GetDirect3D(This, ppD3D9);
5567ec681f3Smrg    mtx_unlock(&d3dlock_global);
5577ec681f3Smrg    return r;
5587ec681f3Smrg}
5597ec681f3Smrg
5607ec681f3Smrg#if 0
5617ec681f3Smrgstatic HRESULT NINE_WINAPI
5627ec681f3SmrgLockDevice9_GetDeviceCaps( struct NineDevice9 *This,
5637ec681f3Smrg                           D3DCAPS9 *pCaps )
5647ec681f3Smrg{
5657ec681f3Smrg    HRESULT r;
5667ec681f3Smrg    mtx_lock(&d3dlock_global);
5677ec681f3Smrg    r = NineDevice9_GetDeviceCaps(This, pCaps);
5687ec681f3Smrg    mtx_unlock(&d3dlock_global);
5697ec681f3Smrg    return r;
5707ec681f3Smrg}
5717ec681f3Smrg#endif
5727ec681f3Smrg
5737ec681f3Smrgstatic HRESULT NINE_WINAPI
5747ec681f3SmrgLockDevice9_GetDisplayMode( struct NineDevice9 *This,
5757ec681f3Smrg                            UINT iSwapChain,
5767ec681f3Smrg                            D3DDISPLAYMODE *pMode )
5777ec681f3Smrg{
5787ec681f3Smrg    HRESULT r;
5797ec681f3Smrg    mtx_lock(&d3dlock_global);
5807ec681f3Smrg    r = NineDevice9_GetDisplayMode(This, iSwapChain, pMode);
5817ec681f3Smrg    mtx_unlock(&d3dlock_global);
5827ec681f3Smrg    return r;
5837ec681f3Smrg}
5847ec681f3Smrg
5857ec681f3Smrg#if 0
5867ec681f3Smrgstatic HRESULT NINE_WINAPI
5877ec681f3SmrgLockDevice9_GetCreationParameters( struct NineDevice9 *This,
5887ec681f3Smrg                                   D3DDEVICE_CREATION_PARAMETERS *pParameters )
5897ec681f3Smrg{
5907ec681f3Smrg    HRESULT r;
5917ec681f3Smrg    mtx_lock(&d3dlock_global);
5927ec681f3Smrg    r = NineDevice9_GetCreationParameters(This, pParameters);
5937ec681f3Smrg    mtx_unlock(&d3dlock_global);
5947ec681f3Smrg    return r;
5957ec681f3Smrg}
5967ec681f3Smrg#endif
5977ec681f3Smrg
5987ec681f3Smrgstatic HRESULT NINE_WINAPI
5997ec681f3SmrgLockDevice9_SetCursorProperties( struct NineDevice9 *This,
6007ec681f3Smrg                                 UINT XHotSpot,
6017ec681f3Smrg                                 UINT YHotSpot,
6027ec681f3Smrg                                 IDirect3DSurface9 *pCursorBitmap )
6037ec681f3Smrg{
6047ec681f3Smrg    HRESULT r;
6057ec681f3Smrg    mtx_lock(&d3dlock_global);
6067ec681f3Smrg    r = NineDevice9_SetCursorProperties(This, XHotSpot, YHotSpot, pCursorBitmap);
6077ec681f3Smrg    mtx_unlock(&d3dlock_global);
6087ec681f3Smrg    return r;
6097ec681f3Smrg}
6107ec681f3Smrg
6117ec681f3Smrgstatic void NINE_WINAPI
6127ec681f3SmrgLockDevice9_SetCursorPosition( struct NineDevice9 *This,
6137ec681f3Smrg                               int X,
6147ec681f3Smrg                               int Y,
6157ec681f3Smrg                               DWORD Flags )
6167ec681f3Smrg{
6177ec681f3Smrg    mtx_lock(&d3dlock_global);
6187ec681f3Smrg    NineDevice9_SetCursorPosition(This, X, Y, Flags);
6197ec681f3Smrg    mtx_unlock(&d3dlock_global);
6207ec681f3Smrg}
6217ec681f3Smrg
6227ec681f3Smrgstatic BOOL NINE_WINAPI
6237ec681f3SmrgLockDevice9_ShowCursor( struct NineDevice9 *This,
6247ec681f3Smrg                        BOOL bShow )
6257ec681f3Smrg{
6267ec681f3Smrg    BOOL r;
6277ec681f3Smrg    mtx_lock(&d3dlock_global);
6287ec681f3Smrg    r = NineDevice9_ShowCursor(This, bShow);
6297ec681f3Smrg    mtx_unlock(&d3dlock_global);
6307ec681f3Smrg    return r;
6317ec681f3Smrg}
6327ec681f3Smrg
6337ec681f3Smrgstatic HRESULT NINE_WINAPI
6347ec681f3SmrgLockDevice9_CreateAdditionalSwapChain( struct NineDevice9 *This,
6357ec681f3Smrg                                       D3DPRESENT_PARAMETERS *pPresentationParameters,
6367ec681f3Smrg                                       IDirect3DSwapChain9 **pSwapChain )
6377ec681f3Smrg{
6387ec681f3Smrg    HRESULT r;
6397ec681f3Smrg    mtx_lock(&d3dlock_global);
6407ec681f3Smrg    r = NineDevice9_CreateAdditionalSwapChain(This, pPresentationParameters, pSwapChain);
6417ec681f3Smrg    mtx_unlock(&d3dlock_global);
6427ec681f3Smrg    return r;
6437ec681f3Smrg}
6447ec681f3Smrg
6457ec681f3Smrgstatic HRESULT NINE_WINAPI
6467ec681f3SmrgLockDevice9_GetSwapChain( struct NineDevice9 *This,
6477ec681f3Smrg                          UINT iSwapChain,
6487ec681f3Smrg                          IDirect3DSwapChain9 **pSwapChain )
6497ec681f3Smrg{
6507ec681f3Smrg    HRESULT r;
6517ec681f3Smrg    mtx_lock(&d3dlock_global);
6527ec681f3Smrg    r = NineDevice9_GetSwapChain(This, iSwapChain, pSwapChain);
6537ec681f3Smrg    mtx_unlock(&d3dlock_global);
6547ec681f3Smrg    return r;
6557ec681f3Smrg}
6567ec681f3Smrg
6577ec681f3Smrgstatic UINT NINE_WINAPI
6587ec681f3SmrgLockDevice9_GetNumberOfSwapChains( struct NineDevice9 *This )
6597ec681f3Smrg{
6607ec681f3Smrg    UINT r;
6617ec681f3Smrg    mtx_lock(&d3dlock_global);
6627ec681f3Smrg    r = NineDevice9_GetNumberOfSwapChains(This);
6637ec681f3Smrg    mtx_unlock(&d3dlock_global);
6647ec681f3Smrg    return r;
6657ec681f3Smrg}
6667ec681f3Smrg
6677ec681f3Smrgstatic HRESULT NINE_WINAPI
6687ec681f3SmrgLockDevice9_Reset( struct NineDevice9 *This,
6697ec681f3Smrg                   D3DPRESENT_PARAMETERS *pPresentationParameters )
6707ec681f3Smrg{
6717ec681f3Smrg    HRESULT r;
6727ec681f3Smrg    mtx_lock(&d3dlock_global);
6737ec681f3Smrg    r = NineDevice9_Reset(This, pPresentationParameters);
6747ec681f3Smrg    mtx_unlock(&d3dlock_global);
6757ec681f3Smrg    return r;
6767ec681f3Smrg}
6777ec681f3Smrg
6787ec681f3Smrgstatic HRESULT NINE_WINAPI
6797ec681f3SmrgLockDevice9_Present( struct NineDevice9 *This,
6807ec681f3Smrg                     const RECT *pSourceRect,
6817ec681f3Smrg                     const RECT *pDestRect,
6827ec681f3Smrg                     HWND hDestWindowOverride,
6837ec681f3Smrg                     const RGNDATA *pDirtyRegion )
6847ec681f3Smrg{
6857ec681f3Smrg    HRESULT r;
6867ec681f3Smrg    mtx_lock(&d3dlock_global);
6877ec681f3Smrg    r = NineDevice9_Present(This, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
6887ec681f3Smrg    mtx_unlock(&d3dlock_global);
6897ec681f3Smrg    return r;
6907ec681f3Smrg}
6917ec681f3Smrg
6927ec681f3Smrgstatic HRESULT NINE_WINAPI
6937ec681f3SmrgLockDevice9_GetBackBuffer( struct NineDevice9 *This,
6947ec681f3Smrg                           UINT iSwapChain,
6957ec681f3Smrg                           UINT iBackBuffer,
6967ec681f3Smrg                           D3DBACKBUFFER_TYPE Type,
6977ec681f3Smrg                           IDirect3DSurface9 **ppBackBuffer )
6987ec681f3Smrg{
6997ec681f3Smrg    HRESULT r;
7007ec681f3Smrg    mtx_lock(&d3dlock_global);
7017ec681f3Smrg    r = NineDevice9_GetBackBuffer(This, iSwapChain, iBackBuffer, Type, ppBackBuffer);
7027ec681f3Smrg    mtx_unlock(&d3dlock_global);
7037ec681f3Smrg    return r;
7047ec681f3Smrg}
7057ec681f3Smrg
7067ec681f3Smrgstatic HRESULT NINE_WINAPI
7077ec681f3SmrgLockDevice9_GetRasterStatus( struct NineDevice9 *This,
7087ec681f3Smrg                             UINT iSwapChain,
7097ec681f3Smrg                             D3DRASTER_STATUS *pRasterStatus )
7107ec681f3Smrg{
7117ec681f3Smrg    HRESULT r;
7127ec681f3Smrg    mtx_lock(&d3dlock_global);
7137ec681f3Smrg    r = NineDevice9_GetRasterStatus(This, iSwapChain, pRasterStatus);
7147ec681f3Smrg    mtx_unlock(&d3dlock_global);
7157ec681f3Smrg    return r;
7167ec681f3Smrg}
7177ec681f3Smrg
7187ec681f3Smrgstatic HRESULT NINE_WINAPI
7197ec681f3SmrgLockDevice9_SetDialogBoxMode( struct NineDevice9 *This,
7207ec681f3Smrg                              BOOL bEnableDialogs )
7217ec681f3Smrg{
7227ec681f3Smrg    HRESULT r;
7237ec681f3Smrg    mtx_lock(&d3dlock_global);
7247ec681f3Smrg    r = NineDevice9_SetDialogBoxMode(This, bEnableDialogs);
7257ec681f3Smrg    mtx_unlock(&d3dlock_global);
7267ec681f3Smrg    return r;
7277ec681f3Smrg}
7287ec681f3Smrg
7297ec681f3Smrgstatic void NINE_WINAPI
7307ec681f3SmrgLockDevice9_SetGammaRamp( struct NineDevice9 *This,
7317ec681f3Smrg                          UINT iSwapChain,
7327ec681f3Smrg                          DWORD Flags,
7337ec681f3Smrg                          const D3DGAMMARAMP *pRamp )
7347ec681f3Smrg{
7357ec681f3Smrg    mtx_lock(&d3dlock_global);
7367ec681f3Smrg    NineDevice9_SetGammaRamp(This, iSwapChain, Flags, pRamp);
7377ec681f3Smrg    mtx_unlock(&d3dlock_global);
7387ec681f3Smrg}
7397ec681f3Smrg
7407ec681f3Smrgstatic void NINE_WINAPI
7417ec681f3SmrgLockDevice9_GetGammaRamp( struct NineDevice9 *This,
7427ec681f3Smrg                          UINT iSwapChain,
7437ec681f3Smrg                          D3DGAMMARAMP *pRamp )
7447ec681f3Smrg{
7457ec681f3Smrg    mtx_lock(&d3dlock_global);
7467ec681f3Smrg    NineDevice9_GetGammaRamp(This, iSwapChain, pRamp);
7477ec681f3Smrg    mtx_unlock(&d3dlock_global);
7487ec681f3Smrg}
7497ec681f3Smrg
7507ec681f3Smrgstatic HRESULT NINE_WINAPI
7517ec681f3SmrgLockDevice9_CreateTexture( struct NineDevice9 *This,
7527ec681f3Smrg                           UINT Width,
7537ec681f3Smrg                           UINT Height,
7547ec681f3Smrg                           UINT Levels,
7557ec681f3Smrg                           DWORD Usage,
7567ec681f3Smrg                           D3DFORMAT Format,
7577ec681f3Smrg                           D3DPOOL Pool,
7587ec681f3Smrg                           IDirect3DTexture9 **ppTexture,
7597ec681f3Smrg                           HANDLE *pSharedHandle )
7607ec681f3Smrg{
7617ec681f3Smrg    HRESULT r;
7627ec681f3Smrg    mtx_lock(&d3dlock_global);
7637ec681f3Smrg    r = NineDevice9_CreateTexture(This, Width, Height, Levels, Usage, Format, Pool, ppTexture, pSharedHandle);
7647ec681f3Smrg    mtx_unlock(&d3dlock_global);
7657ec681f3Smrg    return r;
7667ec681f3Smrg}
7677ec681f3Smrg
7687ec681f3Smrgstatic HRESULT NINE_WINAPI
7697ec681f3SmrgLockDevice9_CreateVolumeTexture( struct NineDevice9 *This,
7707ec681f3Smrg                                 UINT Width,
7717ec681f3Smrg                                 UINT Height,
7727ec681f3Smrg                                 UINT Depth,
7737ec681f3Smrg                                 UINT Levels,
7747ec681f3Smrg                                 DWORD Usage,
7757ec681f3Smrg                                 D3DFORMAT Format,
7767ec681f3Smrg                                 D3DPOOL Pool,
7777ec681f3Smrg                                 IDirect3DVolumeTexture9 **ppVolumeTexture,
7787ec681f3Smrg                                 HANDLE *pSharedHandle )
7797ec681f3Smrg{
7807ec681f3Smrg    HRESULT r;
7817ec681f3Smrg    mtx_lock(&d3dlock_global);
7827ec681f3Smrg    r = NineDevice9_CreateVolumeTexture(This, Width, Height, Depth, Levels, Usage, Format, Pool, ppVolumeTexture, pSharedHandle);
7837ec681f3Smrg    mtx_unlock(&d3dlock_global);
7847ec681f3Smrg    return r;
7857ec681f3Smrg}
7867ec681f3Smrg
7877ec681f3Smrgstatic HRESULT NINE_WINAPI
7887ec681f3SmrgLockDevice9_CreateCubeTexture( struct NineDevice9 *This,
7897ec681f3Smrg                               UINT EdgeLength,
7907ec681f3Smrg                               UINT Levels,
7917ec681f3Smrg                               DWORD Usage,
7927ec681f3Smrg                               D3DFORMAT Format,
7937ec681f3Smrg                               D3DPOOL Pool,
7947ec681f3Smrg                               IDirect3DCubeTexture9 **ppCubeTexture,
7957ec681f3Smrg                               HANDLE *pSharedHandle )
7967ec681f3Smrg{
7977ec681f3Smrg    HRESULT r;
7987ec681f3Smrg    mtx_lock(&d3dlock_global);
7997ec681f3Smrg    r = NineDevice9_CreateCubeTexture(This, EdgeLength, Levels, Usage, Format, Pool, ppCubeTexture, pSharedHandle);
8007ec681f3Smrg    mtx_unlock(&d3dlock_global);
8017ec681f3Smrg    return r;
8027ec681f3Smrg}
8037ec681f3Smrg
8047ec681f3Smrgstatic HRESULT NINE_WINAPI
8057ec681f3SmrgLockDevice9_CreateVertexBuffer( struct NineDevice9 *This,
8067ec681f3Smrg                                UINT Length,
8077ec681f3Smrg                                DWORD Usage,
8087ec681f3Smrg                                DWORD FVF,
8097ec681f3Smrg                                D3DPOOL Pool,
8107ec681f3Smrg                                IDirect3DVertexBuffer9 **ppVertexBuffer,
8117ec681f3Smrg                                HANDLE *pSharedHandle )
8127ec681f3Smrg{
8137ec681f3Smrg    HRESULT r;
8147ec681f3Smrg    mtx_lock(&d3dlock_global);
8157ec681f3Smrg    r = NineDevice9_CreateVertexBuffer(This, Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
8167ec681f3Smrg    mtx_unlock(&d3dlock_global);
8177ec681f3Smrg    return r;
8187ec681f3Smrg}
8197ec681f3Smrg
8207ec681f3Smrgstatic HRESULT NINE_WINAPI
8217ec681f3SmrgLockDevice9_CreateIndexBuffer( struct NineDevice9 *This,
8227ec681f3Smrg                               UINT Length,
8237ec681f3Smrg                               DWORD Usage,
8247ec681f3Smrg                               D3DFORMAT Format,
8257ec681f3Smrg                               D3DPOOL Pool,
8267ec681f3Smrg                               IDirect3DIndexBuffer9 **ppIndexBuffer,
8277ec681f3Smrg                               HANDLE *pSharedHandle )
8287ec681f3Smrg{
8297ec681f3Smrg    HRESULT r;
8307ec681f3Smrg    mtx_lock(&d3dlock_global);
8317ec681f3Smrg    r = NineDevice9_CreateIndexBuffer(This, Length, Usage, Format, Pool, ppIndexBuffer, pSharedHandle);
8327ec681f3Smrg    mtx_unlock(&d3dlock_global);
8337ec681f3Smrg    return r;
8347ec681f3Smrg}
8357ec681f3Smrg
8367ec681f3Smrgstatic HRESULT NINE_WINAPI
8377ec681f3SmrgLockDevice9_CreateRenderTarget( struct NineDevice9 *This,
8387ec681f3Smrg                                UINT Width,
8397ec681f3Smrg                                UINT Height,
8407ec681f3Smrg                                D3DFORMAT Format,
8417ec681f3Smrg                                D3DMULTISAMPLE_TYPE MultiSample,
8427ec681f3Smrg                                DWORD MultisampleQuality,
8437ec681f3Smrg                                BOOL Lockable,
8447ec681f3Smrg                                IDirect3DSurface9 **ppSurface,
8457ec681f3Smrg                                HANDLE *pSharedHandle )
8467ec681f3Smrg{
8477ec681f3Smrg    HRESULT r;
8487ec681f3Smrg    mtx_lock(&d3dlock_global);
8497ec681f3Smrg    r = NineDevice9_CreateRenderTarget(This, Width, Height, Format, MultiSample, MultisampleQuality, Lockable, ppSurface, pSharedHandle);
8507ec681f3Smrg    mtx_unlock(&d3dlock_global);
8517ec681f3Smrg    return r;
8527ec681f3Smrg}
8537ec681f3Smrg
8547ec681f3Smrgstatic HRESULT NINE_WINAPI
8557ec681f3SmrgLockDevice9_CreateDepthStencilSurface( struct NineDevice9 *This,
8567ec681f3Smrg                                       UINT Width,
8577ec681f3Smrg                                       UINT Height,
8587ec681f3Smrg                                       D3DFORMAT Format,
8597ec681f3Smrg                                       D3DMULTISAMPLE_TYPE MultiSample,
8607ec681f3Smrg                                       DWORD MultisampleQuality,
8617ec681f3Smrg                                       BOOL Discard,
8627ec681f3Smrg                                       IDirect3DSurface9 **ppSurface,
8637ec681f3Smrg                                       HANDLE *pSharedHandle )
8647ec681f3Smrg{
8657ec681f3Smrg    HRESULT r;
8667ec681f3Smrg    mtx_lock(&d3dlock_global);
8677ec681f3Smrg    r = NineDevice9_CreateDepthStencilSurface(This, Width, Height, Format, MultiSample, MultisampleQuality, Discard, ppSurface, pSharedHandle);
8687ec681f3Smrg    mtx_unlock(&d3dlock_global);
8697ec681f3Smrg    return r;
8707ec681f3Smrg}
8717ec681f3Smrg
8727ec681f3Smrgstatic HRESULT NINE_WINAPI
8737ec681f3SmrgLockDevice9_UpdateSurface( struct NineDevice9 *This,
8747ec681f3Smrg                           IDirect3DSurface9 *pSourceSurface,
8757ec681f3Smrg                           const RECT *pSourceRect,
8767ec681f3Smrg                           IDirect3DSurface9 *pDestinationSurface,
8777ec681f3Smrg                           const POINT *pDestPoint )
8787ec681f3Smrg{
8797ec681f3Smrg    HRESULT r;
8807ec681f3Smrg    mtx_lock(&d3dlock_global);
8817ec681f3Smrg    r = NineDevice9_UpdateSurface(This, pSourceSurface, pSourceRect, pDestinationSurface, pDestPoint);
8827ec681f3Smrg    mtx_unlock(&d3dlock_global);
8837ec681f3Smrg    return r;
8847ec681f3Smrg}
8857ec681f3Smrg
8867ec681f3Smrgstatic HRESULT NINE_WINAPI
8877ec681f3SmrgLockDevice9_UpdateTexture( struct NineDevice9 *This,
8887ec681f3Smrg                           IDirect3DBaseTexture9 *pSourceTexture,
8897ec681f3Smrg                           IDirect3DBaseTexture9 *pDestinationTexture )
8907ec681f3Smrg{
8917ec681f3Smrg    HRESULT r;
8927ec681f3Smrg    mtx_lock(&d3dlock_global);
8937ec681f3Smrg    r = NineDevice9_UpdateTexture(This, pSourceTexture, pDestinationTexture);
8947ec681f3Smrg    mtx_unlock(&d3dlock_global);
8957ec681f3Smrg    return r;
8967ec681f3Smrg}
8977ec681f3Smrg
8987ec681f3Smrgstatic HRESULT NINE_WINAPI
8997ec681f3SmrgLockDevice9_GetRenderTargetData( struct NineDevice9 *This,
9007ec681f3Smrg                                 IDirect3DSurface9 *pRenderTarget,
9017ec681f3Smrg                                 IDirect3DSurface9 *pDestSurface )
9027ec681f3Smrg{
9037ec681f3Smrg    HRESULT r;
9047ec681f3Smrg    mtx_lock(&d3dlock_global);
9057ec681f3Smrg    r = NineDevice9_GetRenderTargetData(This, pRenderTarget, pDestSurface);
9067ec681f3Smrg    mtx_unlock(&d3dlock_global);
9077ec681f3Smrg    return r;
9087ec681f3Smrg}
9097ec681f3Smrg
9107ec681f3Smrgstatic HRESULT NINE_WINAPI
9117ec681f3SmrgLockDevice9_GetFrontBufferData( struct NineDevice9 *This,
9127ec681f3Smrg                                UINT iSwapChain,
9137ec681f3Smrg                                IDirect3DSurface9 *pDestSurface )
9147ec681f3Smrg{
9157ec681f3Smrg    HRESULT r;
9167ec681f3Smrg    mtx_lock(&d3dlock_global);
9177ec681f3Smrg    r = NineDevice9_GetFrontBufferData(This, iSwapChain, pDestSurface);
9187ec681f3Smrg    mtx_unlock(&d3dlock_global);
9197ec681f3Smrg    return r;
9207ec681f3Smrg}
9217ec681f3Smrg
9227ec681f3Smrgstatic HRESULT NINE_WINAPI
9237ec681f3SmrgLockDevice9_StretchRect( struct NineDevice9 *This,
9247ec681f3Smrg                         IDirect3DSurface9 *pSourceSurface,
9257ec681f3Smrg                         const RECT *pSourceRect,
9267ec681f3Smrg                         IDirect3DSurface9 *pDestSurface,
9277ec681f3Smrg                         const RECT *pDestRect,
9287ec681f3Smrg                         D3DTEXTUREFILTERTYPE Filter )
9297ec681f3Smrg{
9307ec681f3Smrg    HRESULT r;
9317ec681f3Smrg    mtx_lock(&d3dlock_global);
9327ec681f3Smrg    r = NineDevice9_StretchRect(This, pSourceSurface, pSourceRect, pDestSurface, pDestRect, Filter);
9337ec681f3Smrg    mtx_unlock(&d3dlock_global);
9347ec681f3Smrg    return r;
9357ec681f3Smrg}
9367ec681f3Smrg
9377ec681f3Smrgstatic HRESULT NINE_WINAPI
9387ec681f3SmrgLockDevice9_ColorFill( struct NineDevice9 *This,
9397ec681f3Smrg                       IDirect3DSurface9 *pSurface,
9407ec681f3Smrg                       const RECT *pRect,
9417ec681f3Smrg                       D3DCOLOR color )
9427ec681f3Smrg{
9437ec681f3Smrg    HRESULT r;
9447ec681f3Smrg    mtx_lock(&d3dlock_global);
9457ec681f3Smrg    r = NineDevice9_ColorFill(This, pSurface, pRect, color);
9467ec681f3Smrg    mtx_unlock(&d3dlock_global);
9477ec681f3Smrg    return r;
9487ec681f3Smrg}
9497ec681f3Smrg
9507ec681f3Smrgstatic HRESULT NINE_WINAPI
9517ec681f3SmrgLockDevice9_CreateOffscreenPlainSurface( struct NineDevice9 *This,
9527ec681f3Smrg                                         UINT Width,
9537ec681f3Smrg                                         UINT Height,
9547ec681f3Smrg                                         D3DFORMAT Format,
9557ec681f3Smrg                                         D3DPOOL Pool,
9567ec681f3Smrg                                         IDirect3DSurface9 **ppSurface,
9577ec681f3Smrg                                         HANDLE *pSharedHandle )
9587ec681f3Smrg{
9597ec681f3Smrg    HRESULT r;
9607ec681f3Smrg    mtx_lock(&d3dlock_global);
9617ec681f3Smrg    r = NineDevice9_CreateOffscreenPlainSurface(This, Width, Height, Format, Pool, ppSurface, pSharedHandle);
9627ec681f3Smrg    mtx_unlock(&d3dlock_global);
9637ec681f3Smrg    return r;
9647ec681f3Smrg}
9657ec681f3Smrg
9667ec681f3Smrgstatic HRESULT NINE_WINAPI
9677ec681f3SmrgLockDevice9_SetRenderTarget( struct NineDevice9 *This,
9687ec681f3Smrg                             DWORD RenderTargetIndex,
9697ec681f3Smrg                             IDirect3DSurface9 *pRenderTarget )
9707ec681f3Smrg{
9717ec681f3Smrg    HRESULT r;
9727ec681f3Smrg    mtx_lock(&d3dlock_global);
9737ec681f3Smrg    r = NineDevice9_SetRenderTarget(This, RenderTargetIndex, pRenderTarget);
9747ec681f3Smrg    mtx_unlock(&d3dlock_global);
9757ec681f3Smrg    return r;
9767ec681f3Smrg}
9777ec681f3Smrg
9787ec681f3Smrgstatic HRESULT NINE_WINAPI
9797ec681f3SmrgLockDevice9_GetRenderTarget( struct NineDevice9 *This,
9807ec681f3Smrg                             DWORD RenderTargetIndex,
9817ec681f3Smrg                             IDirect3DSurface9 **ppRenderTarget )
9827ec681f3Smrg{
9837ec681f3Smrg    HRESULT r;
9847ec681f3Smrg    mtx_lock(&d3dlock_global);
9857ec681f3Smrg    r = NineDevice9_GetRenderTarget(This, RenderTargetIndex, ppRenderTarget);
9867ec681f3Smrg    mtx_unlock(&d3dlock_global);
9877ec681f3Smrg    return r;
9887ec681f3Smrg}
9897ec681f3Smrg
9907ec681f3Smrgstatic HRESULT NINE_WINAPI
9917ec681f3SmrgLockDevice9_SetDepthStencilSurface( struct NineDevice9 *This,
9927ec681f3Smrg                                    IDirect3DSurface9 *pNewZStencil )
9937ec681f3Smrg{
9947ec681f3Smrg    HRESULT r;
9957ec681f3Smrg    mtx_lock(&d3dlock_global);
9967ec681f3Smrg    r = NineDevice9_SetDepthStencilSurface(This, pNewZStencil);
9977ec681f3Smrg    mtx_unlock(&d3dlock_global);
9987ec681f3Smrg    return r;
9997ec681f3Smrg}
10007ec681f3Smrg
10017ec681f3Smrgstatic HRESULT NINE_WINAPI
10027ec681f3SmrgLockDevice9_GetDepthStencilSurface( struct NineDevice9 *This,
10037ec681f3Smrg                                    IDirect3DSurface9 **ppZStencilSurface )
10047ec681f3Smrg{
10057ec681f3Smrg    HRESULT r;
10067ec681f3Smrg    mtx_lock(&d3dlock_global);
10077ec681f3Smrg    r = NineDevice9_GetDepthStencilSurface(This, ppZStencilSurface);
10087ec681f3Smrg    mtx_unlock(&d3dlock_global);
10097ec681f3Smrg    return r;
10107ec681f3Smrg}
10117ec681f3Smrg
10127ec681f3Smrgstatic HRESULT NINE_WINAPI
10137ec681f3SmrgLockDevice9_BeginScene( struct NineDevice9 *This )
10147ec681f3Smrg{
10157ec681f3Smrg    HRESULT r;
10167ec681f3Smrg    mtx_lock(&d3dlock_global);
10177ec681f3Smrg    r = NineDevice9_BeginScene(This);
10187ec681f3Smrg    mtx_unlock(&d3dlock_global);
10197ec681f3Smrg    return r;
10207ec681f3Smrg}
10217ec681f3Smrg
10227ec681f3Smrgstatic HRESULT NINE_WINAPI
10237ec681f3SmrgLockDevice9_EndScene( struct NineDevice9 *This )
10247ec681f3Smrg{
10257ec681f3Smrg    HRESULT r;
10267ec681f3Smrg    mtx_lock(&d3dlock_global);
10277ec681f3Smrg    r = NineDevice9_EndScene(This);
10287ec681f3Smrg    mtx_unlock(&d3dlock_global);
10297ec681f3Smrg    return r;
10307ec681f3Smrg}
10317ec681f3Smrg
10327ec681f3Smrgstatic HRESULT NINE_WINAPI
10337ec681f3SmrgLockDevice9_Clear( struct NineDevice9 *This,
10347ec681f3Smrg                   DWORD Count,
10357ec681f3Smrg                   const D3DRECT *pRects,
10367ec681f3Smrg                   DWORD Flags,
10377ec681f3Smrg                   D3DCOLOR Color,
10387ec681f3Smrg                   float Z,
10397ec681f3Smrg                   DWORD Stencil )
10407ec681f3Smrg{
10417ec681f3Smrg    HRESULT r;
10427ec681f3Smrg    mtx_lock(&d3dlock_global);
10437ec681f3Smrg    r = NineDevice9_Clear(This, Count, pRects, Flags, Color, Z, Stencil);
10447ec681f3Smrg    mtx_unlock(&d3dlock_global);
10457ec681f3Smrg    return r;
10467ec681f3Smrg}
10477ec681f3Smrg
10487ec681f3Smrgstatic HRESULT NINE_WINAPI
10497ec681f3SmrgLockDevice9_SetTransform( struct NineDevice9 *This,
10507ec681f3Smrg                          D3DTRANSFORMSTATETYPE State,
10517ec681f3Smrg                          const D3DMATRIX *pMatrix )
10527ec681f3Smrg{
10537ec681f3Smrg    HRESULT r;
10547ec681f3Smrg    mtx_lock(&d3dlock_global);
10557ec681f3Smrg    r = NineDevice9_SetTransform(This, State, pMatrix);
10567ec681f3Smrg    mtx_unlock(&d3dlock_global);
10577ec681f3Smrg    return r;
10587ec681f3Smrg}
10597ec681f3Smrg
10607ec681f3Smrgstatic HRESULT NINE_WINAPI
10617ec681f3SmrgLockDevice9_GetTransform( struct NineDevice9 *This,
10627ec681f3Smrg                          D3DTRANSFORMSTATETYPE State,
10637ec681f3Smrg                          D3DMATRIX *pMatrix )
10647ec681f3Smrg{
10657ec681f3Smrg    HRESULT r;
10667ec681f3Smrg    mtx_lock(&d3dlock_global);
10677ec681f3Smrg    r = NineDevice9_GetTransform(This, State, pMatrix);
10687ec681f3Smrg    mtx_unlock(&d3dlock_global);
10697ec681f3Smrg    return r;
10707ec681f3Smrg}
10717ec681f3Smrg
10727ec681f3Smrgstatic HRESULT NINE_WINAPI
10737ec681f3SmrgLockDevice9_MultiplyTransform( struct NineDevice9 *This,
10747ec681f3Smrg                               D3DTRANSFORMSTATETYPE State,
10757ec681f3Smrg                               const D3DMATRIX *pMatrix )
10767ec681f3Smrg{
10777ec681f3Smrg    HRESULT r;
10787ec681f3Smrg    mtx_lock(&d3dlock_global);
10797ec681f3Smrg    r = NineDevice9_MultiplyTransform(This, State, pMatrix);
10807ec681f3Smrg    mtx_unlock(&d3dlock_global);
10817ec681f3Smrg    return r;
10827ec681f3Smrg}
10837ec681f3Smrg
10847ec681f3Smrgstatic HRESULT NINE_WINAPI
10857ec681f3SmrgLockDevice9_SetViewport( struct NineDevice9 *This,
10867ec681f3Smrg                         const D3DVIEWPORT9 *pViewport )
10877ec681f3Smrg{
10887ec681f3Smrg    HRESULT r;
10897ec681f3Smrg    mtx_lock(&d3dlock_global);
10907ec681f3Smrg    r = NineDevice9_SetViewport(This, pViewport);
10917ec681f3Smrg    mtx_unlock(&d3dlock_global);
10927ec681f3Smrg    return r;
10937ec681f3Smrg}
10947ec681f3Smrg
10957ec681f3Smrgstatic HRESULT NINE_WINAPI
10967ec681f3SmrgLockDevice9_GetViewport( struct NineDevice9 *This,
10977ec681f3Smrg                         D3DVIEWPORT9 *pViewport )
10987ec681f3Smrg{
10997ec681f3Smrg    HRESULT r;
11007ec681f3Smrg    mtx_lock(&d3dlock_global);
11017ec681f3Smrg    r = NineDevice9_GetViewport(This, pViewport);
11027ec681f3Smrg    mtx_unlock(&d3dlock_global);
11037ec681f3Smrg    return r;
11047ec681f3Smrg}
11057ec681f3Smrg
11067ec681f3Smrgstatic HRESULT NINE_WINAPI
11077ec681f3SmrgLockDevice9_SetMaterial( struct NineDevice9 *This,
11087ec681f3Smrg                         const D3DMATERIAL9 *pMaterial )
11097ec681f3Smrg{
11107ec681f3Smrg    HRESULT r;
11117ec681f3Smrg    mtx_lock(&d3dlock_global);
11127ec681f3Smrg    r = NineDevice9_SetMaterial(This, pMaterial);
11137ec681f3Smrg    mtx_unlock(&d3dlock_global);
11147ec681f3Smrg    return r;
11157ec681f3Smrg}
11167ec681f3Smrg
11177ec681f3Smrgstatic HRESULT NINE_WINAPI
11187ec681f3SmrgLockDevice9_GetMaterial( struct NineDevice9 *This,
11197ec681f3Smrg                         D3DMATERIAL9 *pMaterial )
11207ec681f3Smrg{
11217ec681f3Smrg    HRESULT r;
11227ec681f3Smrg    mtx_lock(&d3dlock_global);
11237ec681f3Smrg    r = NineDevice9_GetMaterial(This, pMaterial);
11247ec681f3Smrg    mtx_unlock(&d3dlock_global);
11257ec681f3Smrg    return r;
11267ec681f3Smrg}
11277ec681f3Smrg
11287ec681f3Smrgstatic HRESULT NINE_WINAPI
11297ec681f3SmrgLockDevice9_SetLight( struct NineDevice9 *This,
11307ec681f3Smrg                      DWORD Index,
11317ec681f3Smrg                      const D3DLIGHT9 *pLight )
11327ec681f3Smrg{
11337ec681f3Smrg    HRESULT r;
11347ec681f3Smrg    mtx_lock(&d3dlock_global);
11357ec681f3Smrg    r = NineDevice9_SetLight(This, Index, pLight);
11367ec681f3Smrg    mtx_unlock(&d3dlock_global);
11377ec681f3Smrg    return r;
11387ec681f3Smrg}
11397ec681f3Smrg
11407ec681f3Smrgstatic HRESULT NINE_WINAPI
11417ec681f3SmrgLockDevice9_GetLight( struct NineDevice9 *This,
11427ec681f3Smrg                      DWORD Index,
11437ec681f3Smrg                      D3DLIGHT9 *pLight )
11447ec681f3Smrg{
11457ec681f3Smrg    HRESULT r;
11467ec681f3Smrg    mtx_lock(&d3dlock_global);
11477ec681f3Smrg    r = NineDevice9_GetLight(This, Index, pLight);
11487ec681f3Smrg    mtx_unlock(&d3dlock_global);
11497ec681f3Smrg    return r;
11507ec681f3Smrg}
11517ec681f3Smrg
11527ec681f3Smrgstatic HRESULT NINE_WINAPI
11537ec681f3SmrgLockDevice9_LightEnable( struct NineDevice9 *This,
11547ec681f3Smrg                         DWORD Index,
11557ec681f3Smrg                         BOOL Enable )
11567ec681f3Smrg{
11577ec681f3Smrg    HRESULT r;
11587ec681f3Smrg    mtx_lock(&d3dlock_global);
11597ec681f3Smrg    r = NineDevice9_LightEnable(This, Index, Enable);
11607ec681f3Smrg    mtx_unlock(&d3dlock_global);
11617ec681f3Smrg    return r;
11627ec681f3Smrg}
11637ec681f3Smrg
11647ec681f3Smrgstatic HRESULT NINE_WINAPI
11657ec681f3SmrgLockDevice9_GetLightEnable( struct NineDevice9 *This,
11667ec681f3Smrg                            DWORD Index,
11677ec681f3Smrg                            BOOL *pEnable )
11687ec681f3Smrg{
11697ec681f3Smrg    HRESULT r;
11707ec681f3Smrg    mtx_lock(&d3dlock_global);
11717ec681f3Smrg    r = NineDevice9_GetLightEnable(This, Index, pEnable);
11727ec681f3Smrg    mtx_unlock(&d3dlock_global);
11737ec681f3Smrg    return r;
11747ec681f3Smrg}
11757ec681f3Smrg
11767ec681f3Smrgstatic HRESULT NINE_WINAPI
11777ec681f3SmrgLockDevice9_SetClipPlane( struct NineDevice9 *This,
11787ec681f3Smrg                          DWORD Index,
11797ec681f3Smrg                          const float *pPlane )
11807ec681f3Smrg{
11817ec681f3Smrg    HRESULT r;
11827ec681f3Smrg    mtx_lock(&d3dlock_global);
11837ec681f3Smrg    r = NineDevice9_SetClipPlane(This, Index, pPlane);
11847ec681f3Smrg    mtx_unlock(&d3dlock_global);
11857ec681f3Smrg    return r;
11867ec681f3Smrg}
11877ec681f3Smrg
11887ec681f3Smrgstatic HRESULT NINE_WINAPI
11897ec681f3SmrgLockDevice9_GetClipPlane( struct NineDevice9 *This,
11907ec681f3Smrg                          DWORD Index,
11917ec681f3Smrg                          float *pPlane )
11927ec681f3Smrg{
11937ec681f3Smrg    HRESULT r;
11947ec681f3Smrg    mtx_lock(&d3dlock_global);
11957ec681f3Smrg    r = NineDevice9_GetClipPlane(This, Index, pPlane);
11967ec681f3Smrg    mtx_unlock(&d3dlock_global);
11977ec681f3Smrg    return r;
11987ec681f3Smrg}
11997ec681f3Smrg
12007ec681f3Smrgstatic HRESULT NINE_WINAPI
12017ec681f3SmrgLockDevice9_SetRenderState( struct NineDevice9 *This,
12027ec681f3Smrg                            D3DRENDERSTATETYPE State,
12037ec681f3Smrg                            DWORD Value )
12047ec681f3Smrg{
12057ec681f3Smrg    HRESULT r;
12067ec681f3Smrg    mtx_lock(&d3dlock_global);
12077ec681f3Smrg    r = NineDevice9_SetRenderState(This, State, Value);
12087ec681f3Smrg    mtx_unlock(&d3dlock_global);
12097ec681f3Smrg    return r;
12107ec681f3Smrg}
12117ec681f3Smrg
12127ec681f3Smrgstatic HRESULT NINE_WINAPI
12137ec681f3SmrgLockDevice9_GetRenderState( struct NineDevice9 *This,
12147ec681f3Smrg                            D3DRENDERSTATETYPE State,
12157ec681f3Smrg                            DWORD *pValue )
12167ec681f3Smrg{
12177ec681f3Smrg    HRESULT r;
12187ec681f3Smrg    mtx_lock(&d3dlock_global);
12197ec681f3Smrg    r = NineDevice9_GetRenderState(This, State, pValue);
12207ec681f3Smrg    mtx_unlock(&d3dlock_global);
12217ec681f3Smrg    return r;
12227ec681f3Smrg}
12237ec681f3Smrg
12247ec681f3Smrgstatic HRESULT NINE_WINAPI
12257ec681f3SmrgLockDevice9_CreateStateBlock( struct NineDevice9 *This,
12267ec681f3Smrg                              D3DSTATEBLOCKTYPE Type,
12277ec681f3Smrg                              IDirect3DStateBlock9 **ppSB )
12287ec681f3Smrg{
12297ec681f3Smrg    HRESULT r;
12307ec681f3Smrg    mtx_lock(&d3dlock_global);
12317ec681f3Smrg    r = NineDevice9_CreateStateBlock(This, Type, ppSB);
12327ec681f3Smrg    mtx_unlock(&d3dlock_global);
12337ec681f3Smrg    return r;
12347ec681f3Smrg}
12357ec681f3Smrg
12367ec681f3Smrgstatic HRESULT NINE_WINAPI
12377ec681f3SmrgLockDevice9_BeginStateBlock( struct NineDevice9 *This )
12387ec681f3Smrg{
12397ec681f3Smrg    HRESULT r;
12407ec681f3Smrg    mtx_lock(&d3dlock_global);
12417ec681f3Smrg    r = NineDevice9_BeginStateBlock(This);
12427ec681f3Smrg    mtx_unlock(&d3dlock_global);
12437ec681f3Smrg    return r;
12447ec681f3Smrg}
12457ec681f3Smrg
12467ec681f3Smrgstatic HRESULT NINE_WINAPI
12477ec681f3SmrgLockDevice9_EndStateBlock( struct NineDevice9 *This,
12487ec681f3Smrg                           IDirect3DStateBlock9 **ppSB )
12497ec681f3Smrg{
12507ec681f3Smrg    HRESULT r;
12517ec681f3Smrg    mtx_lock(&d3dlock_global);
12527ec681f3Smrg    r = NineDevice9_EndStateBlock(This, ppSB);
12537ec681f3Smrg    mtx_unlock(&d3dlock_global);
12547ec681f3Smrg    return r;
12557ec681f3Smrg}
12567ec681f3Smrg
12577ec681f3Smrgstatic HRESULT NINE_WINAPI
12587ec681f3SmrgLockDevice9_SetClipStatus( struct NineDevice9 *This,
12597ec681f3Smrg                           const D3DCLIPSTATUS9 *pClipStatus )
12607ec681f3Smrg{
12617ec681f3Smrg    HRESULT r;
12627ec681f3Smrg    mtx_lock(&d3dlock_global);
12637ec681f3Smrg    r = NineDevice9_SetClipStatus(This, pClipStatus);
12647ec681f3Smrg    mtx_unlock(&d3dlock_global);
12657ec681f3Smrg    return r;
12667ec681f3Smrg}
12677ec681f3Smrg
12687ec681f3Smrgstatic HRESULT NINE_WINAPI
12697ec681f3SmrgLockDevice9_GetClipStatus( struct NineDevice9 *This,
12707ec681f3Smrg                           D3DCLIPSTATUS9 *pClipStatus )
12717ec681f3Smrg{
12727ec681f3Smrg    HRESULT r;
12737ec681f3Smrg    mtx_lock(&d3dlock_global);
12747ec681f3Smrg    r = NineDevice9_GetClipStatus(This, pClipStatus);
12757ec681f3Smrg    mtx_unlock(&d3dlock_global);
12767ec681f3Smrg    return r;
12777ec681f3Smrg}
12787ec681f3Smrg
12797ec681f3Smrgstatic HRESULT NINE_WINAPI
12807ec681f3SmrgLockDevice9_GetTexture( struct NineDevice9 *This,
12817ec681f3Smrg                        DWORD Stage,
12827ec681f3Smrg                        IDirect3DBaseTexture9 **ppTexture )
12837ec681f3Smrg{
12847ec681f3Smrg    HRESULT r;
12857ec681f3Smrg    mtx_lock(&d3dlock_global);
12867ec681f3Smrg    r = NineDevice9_GetTexture(This, Stage, ppTexture);
12877ec681f3Smrg    mtx_unlock(&d3dlock_global);
12887ec681f3Smrg    return r;
12897ec681f3Smrg}
12907ec681f3Smrg
12917ec681f3Smrgstatic HRESULT NINE_WINAPI
12927ec681f3SmrgLockDevice9_SetTexture( struct NineDevice9 *This,
12937ec681f3Smrg                        DWORD Stage,
12947ec681f3Smrg                        IDirect3DBaseTexture9 *pTexture )
12957ec681f3Smrg{
12967ec681f3Smrg    HRESULT r;
12977ec681f3Smrg    mtx_lock(&d3dlock_global);
12987ec681f3Smrg    r = NineDevice9_SetTexture(This, Stage, pTexture);
12997ec681f3Smrg    mtx_unlock(&d3dlock_global);
13007ec681f3Smrg    return r;
13017ec681f3Smrg}
13027ec681f3Smrg
13037ec681f3Smrgstatic HRESULT NINE_WINAPI
13047ec681f3SmrgLockDevice9_GetTextureStageState( struct NineDevice9 *This,
13057ec681f3Smrg                                  DWORD Stage,
13067ec681f3Smrg                                  D3DTEXTURESTAGESTATETYPE Type,
13077ec681f3Smrg                                  DWORD *pValue )
13087ec681f3Smrg{
13097ec681f3Smrg    HRESULT r;
13107ec681f3Smrg    mtx_lock(&d3dlock_global);
13117ec681f3Smrg    r = NineDevice9_GetTextureStageState(This, Stage, Type, pValue);
13127ec681f3Smrg    mtx_unlock(&d3dlock_global);
13137ec681f3Smrg    return r;
13147ec681f3Smrg}
13157ec681f3Smrg
13167ec681f3Smrgstatic HRESULT NINE_WINAPI
13177ec681f3SmrgLockDevice9_SetTextureStageState( struct NineDevice9 *This,
13187ec681f3Smrg                                  DWORD Stage,
13197ec681f3Smrg                                  D3DTEXTURESTAGESTATETYPE Type,
13207ec681f3Smrg                                  DWORD Value )
13217ec681f3Smrg{
13227ec681f3Smrg    HRESULT r;
13237ec681f3Smrg    mtx_lock(&d3dlock_global);
13247ec681f3Smrg    r = NineDevice9_SetTextureStageState(This, Stage, Type, Value);
13257ec681f3Smrg    mtx_unlock(&d3dlock_global);
13267ec681f3Smrg    return r;
13277ec681f3Smrg}
13287ec681f3Smrg
13297ec681f3Smrgstatic HRESULT NINE_WINAPI
13307ec681f3SmrgLockDevice9_GetSamplerState( struct NineDevice9 *This,
13317ec681f3Smrg                             DWORD Sampler,
13327ec681f3Smrg                             D3DSAMPLERSTATETYPE Type,
13337ec681f3Smrg                             DWORD *pValue )
13347ec681f3Smrg{
13357ec681f3Smrg    HRESULT r;
13367ec681f3Smrg    mtx_lock(&d3dlock_global);
13377ec681f3Smrg    r = NineDevice9_GetSamplerState(This, Sampler, Type, pValue);
13387ec681f3Smrg    mtx_unlock(&d3dlock_global);
13397ec681f3Smrg    return r;
13407ec681f3Smrg}
13417ec681f3Smrg
13427ec681f3Smrgstatic HRESULT NINE_WINAPI
13437ec681f3SmrgLockDevice9_SetSamplerState( struct NineDevice9 *This,
13447ec681f3Smrg                             DWORD Sampler,
13457ec681f3Smrg                             D3DSAMPLERSTATETYPE Type,
13467ec681f3Smrg                             DWORD Value )
13477ec681f3Smrg{
13487ec681f3Smrg    HRESULT r;
13497ec681f3Smrg    mtx_lock(&d3dlock_global);
13507ec681f3Smrg    r = NineDevice9_SetSamplerState(This, Sampler, Type, Value);
13517ec681f3Smrg    mtx_unlock(&d3dlock_global);
13527ec681f3Smrg    return r;
13537ec681f3Smrg}
13547ec681f3Smrg
13557ec681f3Smrgstatic HRESULT NINE_WINAPI
13567ec681f3SmrgLockDevice9_ValidateDevice( struct NineDevice9 *This,
13577ec681f3Smrg                            DWORD *pNumPasses )
13587ec681f3Smrg{
13597ec681f3Smrg    HRESULT r;
13607ec681f3Smrg    mtx_lock(&d3dlock_global);
13617ec681f3Smrg    r = NineDevice9_ValidateDevice(This, pNumPasses);
13627ec681f3Smrg    mtx_unlock(&d3dlock_global);
13637ec681f3Smrg    return r;
13647ec681f3Smrg}
13657ec681f3Smrg
13667ec681f3Smrgstatic HRESULT NINE_WINAPI
13677ec681f3SmrgLockDevice9_SetPaletteEntries( struct NineDevice9 *This,
13687ec681f3Smrg                               UINT PaletteNumber,
13697ec681f3Smrg                               const PALETTEENTRY *pEntries )
13707ec681f3Smrg{
13717ec681f3Smrg    HRESULT r;
13727ec681f3Smrg    mtx_lock(&d3dlock_global);
13737ec681f3Smrg    r = NineDevice9_SetPaletteEntries(This, PaletteNumber, pEntries);
13747ec681f3Smrg    mtx_unlock(&d3dlock_global);
13757ec681f3Smrg    return r;
13767ec681f3Smrg}
13777ec681f3Smrg
13787ec681f3Smrgstatic HRESULT NINE_WINAPI
13797ec681f3SmrgLockDevice9_GetPaletteEntries( struct NineDevice9 *This,
13807ec681f3Smrg                               UINT PaletteNumber,
13817ec681f3Smrg                               PALETTEENTRY *pEntries )
13827ec681f3Smrg{
13837ec681f3Smrg    HRESULT r;
13847ec681f3Smrg    mtx_lock(&d3dlock_global);
13857ec681f3Smrg    r = NineDevice9_GetPaletteEntries(This, PaletteNumber, pEntries);
13867ec681f3Smrg    mtx_unlock(&d3dlock_global);
13877ec681f3Smrg    return r;
13887ec681f3Smrg}
13897ec681f3Smrg
13907ec681f3Smrgstatic HRESULT NINE_WINAPI
13917ec681f3SmrgLockDevice9_SetCurrentTexturePalette( struct NineDevice9 *This,
13927ec681f3Smrg                                      UINT PaletteNumber )
13937ec681f3Smrg{
13947ec681f3Smrg    HRESULT r;
13957ec681f3Smrg    mtx_lock(&d3dlock_global);
13967ec681f3Smrg    r = NineDevice9_SetCurrentTexturePalette(This, PaletteNumber);
13977ec681f3Smrg    mtx_unlock(&d3dlock_global);
13987ec681f3Smrg    return r;
13997ec681f3Smrg}
14007ec681f3Smrg
14017ec681f3Smrgstatic HRESULT NINE_WINAPI
14027ec681f3SmrgLockDevice9_GetCurrentTexturePalette( struct NineDevice9 *This,
14037ec681f3Smrg                                      UINT *PaletteNumber )
14047ec681f3Smrg{
14057ec681f3Smrg    HRESULT r;
14067ec681f3Smrg    mtx_lock(&d3dlock_global);
14077ec681f3Smrg    r = NineDevice9_GetCurrentTexturePalette(This, PaletteNumber);
14087ec681f3Smrg    mtx_unlock(&d3dlock_global);
14097ec681f3Smrg    return r;
14107ec681f3Smrg}
14117ec681f3Smrg
14127ec681f3Smrgstatic HRESULT NINE_WINAPI
14137ec681f3SmrgLockDevice9_SetScissorRect( struct NineDevice9 *This,
14147ec681f3Smrg                            const RECT *pRect )
14157ec681f3Smrg{
14167ec681f3Smrg    HRESULT r;
14177ec681f3Smrg    mtx_lock(&d3dlock_global);
14187ec681f3Smrg    r = NineDevice9_SetScissorRect(This, pRect);
14197ec681f3Smrg    mtx_unlock(&d3dlock_global);
14207ec681f3Smrg    return r;
14217ec681f3Smrg}
14227ec681f3Smrg
14237ec681f3Smrgstatic HRESULT NINE_WINAPI
14247ec681f3SmrgLockDevice9_GetScissorRect( struct NineDevice9 *This,
14257ec681f3Smrg                            RECT *pRect )
14267ec681f3Smrg{
14277ec681f3Smrg    HRESULT r;
14287ec681f3Smrg    mtx_lock(&d3dlock_global);
14297ec681f3Smrg    r = NineDevice9_GetScissorRect(This, pRect);
14307ec681f3Smrg    mtx_unlock(&d3dlock_global);
14317ec681f3Smrg    return r;
14327ec681f3Smrg}
14337ec681f3Smrg
14347ec681f3Smrgstatic HRESULT NINE_WINAPI
14357ec681f3SmrgLockDevice9_SetSoftwareVertexProcessing( struct NineDevice9 *This,
14367ec681f3Smrg                                         BOOL bSoftware )
14377ec681f3Smrg{
14387ec681f3Smrg    HRESULT r;
14397ec681f3Smrg    mtx_lock(&d3dlock_global);
14407ec681f3Smrg    r = NineDevice9_SetSoftwareVertexProcessing(This, bSoftware);
14417ec681f3Smrg    mtx_unlock(&d3dlock_global);
14427ec681f3Smrg    return r;
14437ec681f3Smrg}
14447ec681f3Smrg
14457ec681f3Smrgstatic BOOL NINE_WINAPI
14467ec681f3SmrgLockDevice9_GetSoftwareVertexProcessing( struct NineDevice9 *This )
14477ec681f3Smrg{
14487ec681f3Smrg    BOOL r;
14497ec681f3Smrg    mtx_lock(&d3dlock_global);
14507ec681f3Smrg    r = NineDevice9_GetSoftwareVertexProcessing(This);
14517ec681f3Smrg    mtx_unlock(&d3dlock_global);
14527ec681f3Smrg    return r;
14537ec681f3Smrg}
14547ec681f3Smrg
14557ec681f3Smrgstatic HRESULT NINE_WINAPI
14567ec681f3SmrgLockDevice9_SetNPatchMode( struct NineDevice9 *This,
14577ec681f3Smrg                           float nSegments )
14587ec681f3Smrg{
14597ec681f3Smrg    HRESULT r;
14607ec681f3Smrg    mtx_lock(&d3dlock_global);
14617ec681f3Smrg    r = NineDevice9_SetNPatchMode(This, nSegments);
14627ec681f3Smrg    mtx_unlock(&d3dlock_global);
14637ec681f3Smrg    return r;
14647ec681f3Smrg}
14657ec681f3Smrg
14667ec681f3Smrgstatic float NINE_WINAPI
14677ec681f3SmrgLockDevice9_GetNPatchMode( struct NineDevice9 *This )
14687ec681f3Smrg{
14697ec681f3Smrg    float r;
14707ec681f3Smrg    mtx_lock(&d3dlock_global);
14717ec681f3Smrg    r = NineDevice9_GetNPatchMode(This);
14727ec681f3Smrg    mtx_unlock(&d3dlock_global);
14737ec681f3Smrg    return r;
14747ec681f3Smrg}
14757ec681f3Smrg
14767ec681f3Smrgstatic HRESULT NINE_WINAPI
14777ec681f3SmrgLockDevice9_DrawPrimitive( struct NineDevice9 *This,
14787ec681f3Smrg                           D3DPRIMITIVETYPE PrimitiveType,
14797ec681f3Smrg                           UINT StartVertex,
14807ec681f3Smrg                           UINT PrimitiveCount )
14817ec681f3Smrg{
14827ec681f3Smrg    HRESULT r;
14837ec681f3Smrg    mtx_lock(&d3dlock_global);
14847ec681f3Smrg    r = NineDevice9_DrawPrimitive(This, PrimitiveType, StartVertex, PrimitiveCount);
14857ec681f3Smrg    mtx_unlock(&d3dlock_global);
14867ec681f3Smrg    return r;
14877ec681f3Smrg}
14887ec681f3Smrg
14897ec681f3Smrgstatic HRESULT NINE_WINAPI
14907ec681f3SmrgLockDevice9_DrawIndexedPrimitive( struct NineDevice9 *This,
14917ec681f3Smrg                                  D3DPRIMITIVETYPE PrimitiveType,
14927ec681f3Smrg                                  INT BaseVertexIndex,
14937ec681f3Smrg                                  UINT MinVertexIndex,
14947ec681f3Smrg                                  UINT NumVertices,
14957ec681f3Smrg                                  UINT startIndex,
14967ec681f3Smrg                                  UINT primCount )
14977ec681f3Smrg{
14987ec681f3Smrg    HRESULT r;
14997ec681f3Smrg    mtx_lock(&d3dlock_global);
15007ec681f3Smrg    r = NineDevice9_DrawIndexedPrimitive(This, PrimitiveType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
15017ec681f3Smrg    mtx_unlock(&d3dlock_global);
15027ec681f3Smrg    return r;
15037ec681f3Smrg}
15047ec681f3Smrg
15057ec681f3Smrgstatic HRESULT NINE_WINAPI
15067ec681f3SmrgLockDevice9_DrawPrimitiveUP( struct NineDevice9 *This,
15077ec681f3Smrg                             D3DPRIMITIVETYPE PrimitiveType,
15087ec681f3Smrg                             UINT PrimitiveCount,
15097ec681f3Smrg                             const void *pVertexStreamZeroData,
15107ec681f3Smrg                             UINT VertexStreamZeroStride )
15117ec681f3Smrg{
15127ec681f3Smrg    HRESULT r;
15137ec681f3Smrg    mtx_lock(&d3dlock_global);
15147ec681f3Smrg    r = NineDevice9_DrawPrimitiveUP(This, PrimitiveType, PrimitiveCount, pVertexStreamZeroData, VertexStreamZeroStride);
15157ec681f3Smrg    mtx_unlock(&d3dlock_global);
15167ec681f3Smrg    return r;
15177ec681f3Smrg}
15187ec681f3Smrg
15197ec681f3Smrgstatic HRESULT NINE_WINAPI
15207ec681f3SmrgLockDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This,
15217ec681f3Smrg                                    D3DPRIMITIVETYPE PrimitiveType,
15227ec681f3Smrg                                    UINT MinVertexIndex,
15237ec681f3Smrg                                    UINT NumVertices,
15247ec681f3Smrg                                    UINT PrimitiveCount,
15257ec681f3Smrg                                    const void *pIndexData,
15267ec681f3Smrg                                    D3DFORMAT IndexDataFormat,
15277ec681f3Smrg                                    const void *pVertexStreamZeroData,
15287ec681f3Smrg                                    UINT VertexStreamZeroStride )
15297ec681f3Smrg{
15307ec681f3Smrg    HRESULT r;
15317ec681f3Smrg    mtx_lock(&d3dlock_global);
15327ec681f3Smrg    r = NineDevice9_DrawIndexedPrimitiveUP(This, PrimitiveType, MinVertexIndex, NumVertices, PrimitiveCount, pIndexData, IndexDataFormat, pVertexStreamZeroData, VertexStreamZeroStride);
15337ec681f3Smrg    mtx_unlock(&d3dlock_global);
15347ec681f3Smrg    return r;
15357ec681f3Smrg}
15367ec681f3Smrg
15377ec681f3Smrgstatic HRESULT NINE_WINAPI
15387ec681f3SmrgLockDevice9_ProcessVertices( struct NineDevice9 *This,
15397ec681f3Smrg                             UINT SrcStartIndex,
15407ec681f3Smrg                             UINT DestIndex,
15417ec681f3Smrg                             UINT VertexCount,
15427ec681f3Smrg                             IDirect3DVertexBuffer9 *pDestBuffer,
15437ec681f3Smrg                             IDirect3DVertexDeclaration9 *pVertexDecl,
15447ec681f3Smrg                             DWORD Flags )
15457ec681f3Smrg{
15467ec681f3Smrg    HRESULT r;
15477ec681f3Smrg    mtx_lock(&d3dlock_global);
15487ec681f3Smrg    r = NineDevice9_ProcessVertices(This, SrcStartIndex, DestIndex, VertexCount, pDestBuffer, pVertexDecl, Flags);
15497ec681f3Smrg    mtx_unlock(&d3dlock_global);
15507ec681f3Smrg    return r;
15517ec681f3Smrg}
15527ec681f3Smrg
15537ec681f3Smrgstatic HRESULT NINE_WINAPI
15547ec681f3SmrgLockDevice9_CreateVertexDeclaration( struct NineDevice9 *This,
15557ec681f3Smrg                                     const D3DVERTEXELEMENT9 *pVertexElements,
15567ec681f3Smrg                                     IDirect3DVertexDeclaration9 **ppDecl )
15577ec681f3Smrg{
15587ec681f3Smrg    HRESULT r;
15597ec681f3Smrg    mtx_lock(&d3dlock_global);
15607ec681f3Smrg    r = NineDevice9_CreateVertexDeclaration(This, pVertexElements, ppDecl);
15617ec681f3Smrg    mtx_unlock(&d3dlock_global);
15627ec681f3Smrg    return r;
15637ec681f3Smrg}
15647ec681f3Smrg
15657ec681f3Smrgstatic HRESULT NINE_WINAPI
15667ec681f3SmrgLockDevice9_SetVertexDeclaration( struct NineDevice9 *This,
15677ec681f3Smrg                                  IDirect3DVertexDeclaration9 *pDecl )
15687ec681f3Smrg{
15697ec681f3Smrg    HRESULT r;
15707ec681f3Smrg    mtx_lock(&d3dlock_global);
15717ec681f3Smrg    r = NineDevice9_SetVertexDeclaration(This, pDecl);
15727ec681f3Smrg    mtx_unlock(&d3dlock_global);
15737ec681f3Smrg    return r;
15747ec681f3Smrg}
15757ec681f3Smrg
15767ec681f3Smrgstatic HRESULT NINE_WINAPI
15777ec681f3SmrgLockDevice9_GetVertexDeclaration( struct NineDevice9 *This,
15787ec681f3Smrg                                  IDirect3DVertexDeclaration9 **ppDecl )
15797ec681f3Smrg{
15807ec681f3Smrg    HRESULT r;
15817ec681f3Smrg    mtx_lock(&d3dlock_global);
15827ec681f3Smrg    r = NineDevice9_GetVertexDeclaration(This, ppDecl);
15837ec681f3Smrg    mtx_unlock(&d3dlock_global);
15847ec681f3Smrg    return r;
15857ec681f3Smrg}
15867ec681f3Smrg
15877ec681f3Smrgstatic HRESULT NINE_WINAPI
15887ec681f3SmrgLockDevice9_SetFVF( struct NineDevice9 *This,
15897ec681f3Smrg                    DWORD FVF )
15907ec681f3Smrg{
15917ec681f3Smrg    HRESULT r;
15927ec681f3Smrg    mtx_lock(&d3dlock_global);
15937ec681f3Smrg    r = NineDevice9_SetFVF(This, FVF);
15947ec681f3Smrg    mtx_unlock(&d3dlock_global);
15957ec681f3Smrg    return r;
15967ec681f3Smrg}
15977ec681f3Smrg
15987ec681f3Smrgstatic HRESULT NINE_WINAPI
15997ec681f3SmrgLockDevice9_GetFVF( struct NineDevice9 *This,
16007ec681f3Smrg                    DWORD *pFVF )
16017ec681f3Smrg{
16027ec681f3Smrg    HRESULT r;
16037ec681f3Smrg    mtx_lock(&d3dlock_global);
16047ec681f3Smrg    r = NineDevice9_GetFVF(This, pFVF);
16057ec681f3Smrg    mtx_unlock(&d3dlock_global);
16067ec681f3Smrg    return r;
16077ec681f3Smrg}
16087ec681f3Smrg
16097ec681f3Smrgstatic HRESULT NINE_WINAPI
16107ec681f3SmrgLockDevice9_CreateVertexShader( struct NineDevice9 *This,
16117ec681f3Smrg                                const DWORD *pFunction,
16127ec681f3Smrg                                IDirect3DVertexShader9 **ppShader )
16137ec681f3Smrg{
16147ec681f3Smrg    HRESULT r;
16157ec681f3Smrg    mtx_lock(&d3dlock_global);
16167ec681f3Smrg    r = NineDevice9_CreateVertexShader(This, pFunction, ppShader);
16177ec681f3Smrg    mtx_unlock(&d3dlock_global);
16187ec681f3Smrg    return r;
16197ec681f3Smrg}
16207ec681f3Smrg
16217ec681f3Smrgstatic HRESULT NINE_WINAPI
16227ec681f3SmrgLockDevice9_SetVertexShader( struct NineDevice9 *This,
16237ec681f3Smrg                             IDirect3DVertexShader9 *pShader )
16247ec681f3Smrg{
16257ec681f3Smrg    HRESULT r;
16267ec681f3Smrg    mtx_lock(&d3dlock_global);
16277ec681f3Smrg    r = NineDevice9_SetVertexShader(This, pShader);
16287ec681f3Smrg    mtx_unlock(&d3dlock_global);
16297ec681f3Smrg    return r;
16307ec681f3Smrg}
16317ec681f3Smrg
16327ec681f3Smrgstatic HRESULT NINE_WINAPI
16337ec681f3SmrgLockDevice9_GetVertexShader( struct NineDevice9 *This,
16347ec681f3Smrg                             IDirect3DVertexShader9 **ppShader )
16357ec681f3Smrg{
16367ec681f3Smrg    HRESULT r;
16377ec681f3Smrg    mtx_lock(&d3dlock_global);
16387ec681f3Smrg    r = NineDevice9_GetVertexShader(This, ppShader);
16397ec681f3Smrg    mtx_unlock(&d3dlock_global);
16407ec681f3Smrg    return r;
16417ec681f3Smrg}
16427ec681f3Smrg
16437ec681f3Smrgstatic HRESULT NINE_WINAPI
16447ec681f3SmrgLockDevice9_SetVertexShaderConstantF( struct NineDevice9 *This,
16457ec681f3Smrg                                      UINT StartRegister,
16467ec681f3Smrg                                      const float *pConstantData,
16477ec681f3Smrg                                      UINT Vector4fCount )
16487ec681f3Smrg{
16497ec681f3Smrg    HRESULT r;
16507ec681f3Smrg    mtx_lock(&d3dlock_global);
16517ec681f3Smrg    r = NineDevice9_SetVertexShaderConstantF(This, StartRegister, pConstantData, Vector4fCount);
16527ec681f3Smrg    mtx_unlock(&d3dlock_global);
16537ec681f3Smrg    return r;
16547ec681f3Smrg}
16557ec681f3Smrg
16567ec681f3Smrgstatic HRESULT NINE_WINAPI
16577ec681f3SmrgLockDevice9_GetVertexShaderConstantF( struct NineDevice9 *This,
16587ec681f3Smrg                                      UINT StartRegister,
16597ec681f3Smrg                                      float *pConstantData,
16607ec681f3Smrg                                      UINT Vector4fCount )
16617ec681f3Smrg{
16627ec681f3Smrg    HRESULT r;
16637ec681f3Smrg    mtx_lock(&d3dlock_global);
16647ec681f3Smrg    r = NineDevice9_GetVertexShaderConstantF(This, StartRegister, pConstantData, Vector4fCount);
16657ec681f3Smrg    mtx_unlock(&d3dlock_global);
16667ec681f3Smrg    return r;
16677ec681f3Smrg}
16687ec681f3Smrg
16697ec681f3Smrgstatic HRESULT NINE_WINAPI
16707ec681f3SmrgLockDevice9_SetVertexShaderConstantI( struct NineDevice9 *This,
16717ec681f3Smrg                                      UINT StartRegister,
16727ec681f3Smrg                                      const int *pConstantData,
16737ec681f3Smrg                                      UINT Vector4iCount )
16747ec681f3Smrg{
16757ec681f3Smrg    HRESULT r;
16767ec681f3Smrg    mtx_lock(&d3dlock_global);
16777ec681f3Smrg    r = NineDevice9_SetVertexShaderConstantI(This, StartRegister, pConstantData, Vector4iCount);
16787ec681f3Smrg    mtx_unlock(&d3dlock_global);
16797ec681f3Smrg    return r;
16807ec681f3Smrg}
16817ec681f3Smrg
16827ec681f3Smrgstatic HRESULT NINE_WINAPI
16837ec681f3SmrgLockDevice9_GetVertexShaderConstantI( struct NineDevice9 *This,
16847ec681f3Smrg                                      UINT StartRegister,
16857ec681f3Smrg                                      int *pConstantData,
16867ec681f3Smrg                                      UINT Vector4iCount )
16877ec681f3Smrg{
16887ec681f3Smrg    HRESULT r;
16897ec681f3Smrg    mtx_lock(&d3dlock_global);
16907ec681f3Smrg    r = NineDevice9_GetVertexShaderConstantI(This, StartRegister, pConstantData, Vector4iCount);
16917ec681f3Smrg    mtx_unlock(&d3dlock_global);
16927ec681f3Smrg    return r;
16937ec681f3Smrg}
16947ec681f3Smrg
16957ec681f3Smrgstatic HRESULT NINE_WINAPI
16967ec681f3SmrgLockDevice9_SetVertexShaderConstantB( struct NineDevice9 *This,
16977ec681f3Smrg                                      UINT StartRegister,
16987ec681f3Smrg                                      const BOOL *pConstantData,
16997ec681f3Smrg                                      UINT BoolCount )
17007ec681f3Smrg{
17017ec681f3Smrg    HRESULT r;
17027ec681f3Smrg    mtx_lock(&d3dlock_global);
17037ec681f3Smrg    r = NineDevice9_SetVertexShaderConstantB(This, StartRegister, pConstantData, BoolCount);
17047ec681f3Smrg    mtx_unlock(&d3dlock_global);
17057ec681f3Smrg    return r;
17067ec681f3Smrg}
17077ec681f3Smrg
17087ec681f3Smrgstatic HRESULT NINE_WINAPI
17097ec681f3SmrgLockDevice9_GetVertexShaderConstantB( struct NineDevice9 *This,
17107ec681f3Smrg                                      UINT StartRegister,
17117ec681f3Smrg                                      BOOL *pConstantData,
17127ec681f3Smrg                                      UINT BoolCount )
17137ec681f3Smrg{
17147ec681f3Smrg    HRESULT r;
17157ec681f3Smrg    mtx_lock(&d3dlock_global);
17167ec681f3Smrg    r = NineDevice9_GetVertexShaderConstantB(This, StartRegister, pConstantData, BoolCount);
17177ec681f3Smrg    mtx_unlock(&d3dlock_global);
17187ec681f3Smrg    return r;
17197ec681f3Smrg}
17207ec681f3Smrg
17217ec681f3Smrgstatic HRESULT NINE_WINAPI
17227ec681f3SmrgLockDevice9_SetStreamSource( struct NineDevice9 *This,
17237ec681f3Smrg                             UINT StreamNumber,
17247ec681f3Smrg                             IDirect3DVertexBuffer9 *pStreamData,
17257ec681f3Smrg                             UINT OffsetInBytes,
17267ec681f3Smrg                             UINT Stride )
17277ec681f3Smrg{
17287ec681f3Smrg    HRESULT r;
17297ec681f3Smrg    mtx_lock(&d3dlock_global);
17307ec681f3Smrg    r = NineDevice9_SetStreamSource(This, StreamNumber, pStreamData, OffsetInBytes, Stride);
17317ec681f3Smrg    mtx_unlock(&d3dlock_global);
17327ec681f3Smrg    return r;
17337ec681f3Smrg}
17347ec681f3Smrg
17357ec681f3Smrgstatic HRESULT NINE_WINAPI
17367ec681f3SmrgLockDevice9_GetStreamSource( struct NineDevice9 *This,
17377ec681f3Smrg                             UINT StreamNumber,
17387ec681f3Smrg                             IDirect3DVertexBuffer9 **ppStreamData,
17397ec681f3Smrg                             UINT *pOffsetInBytes,
17407ec681f3Smrg                             UINT *pStride )
17417ec681f3Smrg{
17427ec681f3Smrg    HRESULT r;
17437ec681f3Smrg    mtx_lock(&d3dlock_global);
17447ec681f3Smrg    r = NineDevice9_GetStreamSource(This, StreamNumber, ppStreamData, pOffsetInBytes, pStride);
17457ec681f3Smrg    mtx_unlock(&d3dlock_global);
17467ec681f3Smrg    return r;
17477ec681f3Smrg}
17487ec681f3Smrg
17497ec681f3Smrgstatic HRESULT NINE_WINAPI
17507ec681f3SmrgLockDevice9_SetStreamSourceFreq( struct NineDevice9 *This,
17517ec681f3Smrg                                 UINT StreamNumber,
17527ec681f3Smrg                                 UINT Setting )
17537ec681f3Smrg{
17547ec681f3Smrg    HRESULT r;
17557ec681f3Smrg    mtx_lock(&d3dlock_global);
17567ec681f3Smrg    r = NineDevice9_SetStreamSourceFreq(This, StreamNumber, Setting);
17577ec681f3Smrg    mtx_unlock(&d3dlock_global);
17587ec681f3Smrg    return r;
17597ec681f3Smrg}
17607ec681f3Smrg
17617ec681f3Smrgstatic HRESULT NINE_WINAPI
17627ec681f3SmrgLockDevice9_GetStreamSourceFreq( struct NineDevice9 *This,
17637ec681f3Smrg                                 UINT StreamNumber,
17647ec681f3Smrg                                 UINT *pSetting )
17657ec681f3Smrg{
17667ec681f3Smrg    HRESULT r;
17677ec681f3Smrg    mtx_lock(&d3dlock_global);
17687ec681f3Smrg    r = NineDevice9_GetStreamSourceFreq(This, StreamNumber, pSetting);
17697ec681f3Smrg    mtx_unlock(&d3dlock_global);
17707ec681f3Smrg    return r;
17717ec681f3Smrg}
17727ec681f3Smrg
17737ec681f3Smrgstatic HRESULT NINE_WINAPI
17747ec681f3SmrgLockDevice9_SetIndices( struct NineDevice9 *This,
17757ec681f3Smrg                        IDirect3DIndexBuffer9 *pIndexData )
17767ec681f3Smrg{
17777ec681f3Smrg    HRESULT r;
17787ec681f3Smrg    mtx_lock(&d3dlock_global);
17797ec681f3Smrg    r = NineDevice9_SetIndices(This, pIndexData);
17807ec681f3Smrg    mtx_unlock(&d3dlock_global);
17817ec681f3Smrg    return r;
17827ec681f3Smrg}
17837ec681f3Smrg
17847ec681f3Smrgstatic HRESULT NINE_WINAPI
17857ec681f3SmrgLockDevice9_GetIndices( struct NineDevice9 *This,
17867ec681f3Smrg                        IDirect3DIndexBuffer9 **ppIndexData )
17877ec681f3Smrg{
17887ec681f3Smrg    HRESULT r;
17897ec681f3Smrg    mtx_lock(&d3dlock_global);
17907ec681f3Smrg    r = NineDevice9_GetIndices(This, ppIndexData);
17917ec681f3Smrg    mtx_unlock(&d3dlock_global);
17927ec681f3Smrg    return r;
17937ec681f3Smrg}
17947ec681f3Smrg
17957ec681f3Smrgstatic HRESULT NINE_WINAPI
17967ec681f3SmrgLockDevice9_CreatePixelShader( struct NineDevice9 *This,
17977ec681f3Smrg                               const DWORD *pFunction,
17987ec681f3Smrg                               IDirect3DPixelShader9 **ppShader )
17997ec681f3Smrg{
18007ec681f3Smrg    HRESULT r;
18017ec681f3Smrg    mtx_lock(&d3dlock_global);
18027ec681f3Smrg    r = NineDevice9_CreatePixelShader(This, pFunction, ppShader);
18037ec681f3Smrg    mtx_unlock(&d3dlock_global);
18047ec681f3Smrg    return r;
18057ec681f3Smrg}
18067ec681f3Smrg
18077ec681f3Smrgstatic HRESULT NINE_WINAPI
18087ec681f3SmrgLockDevice9_SetPixelShader( struct NineDevice9 *This,
18097ec681f3Smrg                            IDirect3DPixelShader9 *pShader )
18107ec681f3Smrg{
18117ec681f3Smrg    HRESULT r;
18127ec681f3Smrg    mtx_lock(&d3dlock_global);
18137ec681f3Smrg    r = NineDevice9_SetPixelShader(This, pShader);
18147ec681f3Smrg    mtx_unlock(&d3dlock_global);
18157ec681f3Smrg    return r;
18167ec681f3Smrg}
18177ec681f3Smrg
18187ec681f3Smrgstatic HRESULT NINE_WINAPI
18197ec681f3SmrgLockDevice9_GetPixelShader( struct NineDevice9 *This,
18207ec681f3Smrg                            IDirect3DPixelShader9 **ppShader )
18217ec681f3Smrg{
18227ec681f3Smrg    HRESULT r;
18237ec681f3Smrg    mtx_lock(&d3dlock_global);
18247ec681f3Smrg    r = NineDevice9_GetPixelShader(This, ppShader);
18257ec681f3Smrg    mtx_unlock(&d3dlock_global);
18267ec681f3Smrg    return r;
18277ec681f3Smrg}
18287ec681f3Smrg
18297ec681f3Smrgstatic HRESULT NINE_WINAPI
18307ec681f3SmrgLockDevice9_SetPixelShaderConstantF( struct NineDevice9 *This,
18317ec681f3Smrg                                     UINT StartRegister,
18327ec681f3Smrg                                     const float *pConstantData,
18337ec681f3Smrg                                     UINT Vector4fCount )
18347ec681f3Smrg{
18357ec681f3Smrg    HRESULT r;
18367ec681f3Smrg    mtx_lock(&d3dlock_global);
18377ec681f3Smrg    r = NineDevice9_SetPixelShaderConstantF(This, StartRegister, pConstantData, Vector4fCount);
18387ec681f3Smrg    mtx_unlock(&d3dlock_global);
18397ec681f3Smrg    return r;
18407ec681f3Smrg}
18417ec681f3Smrg
18427ec681f3Smrgstatic HRESULT NINE_WINAPI
18437ec681f3SmrgLockDevice9_GetPixelShaderConstantF( struct NineDevice9 *This,
18447ec681f3Smrg                                     UINT StartRegister,
18457ec681f3Smrg                                     float *pConstantData,
18467ec681f3Smrg                                     UINT Vector4fCount )
18477ec681f3Smrg{
18487ec681f3Smrg    HRESULT r;
18497ec681f3Smrg    mtx_lock(&d3dlock_global);
18507ec681f3Smrg    r = NineDevice9_GetPixelShaderConstantF(This, StartRegister, pConstantData, Vector4fCount);
18517ec681f3Smrg    mtx_unlock(&d3dlock_global);
18527ec681f3Smrg    return r;
18537ec681f3Smrg}
18547ec681f3Smrg
18557ec681f3Smrgstatic HRESULT NINE_WINAPI
18567ec681f3SmrgLockDevice9_SetPixelShaderConstantI( struct NineDevice9 *This,
18577ec681f3Smrg                                     UINT StartRegister,
18587ec681f3Smrg                                     const int *pConstantData,
18597ec681f3Smrg                                     UINT Vector4iCount )
18607ec681f3Smrg{
18617ec681f3Smrg    HRESULT r;
18627ec681f3Smrg    mtx_lock(&d3dlock_global);
18637ec681f3Smrg    r = NineDevice9_SetPixelShaderConstantI(This, StartRegister, pConstantData, Vector4iCount);
18647ec681f3Smrg    mtx_unlock(&d3dlock_global);
18657ec681f3Smrg    return r;
18667ec681f3Smrg}
18677ec681f3Smrg
18687ec681f3Smrgstatic HRESULT NINE_WINAPI
18697ec681f3SmrgLockDevice9_GetPixelShaderConstantI( struct NineDevice9 *This,
18707ec681f3Smrg                                     UINT StartRegister,
18717ec681f3Smrg                                     int *pConstantData,
18727ec681f3Smrg                                     UINT Vector4iCount )
18737ec681f3Smrg{
18747ec681f3Smrg    HRESULT r;
18757ec681f3Smrg    mtx_lock(&d3dlock_global);
18767ec681f3Smrg    r = NineDevice9_GetPixelShaderConstantI(This, StartRegister, pConstantData, Vector4iCount);
18777ec681f3Smrg    mtx_unlock(&d3dlock_global);
18787ec681f3Smrg    return r;
18797ec681f3Smrg}
18807ec681f3Smrg
18817ec681f3Smrgstatic HRESULT NINE_WINAPI
18827ec681f3SmrgLockDevice9_SetPixelShaderConstantB( struct NineDevice9 *This,
18837ec681f3Smrg                                     UINT StartRegister,
18847ec681f3Smrg                                     const BOOL *pConstantData,
18857ec681f3Smrg                                     UINT BoolCount )
18867ec681f3Smrg{
18877ec681f3Smrg    HRESULT r;
18887ec681f3Smrg    mtx_lock(&d3dlock_global);
18897ec681f3Smrg    r = NineDevice9_SetPixelShaderConstantB(This, StartRegister, pConstantData, BoolCount);
18907ec681f3Smrg    mtx_unlock(&d3dlock_global);
18917ec681f3Smrg    return r;
18927ec681f3Smrg}
18937ec681f3Smrg
18947ec681f3Smrgstatic HRESULT NINE_WINAPI
18957ec681f3SmrgLockDevice9_GetPixelShaderConstantB( struct NineDevice9 *This,
18967ec681f3Smrg                                     UINT StartRegister,
18977ec681f3Smrg                                     BOOL *pConstantData,
18987ec681f3Smrg                                     UINT BoolCount )
18997ec681f3Smrg{
19007ec681f3Smrg    HRESULT r;
19017ec681f3Smrg    mtx_lock(&d3dlock_global);
19027ec681f3Smrg    r = NineDevice9_GetPixelShaderConstantB(This, StartRegister, pConstantData, BoolCount);
19037ec681f3Smrg    mtx_unlock(&d3dlock_global);
19047ec681f3Smrg    return r;
19057ec681f3Smrg}
19067ec681f3Smrg
19077ec681f3Smrgstatic HRESULT NINE_WINAPI
19087ec681f3SmrgLockDevice9_DrawRectPatch( struct NineDevice9 *This,
19097ec681f3Smrg                           UINT Handle,
19107ec681f3Smrg                           const float *pNumSegs,
19117ec681f3Smrg                           const D3DRECTPATCH_INFO *pRectPatchInfo )
19127ec681f3Smrg{
19137ec681f3Smrg    HRESULT r;
19147ec681f3Smrg    mtx_lock(&d3dlock_global);
19157ec681f3Smrg    r = NineDevice9_DrawRectPatch(This, Handle, pNumSegs, pRectPatchInfo);
19167ec681f3Smrg    mtx_unlock(&d3dlock_global);
19177ec681f3Smrg    return r;
19187ec681f3Smrg}
19197ec681f3Smrg
19207ec681f3Smrgstatic HRESULT NINE_WINAPI
19217ec681f3SmrgLockDevice9_DrawTriPatch( struct NineDevice9 *This,
19227ec681f3Smrg                          UINT Handle,
19237ec681f3Smrg                          const float *pNumSegs,
19247ec681f3Smrg                          const D3DTRIPATCH_INFO *pTriPatchInfo )
19257ec681f3Smrg{
19267ec681f3Smrg    HRESULT r;
19277ec681f3Smrg    mtx_lock(&d3dlock_global);
19287ec681f3Smrg    r = NineDevice9_DrawTriPatch(This, Handle, pNumSegs, pTriPatchInfo);
19297ec681f3Smrg    mtx_unlock(&d3dlock_global);
19307ec681f3Smrg    return r;
19317ec681f3Smrg}
19327ec681f3Smrg
19337ec681f3Smrgstatic HRESULT NINE_WINAPI
19347ec681f3SmrgLockDevice9_DeletePatch( struct NineDevice9 *This,
19357ec681f3Smrg                         UINT Handle )
19367ec681f3Smrg{
19377ec681f3Smrg    HRESULT r;
19387ec681f3Smrg    mtx_lock(&d3dlock_global);
19397ec681f3Smrg    r = NineDevice9_DeletePatch(This, Handle);
19407ec681f3Smrg    mtx_unlock(&d3dlock_global);
19417ec681f3Smrg    return r;
19427ec681f3Smrg}
19437ec681f3Smrg
19447ec681f3Smrgstatic HRESULT NINE_WINAPI
19457ec681f3SmrgLockDevice9_CreateQuery( struct NineDevice9 *This,
19467ec681f3Smrg                         D3DQUERYTYPE Type,
19477ec681f3Smrg                         IDirect3DQuery9 **ppQuery )
19487ec681f3Smrg{
19497ec681f3Smrg    HRESULT r;
19507ec681f3Smrg    mtx_lock(&d3dlock_global);
19517ec681f3Smrg    r = NineDevice9_CreateQuery(This, Type, ppQuery);
19527ec681f3Smrg    mtx_unlock(&d3dlock_global);
19537ec681f3Smrg    return r;
19547ec681f3Smrg}
19557ec681f3Smrg
19567ec681f3SmrgIDirect3DDevice9Vtbl LockDevice9_vtable = {
19577ec681f3Smrg    (void *)NineUnknown_QueryInterface,
19587ec681f3Smrg    (void *)NineUnknown_AddRef,
19597ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
19607ec681f3Smrg    (void *)LockDevice9_TestCooperativeLevel,
19617ec681f3Smrg    (void *)LockDevice9_GetAvailableTextureMem,
19627ec681f3Smrg    (void *)LockDevice9_EvictManagedResources,
19637ec681f3Smrg    (void *)LockDevice9_GetDirect3D,
19647ec681f3Smrg    (void *)NineDevice9_GetDeviceCaps, /* immutable */
19657ec681f3Smrg    (void *)LockDevice9_GetDisplayMode,
19667ec681f3Smrg    (void *)NineDevice9_GetCreationParameters, /* immutable */
19677ec681f3Smrg    (void *)LockDevice9_SetCursorProperties,
19687ec681f3Smrg    (void *)LockDevice9_SetCursorPosition,
19697ec681f3Smrg    (void *)LockDevice9_ShowCursor,
19707ec681f3Smrg    (void *)LockDevice9_CreateAdditionalSwapChain,
19717ec681f3Smrg    (void *)LockDevice9_GetSwapChain,
19727ec681f3Smrg    (void *)LockDevice9_GetNumberOfSwapChains,
19737ec681f3Smrg    (void *)LockDevice9_Reset,
19747ec681f3Smrg    (void *)LockDevice9_Present,
19757ec681f3Smrg    (void *)LockDevice9_GetBackBuffer,
19767ec681f3Smrg    (void *)LockDevice9_GetRasterStatus,
19777ec681f3Smrg    (void *)LockDevice9_SetDialogBoxMode,
19787ec681f3Smrg    (void *)LockDevice9_SetGammaRamp,
19797ec681f3Smrg    (void *)LockDevice9_GetGammaRamp,
19807ec681f3Smrg    (void *)LockDevice9_CreateTexture,
19817ec681f3Smrg    (void *)LockDevice9_CreateVolumeTexture,
19827ec681f3Smrg    (void *)LockDevice9_CreateCubeTexture,
19837ec681f3Smrg    (void *)LockDevice9_CreateVertexBuffer,
19847ec681f3Smrg    (void *)LockDevice9_CreateIndexBuffer,
19857ec681f3Smrg    (void *)LockDevice9_CreateRenderTarget,
19867ec681f3Smrg    (void *)LockDevice9_CreateDepthStencilSurface,
19877ec681f3Smrg    (void *)LockDevice9_UpdateSurface,
19887ec681f3Smrg    (void *)LockDevice9_UpdateTexture,
19897ec681f3Smrg    (void *)LockDevice9_GetRenderTargetData,
19907ec681f3Smrg    (void *)LockDevice9_GetFrontBufferData,
19917ec681f3Smrg    (void *)LockDevice9_StretchRect,
19927ec681f3Smrg    (void *)LockDevice9_ColorFill,
19937ec681f3Smrg    (void *)LockDevice9_CreateOffscreenPlainSurface,
19947ec681f3Smrg    (void *)LockDevice9_SetRenderTarget,
19957ec681f3Smrg    (void *)LockDevice9_GetRenderTarget,
19967ec681f3Smrg    (void *)LockDevice9_SetDepthStencilSurface,
19977ec681f3Smrg    (void *)LockDevice9_GetDepthStencilSurface,
19987ec681f3Smrg    (void *)LockDevice9_BeginScene,
19997ec681f3Smrg    (void *)LockDevice9_EndScene,
20007ec681f3Smrg    (void *)LockDevice9_Clear,
20017ec681f3Smrg    (void *)LockDevice9_SetTransform,
20027ec681f3Smrg    (void *)LockDevice9_GetTransform,
20037ec681f3Smrg    (void *)LockDevice9_MultiplyTransform,
20047ec681f3Smrg    (void *)LockDevice9_SetViewport,
20057ec681f3Smrg    (void *)LockDevice9_GetViewport,
20067ec681f3Smrg    (void *)LockDevice9_SetMaterial,
20077ec681f3Smrg    (void *)LockDevice9_GetMaterial,
20087ec681f3Smrg    (void *)LockDevice9_SetLight,
20097ec681f3Smrg    (void *)LockDevice9_GetLight,
20107ec681f3Smrg    (void *)LockDevice9_LightEnable,
20117ec681f3Smrg    (void *)LockDevice9_GetLightEnable,
20127ec681f3Smrg    (void *)LockDevice9_SetClipPlane,
20137ec681f3Smrg    (void *)LockDevice9_GetClipPlane,
20147ec681f3Smrg    (void *)LockDevice9_SetRenderState,
20157ec681f3Smrg    (void *)LockDevice9_GetRenderState,
20167ec681f3Smrg    (void *)LockDevice9_CreateStateBlock,
20177ec681f3Smrg    (void *)LockDevice9_BeginStateBlock,
20187ec681f3Smrg    (void *)LockDevice9_EndStateBlock,
20197ec681f3Smrg    (void *)LockDevice9_SetClipStatus,
20207ec681f3Smrg    (void *)LockDevice9_GetClipStatus,
20217ec681f3Smrg    (void *)LockDevice9_GetTexture,
20227ec681f3Smrg    (void *)LockDevice9_SetTexture,
20237ec681f3Smrg    (void *)LockDevice9_GetTextureStageState,
20247ec681f3Smrg    (void *)LockDevice9_SetTextureStageState,
20257ec681f3Smrg    (void *)LockDevice9_GetSamplerState,
20267ec681f3Smrg    (void *)LockDevice9_SetSamplerState,
20277ec681f3Smrg    (void *)LockDevice9_ValidateDevice,
20287ec681f3Smrg    (void *)LockDevice9_SetPaletteEntries,
20297ec681f3Smrg    (void *)LockDevice9_GetPaletteEntries,
20307ec681f3Smrg    (void *)LockDevice9_SetCurrentTexturePalette,
20317ec681f3Smrg    (void *)LockDevice9_GetCurrentTexturePalette,
20327ec681f3Smrg    (void *)LockDevice9_SetScissorRect,
20337ec681f3Smrg    (void *)LockDevice9_GetScissorRect,
20347ec681f3Smrg    (void *)LockDevice9_SetSoftwareVertexProcessing,
20357ec681f3Smrg    (void *)LockDevice9_GetSoftwareVertexProcessing,
20367ec681f3Smrg    (void *)LockDevice9_SetNPatchMode,
20377ec681f3Smrg    (void *)LockDevice9_GetNPatchMode,
20387ec681f3Smrg    (void *)LockDevice9_DrawPrimitive,
20397ec681f3Smrg    (void *)LockDevice9_DrawIndexedPrimitive,
20407ec681f3Smrg    (void *)LockDevice9_DrawPrimitiveUP,
20417ec681f3Smrg    (void *)LockDevice9_DrawIndexedPrimitiveUP,
20427ec681f3Smrg    (void *)LockDevice9_ProcessVertices,
20437ec681f3Smrg    (void *)LockDevice9_CreateVertexDeclaration,
20447ec681f3Smrg    (void *)LockDevice9_SetVertexDeclaration,
20457ec681f3Smrg    (void *)LockDevice9_GetVertexDeclaration,
20467ec681f3Smrg    (void *)LockDevice9_SetFVF,
20477ec681f3Smrg    (void *)LockDevice9_GetFVF,
20487ec681f3Smrg    (void *)LockDevice9_CreateVertexShader,
20497ec681f3Smrg    (void *)LockDevice9_SetVertexShader,
20507ec681f3Smrg    (void *)LockDevice9_GetVertexShader,
20517ec681f3Smrg    (void *)LockDevice9_SetVertexShaderConstantF,
20527ec681f3Smrg    (void *)LockDevice9_GetVertexShaderConstantF,
20537ec681f3Smrg    (void *)LockDevice9_SetVertexShaderConstantI,
20547ec681f3Smrg    (void *)LockDevice9_GetVertexShaderConstantI,
20557ec681f3Smrg    (void *)LockDevice9_SetVertexShaderConstantB,
20567ec681f3Smrg    (void *)LockDevice9_GetVertexShaderConstantB,
20577ec681f3Smrg    (void *)LockDevice9_SetStreamSource,
20587ec681f3Smrg    (void *)LockDevice9_GetStreamSource,
20597ec681f3Smrg    (void *)LockDevice9_SetStreamSourceFreq,
20607ec681f3Smrg    (void *)LockDevice9_GetStreamSourceFreq,
20617ec681f3Smrg    (void *)LockDevice9_SetIndices,
20627ec681f3Smrg    (void *)LockDevice9_GetIndices,
20637ec681f3Smrg    (void *)LockDevice9_CreatePixelShader,
20647ec681f3Smrg    (void *)LockDevice9_SetPixelShader,
20657ec681f3Smrg    (void *)LockDevice9_GetPixelShader,
20667ec681f3Smrg    (void *)LockDevice9_SetPixelShaderConstantF,
20677ec681f3Smrg    (void *)LockDevice9_GetPixelShaderConstantF,
20687ec681f3Smrg    (void *)LockDevice9_SetPixelShaderConstantI,
20697ec681f3Smrg    (void *)LockDevice9_GetPixelShaderConstantI,
20707ec681f3Smrg    (void *)LockDevice9_SetPixelShaderConstantB,
20717ec681f3Smrg    (void *)LockDevice9_GetPixelShaderConstantB,
20727ec681f3Smrg    (void *)LockDevice9_DrawRectPatch,
20737ec681f3Smrg    (void *)LockDevice9_DrawTriPatch,
20747ec681f3Smrg    (void *)LockDevice9_DeletePatch,
20757ec681f3Smrg    (void *)LockDevice9_CreateQuery
20767ec681f3Smrg};
20777ec681f3Smrg
20787ec681f3Smrgstatic HRESULT NINE_WINAPI
20797ec681f3SmrgLockDevice9Ex_SetConvolutionMonoKernel( struct NineDevice9Ex *This,
20807ec681f3Smrg                                        UINT width,
20817ec681f3Smrg                                        UINT height,
20827ec681f3Smrg                                        float *rows,
20837ec681f3Smrg                                        float *columns )
20847ec681f3Smrg{
20857ec681f3Smrg    HRESULT r;
20867ec681f3Smrg    mtx_lock(&d3dlock_global);
20877ec681f3Smrg    r = NineDevice9Ex_SetConvolutionMonoKernel(This, width, height, rows, columns);
20887ec681f3Smrg    mtx_unlock(&d3dlock_global);
20897ec681f3Smrg    return r;
20907ec681f3Smrg}
20917ec681f3Smrg
20927ec681f3Smrgstatic HRESULT NINE_WINAPI
20937ec681f3SmrgLockDevice9Ex_ComposeRects( struct NineDevice9Ex *This,
20947ec681f3Smrg                            IDirect3DSurface9 *pSrc,
20957ec681f3Smrg                            IDirect3DSurface9 *pDst,
20967ec681f3Smrg                            IDirect3DVertexBuffer9 *pSrcRectDescs,
20977ec681f3Smrg                            UINT NumRects,
20987ec681f3Smrg                            IDirect3DVertexBuffer9 *pDstRectDescs,
20997ec681f3Smrg                            D3DCOMPOSERECTSOP Operation,
21007ec681f3Smrg                            int Xoffset,
21017ec681f3Smrg                            int Yoffset )
21027ec681f3Smrg{
21037ec681f3Smrg    HRESULT r;
21047ec681f3Smrg    mtx_lock(&d3dlock_global);
21057ec681f3Smrg    r = NineDevice9Ex_ComposeRects(This, pSrc, pDst, pSrcRectDescs, NumRects, pDstRectDescs, Operation, Xoffset, Yoffset);
21067ec681f3Smrg    mtx_unlock(&d3dlock_global);
21077ec681f3Smrg    return r;
21087ec681f3Smrg}
21097ec681f3Smrg
21107ec681f3Smrgstatic HRESULT NINE_WINAPI
21117ec681f3SmrgLockDevice9Ex_PresentEx( struct NineDevice9Ex *This,
21127ec681f3Smrg                         const RECT *pSourceRect,
21137ec681f3Smrg                         const RECT *pDestRect,
21147ec681f3Smrg                         HWND hDestWindowOverride,
21157ec681f3Smrg                         const RGNDATA *pDirtyRegion,
21167ec681f3Smrg                         DWORD dwFlags )
21177ec681f3Smrg{
21187ec681f3Smrg    HRESULT r;
21197ec681f3Smrg    mtx_lock(&d3dlock_global);
21207ec681f3Smrg    r = NineDevice9Ex_PresentEx(This, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion, dwFlags);
21217ec681f3Smrg    mtx_unlock(&d3dlock_global);
21227ec681f3Smrg    return r;
21237ec681f3Smrg}
21247ec681f3Smrg
21257ec681f3Smrgstatic HRESULT NINE_WINAPI
21267ec681f3SmrgLockDevice9Ex_GetGPUThreadPriority( struct NineDevice9Ex *This,
21277ec681f3Smrg                                    INT *pPriority )
21287ec681f3Smrg{
21297ec681f3Smrg    HRESULT r;
21307ec681f3Smrg    mtx_lock(&d3dlock_global);
21317ec681f3Smrg    r = NineDevice9Ex_GetGPUThreadPriority(This, pPriority);
21327ec681f3Smrg    mtx_unlock(&d3dlock_global);
21337ec681f3Smrg    return r;
21347ec681f3Smrg}
21357ec681f3Smrg
21367ec681f3Smrgstatic HRESULT NINE_WINAPI
21377ec681f3SmrgLockDevice9Ex_SetGPUThreadPriority( struct NineDevice9Ex *This,
21387ec681f3Smrg                                    INT Priority )
21397ec681f3Smrg{
21407ec681f3Smrg    HRESULT r;
21417ec681f3Smrg    mtx_lock(&d3dlock_global);
21427ec681f3Smrg    r = NineDevice9Ex_SetGPUThreadPriority(This, Priority);
21437ec681f3Smrg    mtx_unlock(&d3dlock_global);
21447ec681f3Smrg    return r;
21457ec681f3Smrg}
21467ec681f3Smrg
21477ec681f3Smrgstatic HRESULT NINE_WINAPI
21487ec681f3SmrgLockDevice9Ex_WaitForVBlank( struct NineDevice9Ex *This,
21497ec681f3Smrg                             UINT iSwapChain )
21507ec681f3Smrg{
21517ec681f3Smrg    HRESULT r;
21527ec681f3Smrg    mtx_lock(&d3dlock_global);
21537ec681f3Smrg    r = NineDevice9Ex_WaitForVBlank(This, iSwapChain);
21547ec681f3Smrg    mtx_unlock(&d3dlock_global);
21557ec681f3Smrg    return r;
21567ec681f3Smrg}
21577ec681f3Smrg
21587ec681f3Smrgstatic HRESULT NINE_WINAPI
21597ec681f3SmrgLockDevice9Ex_CheckResourceResidency( struct NineDevice9Ex *This,
21607ec681f3Smrg                                      IDirect3DResource9 **pResourceArray,
21617ec681f3Smrg                                      UINT32 NumResources )
21627ec681f3Smrg{
21637ec681f3Smrg    HRESULT r;
21647ec681f3Smrg    mtx_lock(&d3dlock_global);
21657ec681f3Smrg    r = NineDevice9Ex_CheckResourceResidency(This, pResourceArray, NumResources);
21667ec681f3Smrg    mtx_unlock(&d3dlock_global);
21677ec681f3Smrg    return r;
21687ec681f3Smrg}
21697ec681f3Smrg
21707ec681f3Smrgstatic HRESULT NINE_WINAPI
21717ec681f3SmrgLockDevice9Ex_SetMaximumFrameLatency( struct NineDevice9Ex *This,
21727ec681f3Smrg                                      UINT MaxLatency )
21737ec681f3Smrg{
21747ec681f3Smrg    HRESULT r;
21757ec681f3Smrg    mtx_lock(&d3dlock_global);
21767ec681f3Smrg    r = NineDevice9Ex_SetMaximumFrameLatency(This, MaxLatency);
21777ec681f3Smrg    mtx_unlock(&d3dlock_global);
21787ec681f3Smrg    return r;
21797ec681f3Smrg}
21807ec681f3Smrg
21817ec681f3Smrgstatic HRESULT NINE_WINAPI
21827ec681f3SmrgLockDevice9Ex_GetMaximumFrameLatency( struct NineDevice9Ex *This,
21837ec681f3Smrg                                      UINT *pMaxLatency )
21847ec681f3Smrg{
21857ec681f3Smrg    HRESULT r;
21867ec681f3Smrg    mtx_lock(&d3dlock_global);
21877ec681f3Smrg    r = NineDevice9Ex_GetMaximumFrameLatency(This, pMaxLatency);
21887ec681f3Smrg    mtx_unlock(&d3dlock_global);
21897ec681f3Smrg    return r;
21907ec681f3Smrg}
21917ec681f3Smrg
21927ec681f3Smrgstatic HRESULT NINE_WINAPI
21937ec681f3SmrgLockDevice9Ex_CheckDeviceState( struct NineDevice9Ex *This,
21947ec681f3Smrg                                HWND hDestinationWindow )
21957ec681f3Smrg{
21967ec681f3Smrg    HRESULT r;
21977ec681f3Smrg    mtx_lock(&d3dlock_global);
21987ec681f3Smrg    r = NineDevice9Ex_CheckDeviceState(This, hDestinationWindow);
21997ec681f3Smrg    mtx_unlock(&d3dlock_global);
22007ec681f3Smrg    return r;
22017ec681f3Smrg}
22027ec681f3Smrg
22037ec681f3Smrgstatic HRESULT NINE_WINAPI
22047ec681f3SmrgLockDevice9Ex_CreateRenderTargetEx( struct NineDevice9Ex *This,
22057ec681f3Smrg                                    UINT Width,
22067ec681f3Smrg                                    UINT Height,
22077ec681f3Smrg                                    D3DFORMAT Format,
22087ec681f3Smrg                                    D3DMULTISAMPLE_TYPE MultiSample,
22097ec681f3Smrg                                    DWORD MultisampleQuality,
22107ec681f3Smrg                                    BOOL Lockable,
22117ec681f3Smrg                                    IDirect3DSurface9 **ppSurface,
22127ec681f3Smrg                                    HANDLE *pSharedHandle,
22137ec681f3Smrg                                    DWORD Usage )
22147ec681f3Smrg{
22157ec681f3Smrg    HRESULT r;
22167ec681f3Smrg    mtx_lock(&d3dlock_global);
22177ec681f3Smrg    r = NineDevice9Ex_CreateRenderTargetEx(This, Width, Height, Format, MultiSample, MultisampleQuality, Lockable, ppSurface, pSharedHandle, Usage);
22187ec681f3Smrg    mtx_unlock(&d3dlock_global);
22197ec681f3Smrg    return r;
22207ec681f3Smrg}
22217ec681f3Smrg
22227ec681f3Smrgstatic HRESULT NINE_WINAPI
22237ec681f3SmrgLockDevice9Ex_CreateOffscreenPlainSurfaceEx( struct NineDevice9Ex *This,
22247ec681f3Smrg                                             UINT Width,
22257ec681f3Smrg                                             UINT Height,
22267ec681f3Smrg                                             D3DFORMAT Format,
22277ec681f3Smrg                                             D3DPOOL Pool,
22287ec681f3Smrg                                             IDirect3DSurface9 **ppSurface,
22297ec681f3Smrg                                             HANDLE *pSharedHandle,
22307ec681f3Smrg                                             DWORD Usage )
22317ec681f3Smrg{
22327ec681f3Smrg    HRESULT r;
22337ec681f3Smrg    mtx_lock(&d3dlock_global);
22347ec681f3Smrg    r = NineDevice9Ex_CreateOffscreenPlainSurfaceEx(This, Width, Height, Format, Pool, ppSurface, pSharedHandle, Usage);
22357ec681f3Smrg    mtx_unlock(&d3dlock_global);
22367ec681f3Smrg    return r;
22377ec681f3Smrg}
22387ec681f3Smrg
22397ec681f3Smrgstatic HRESULT NINE_WINAPI
22407ec681f3SmrgLockDevice9Ex_CreateDepthStencilSurfaceEx( struct NineDevice9Ex *This,
22417ec681f3Smrg                                           UINT Width,
22427ec681f3Smrg                                           UINT Height,
22437ec681f3Smrg                                           D3DFORMAT Format,
22447ec681f3Smrg                                           D3DMULTISAMPLE_TYPE MultiSample,
22457ec681f3Smrg                                           DWORD MultisampleQuality,
22467ec681f3Smrg                                           BOOL Discard,
22477ec681f3Smrg                                           IDirect3DSurface9 **ppSurface,
22487ec681f3Smrg                                           HANDLE *pSharedHandle,
22497ec681f3Smrg                                           DWORD Usage )
22507ec681f3Smrg{
22517ec681f3Smrg    HRESULT r;
22527ec681f3Smrg    mtx_lock(&d3dlock_global);
22537ec681f3Smrg    r = NineDevice9Ex_CreateDepthStencilSurfaceEx(This, Width, Height, Format, MultiSample, MultisampleQuality, Discard, ppSurface, pSharedHandle, Usage);
22547ec681f3Smrg    mtx_unlock(&d3dlock_global);
22557ec681f3Smrg    return r;
22567ec681f3Smrg}
22577ec681f3Smrg
22587ec681f3Smrgstatic HRESULT NINE_WINAPI
22597ec681f3SmrgLockDevice9Ex_ResetEx( struct NineDevice9Ex *This,
22607ec681f3Smrg                       D3DPRESENT_PARAMETERS *pPresentationParameters,
22617ec681f3Smrg                       D3DDISPLAYMODEEX *pFullscreenDisplayMode )
22627ec681f3Smrg{
22637ec681f3Smrg    HRESULT r;
22647ec681f3Smrg    mtx_lock(&d3dlock_global);
22657ec681f3Smrg    r = NineDevice9Ex_ResetEx(This, pPresentationParameters, pFullscreenDisplayMode);
22667ec681f3Smrg    mtx_unlock(&d3dlock_global);
22677ec681f3Smrg    return r;
22687ec681f3Smrg}
22697ec681f3Smrg
22707ec681f3Smrgstatic HRESULT NINE_WINAPI
22717ec681f3SmrgLockDevice9Ex_GetDisplayModeEx( struct NineDevice9Ex *This,
22727ec681f3Smrg                                UINT iSwapChain,
22737ec681f3Smrg                                D3DDISPLAYMODEEX *pMode,
22747ec681f3Smrg                                D3DDISPLAYROTATION *pRotation )
22757ec681f3Smrg{
22767ec681f3Smrg    HRESULT r;
22777ec681f3Smrg    mtx_lock(&d3dlock_global);
22787ec681f3Smrg    r = NineDevice9Ex_GetDisplayModeEx(This, iSwapChain, pMode, pRotation);
22797ec681f3Smrg    mtx_unlock(&d3dlock_global);
22807ec681f3Smrg    return r;
22817ec681f3Smrg}
22827ec681f3Smrg
22837ec681f3SmrgIDirect3DDevice9ExVtbl LockDevice9Ex_vtable = {
22847ec681f3Smrg    (void *)NineUnknown_QueryInterface,
22857ec681f3Smrg    (void *)NineUnknown_AddRef,
22867ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
22877ec681f3Smrg    (void *)LockDevice9_TestCooperativeLevel,
22887ec681f3Smrg    (void *)LockDevice9_GetAvailableTextureMem,
22897ec681f3Smrg    (void *)LockDevice9_EvictManagedResources,
22907ec681f3Smrg    (void *)LockDevice9_GetDirect3D,
22917ec681f3Smrg    (void *)NineDevice9_GetDeviceCaps,
22927ec681f3Smrg    (void *)LockDevice9_GetDisplayMode,
22937ec681f3Smrg    (void *)NineDevice9_GetCreationParameters,
22947ec681f3Smrg    (void *)LockDevice9_SetCursorProperties,
22957ec681f3Smrg    (void *)LockDevice9_SetCursorPosition,
22967ec681f3Smrg    (void *)LockDevice9_ShowCursor,
22977ec681f3Smrg    (void *)LockDevice9_CreateAdditionalSwapChain,
22987ec681f3Smrg    (void *)LockDevice9_GetSwapChain,
22997ec681f3Smrg    (void *)LockDevice9_GetNumberOfSwapChains,
23007ec681f3Smrg    (void *)LockDevice9_Reset,
23017ec681f3Smrg    (void *)LockDevice9_Present,
23027ec681f3Smrg    (void *)LockDevice9_GetBackBuffer,
23037ec681f3Smrg    (void *)LockDevice9_GetRasterStatus,
23047ec681f3Smrg    (void *)LockDevice9_SetDialogBoxMode,
23057ec681f3Smrg    (void *)LockDevice9_SetGammaRamp,
23067ec681f3Smrg    (void *)LockDevice9_GetGammaRamp,
23077ec681f3Smrg    (void *)LockDevice9_CreateTexture,
23087ec681f3Smrg    (void *)LockDevice9_CreateVolumeTexture,
23097ec681f3Smrg    (void *)LockDevice9_CreateCubeTexture,
23107ec681f3Smrg    (void *)LockDevice9_CreateVertexBuffer,
23117ec681f3Smrg    (void *)LockDevice9_CreateIndexBuffer,
23127ec681f3Smrg    (void *)LockDevice9_CreateRenderTarget,
23137ec681f3Smrg    (void *)LockDevice9_CreateDepthStencilSurface,
23147ec681f3Smrg    (void *)LockDevice9_UpdateSurface,
23157ec681f3Smrg    (void *)LockDevice9_UpdateTexture,
23167ec681f3Smrg    (void *)LockDevice9_GetRenderTargetData,
23177ec681f3Smrg    (void *)LockDevice9_GetFrontBufferData,
23187ec681f3Smrg    (void *)LockDevice9_StretchRect,
23197ec681f3Smrg    (void *)LockDevice9_ColorFill,
23207ec681f3Smrg    (void *)LockDevice9_CreateOffscreenPlainSurface,
23217ec681f3Smrg    (void *)LockDevice9_SetRenderTarget,
23227ec681f3Smrg    (void *)LockDevice9_GetRenderTarget,
23237ec681f3Smrg    (void *)LockDevice9_SetDepthStencilSurface,
23247ec681f3Smrg    (void *)LockDevice9_GetDepthStencilSurface,
23257ec681f3Smrg    (void *)LockDevice9_BeginScene,
23267ec681f3Smrg    (void *)LockDevice9_EndScene,
23277ec681f3Smrg    (void *)LockDevice9_Clear,
23287ec681f3Smrg    (void *)LockDevice9_SetTransform,
23297ec681f3Smrg    (void *)LockDevice9_GetTransform,
23307ec681f3Smrg    (void *)LockDevice9_MultiplyTransform,
23317ec681f3Smrg    (void *)LockDevice9_SetViewport,
23327ec681f3Smrg    (void *)LockDevice9_GetViewport,
23337ec681f3Smrg    (void *)LockDevice9_SetMaterial,
23347ec681f3Smrg    (void *)LockDevice9_GetMaterial,
23357ec681f3Smrg    (void *)LockDevice9_SetLight,
23367ec681f3Smrg    (void *)LockDevice9_GetLight,
23377ec681f3Smrg    (void *)LockDevice9_LightEnable,
23387ec681f3Smrg    (void *)LockDevice9_GetLightEnable,
23397ec681f3Smrg    (void *)LockDevice9_SetClipPlane,
23407ec681f3Smrg    (void *)LockDevice9_GetClipPlane,
23417ec681f3Smrg    (void *)LockDevice9_SetRenderState,
23427ec681f3Smrg    (void *)LockDevice9_GetRenderState,
23437ec681f3Smrg    (void *)LockDevice9_CreateStateBlock,
23447ec681f3Smrg    (void *)LockDevice9_BeginStateBlock,
23457ec681f3Smrg    (void *)LockDevice9_EndStateBlock,
23467ec681f3Smrg    (void *)LockDevice9_SetClipStatus,
23477ec681f3Smrg    (void *)LockDevice9_GetClipStatus,
23487ec681f3Smrg    (void *)LockDevice9_GetTexture,
23497ec681f3Smrg    (void *)LockDevice9_SetTexture,
23507ec681f3Smrg    (void *)LockDevice9_GetTextureStageState,
23517ec681f3Smrg    (void *)LockDevice9_SetTextureStageState,
23527ec681f3Smrg    (void *)LockDevice9_GetSamplerState,
23537ec681f3Smrg    (void *)LockDevice9_SetSamplerState,
23547ec681f3Smrg    (void *)LockDevice9_ValidateDevice,
23557ec681f3Smrg    (void *)LockDevice9_SetPaletteEntries,
23567ec681f3Smrg    (void *)LockDevice9_GetPaletteEntries,
23577ec681f3Smrg    (void *)LockDevice9_SetCurrentTexturePalette,
23587ec681f3Smrg    (void *)LockDevice9_GetCurrentTexturePalette,
23597ec681f3Smrg    (void *)LockDevice9_SetScissorRect,
23607ec681f3Smrg    (void *)LockDevice9_GetScissorRect,
23617ec681f3Smrg    (void *)LockDevice9_SetSoftwareVertexProcessing,
23627ec681f3Smrg    (void *)LockDevice9_GetSoftwareVertexProcessing,
23637ec681f3Smrg    (void *)LockDevice9_SetNPatchMode,
23647ec681f3Smrg    (void *)LockDevice9_GetNPatchMode,
23657ec681f3Smrg    (void *)LockDevice9_DrawPrimitive,
23667ec681f3Smrg    (void *)LockDevice9_DrawIndexedPrimitive,
23677ec681f3Smrg    (void *)LockDevice9_DrawPrimitiveUP,
23687ec681f3Smrg    (void *)LockDevice9_DrawIndexedPrimitiveUP,
23697ec681f3Smrg    (void *)LockDevice9_ProcessVertices,
23707ec681f3Smrg    (void *)LockDevice9_CreateVertexDeclaration,
23717ec681f3Smrg    (void *)LockDevice9_SetVertexDeclaration,
23727ec681f3Smrg    (void *)LockDevice9_GetVertexDeclaration,
23737ec681f3Smrg    (void *)LockDevice9_SetFVF,
23747ec681f3Smrg    (void *)LockDevice9_GetFVF,
23757ec681f3Smrg    (void *)LockDevice9_CreateVertexShader,
23767ec681f3Smrg    (void *)LockDevice9_SetVertexShader,
23777ec681f3Smrg    (void *)LockDevice9_GetVertexShader,
23787ec681f3Smrg    (void *)LockDevice9_SetVertexShaderConstantF,
23797ec681f3Smrg    (void *)LockDevice9_GetVertexShaderConstantF,
23807ec681f3Smrg    (void *)LockDevice9_SetVertexShaderConstantI,
23817ec681f3Smrg    (void *)LockDevice9_GetVertexShaderConstantI,
23827ec681f3Smrg    (void *)LockDevice9_SetVertexShaderConstantB,
23837ec681f3Smrg    (void *)LockDevice9_GetVertexShaderConstantB,
23847ec681f3Smrg    (void *)LockDevice9_SetStreamSource,
23857ec681f3Smrg    (void *)LockDevice9_GetStreamSource,
23867ec681f3Smrg    (void *)LockDevice9_SetStreamSourceFreq,
23877ec681f3Smrg    (void *)LockDevice9_GetStreamSourceFreq,
23887ec681f3Smrg    (void *)LockDevice9_SetIndices,
23897ec681f3Smrg    (void *)LockDevice9_GetIndices,
23907ec681f3Smrg    (void *)LockDevice9_CreatePixelShader,
23917ec681f3Smrg    (void *)LockDevice9_SetPixelShader,
23927ec681f3Smrg    (void *)LockDevice9_GetPixelShader,
23937ec681f3Smrg    (void *)LockDevice9_SetPixelShaderConstantF,
23947ec681f3Smrg    (void *)LockDevice9_GetPixelShaderConstantF,
23957ec681f3Smrg    (void *)LockDevice9_SetPixelShaderConstantI,
23967ec681f3Smrg    (void *)LockDevice9_GetPixelShaderConstantI,
23977ec681f3Smrg    (void *)LockDevice9_SetPixelShaderConstantB,
23987ec681f3Smrg    (void *)LockDevice9_GetPixelShaderConstantB,
23997ec681f3Smrg    (void *)LockDevice9_DrawRectPatch,
24007ec681f3Smrg    (void *)LockDevice9_DrawTriPatch,
24017ec681f3Smrg    (void *)LockDevice9_DeletePatch,
24027ec681f3Smrg    (void *)LockDevice9_CreateQuery,
24037ec681f3Smrg    (void *)LockDevice9Ex_SetConvolutionMonoKernel,
24047ec681f3Smrg    (void *)LockDevice9Ex_ComposeRects,
24057ec681f3Smrg    (void *)LockDevice9Ex_PresentEx,
24067ec681f3Smrg    (void *)LockDevice9Ex_GetGPUThreadPriority,
24077ec681f3Smrg    (void *)LockDevice9Ex_SetGPUThreadPriority,
24087ec681f3Smrg    (void *)LockDevice9Ex_WaitForVBlank,
24097ec681f3Smrg    (void *)LockDevice9Ex_CheckResourceResidency,
24107ec681f3Smrg    (void *)LockDevice9Ex_SetMaximumFrameLatency,
24117ec681f3Smrg    (void *)LockDevice9Ex_GetMaximumFrameLatency,
24127ec681f3Smrg    (void *)LockDevice9Ex_CheckDeviceState,
24137ec681f3Smrg    (void *)LockDevice9Ex_CreateRenderTargetEx,
24147ec681f3Smrg    (void *)LockDevice9Ex_CreateOffscreenPlainSurfaceEx,
24157ec681f3Smrg    (void *)LockDevice9Ex_CreateDepthStencilSurfaceEx,
24167ec681f3Smrg    (void *)LockDevice9Ex_ResetEx,
24177ec681f3Smrg    (void *)LockDevice9Ex_GetDisplayModeEx
24187ec681f3Smrg};
24197ec681f3Smrg
24207ec681f3Smrgstatic HRESULT NINE_WINAPI
24217ec681f3SmrgLockDevice9Video_GetContentProtectionCaps( struct NineDevice9Video *This,
24227ec681f3Smrg                                           const GUID *pCryptoType,
24237ec681f3Smrg                                           const GUID *pDecodeProfile,
24247ec681f3Smrg                                           D3DCONTENTPROTECTIONCAPS *pCaps )
24257ec681f3Smrg{
24267ec681f3Smrg    HRESULT r;
24277ec681f3Smrg    mtx_lock(&d3dlock_global);
24287ec681f3Smrg    r = NineDevice9Video_GetContentProtectionCaps(This, pCryptoType, pDecodeProfile, pCaps);
24297ec681f3Smrg    mtx_unlock(&d3dlock_global);
24307ec681f3Smrg    return r;
24317ec681f3Smrg}
24327ec681f3Smrg
24337ec681f3Smrgstatic HRESULT NINE_WINAPI
24347ec681f3SmrgLockDevice9Video_CreateAuthenticatedChannel( struct NineDevice9Video *This,
24357ec681f3Smrg                                             D3DAUTHENTICATEDCHANNELTYPE ChannelType,
24367ec681f3Smrg                                             IDirect3DAuthenticatedChannel9 **ppAuthenticatedChannel,
24377ec681f3Smrg                                             HANDLE *pChannelHandle )
24387ec681f3Smrg{
24397ec681f3Smrg    HRESULT r;
24407ec681f3Smrg    mtx_lock(&d3dlock_global);
24417ec681f3Smrg    r = NineDevice9Video_CreateAuthenticatedChannel(This, ChannelType, ppAuthenticatedChannel, pChannelHandle);
24427ec681f3Smrg    mtx_unlock(&d3dlock_global);
24437ec681f3Smrg    return r;
24447ec681f3Smrg}
24457ec681f3Smrg
24467ec681f3Smrgstatic HRESULT NINE_WINAPI
24477ec681f3SmrgLockDevice9Video_CreateCryptoSession( struct NineDevice9Video *This,
24487ec681f3Smrg                                      const GUID *pCryptoType,
24497ec681f3Smrg                                      const GUID *pDecodeProfile,
24507ec681f3Smrg                                      IDirect3DCryptoSession9 **ppCryptoSession,
24517ec681f3Smrg                                      HANDLE *pCryptoHandle )
24527ec681f3Smrg{
24537ec681f3Smrg    HRESULT r;
24547ec681f3Smrg    mtx_lock(&d3dlock_global);
24557ec681f3Smrg    r = NineDevice9Video_CreateCryptoSession(This, pCryptoType, pDecodeProfile, ppCryptoSession, pCryptoHandle);
24567ec681f3Smrg    mtx_unlock(&d3dlock_global);
24577ec681f3Smrg    return r;
24587ec681f3Smrg}
24597ec681f3Smrg
24607ec681f3SmrgIDirect3DDevice9VideoVtbl LockDevice9Video_vtable = {
24617ec681f3Smrg    (void *)NineUnknown_QueryInterface,
24627ec681f3Smrg    (void *)NineUnknown_AddRef,
24637ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
24647ec681f3Smrg    (void *)LockDevice9Video_GetContentProtectionCaps,
24657ec681f3Smrg    (void *)LockDevice9Video_CreateAuthenticatedChannel,
24667ec681f3Smrg    (void *)LockDevice9Video_CreateCryptoSession
24677ec681f3Smrg};
24687ec681f3Smrg
24697ec681f3Smrgstatic HRESULT NINE_WINAPI
24707ec681f3SmrgLockIndexBuffer9_Lock( struct NineIndexBuffer9 *This,
24717ec681f3Smrg                       UINT OffsetToLock,
24727ec681f3Smrg                       UINT SizeToLock,
24737ec681f3Smrg                       void **ppbData,
24747ec681f3Smrg                       DWORD Flags )
24757ec681f3Smrg{
24767ec681f3Smrg    HRESULT r;
24777ec681f3Smrg    mtx_lock(&d3dlock_global);
24787ec681f3Smrg    r = NineIndexBuffer9_Lock(This, OffsetToLock, SizeToLock, ppbData, Flags);
24797ec681f3Smrg    mtx_unlock(&d3dlock_global);
24807ec681f3Smrg    return r;
24817ec681f3Smrg}
24827ec681f3Smrg
24837ec681f3Smrgstatic HRESULT NINE_WINAPI
24847ec681f3SmrgLockIndexBuffer9_Unlock( struct NineIndexBuffer9 *This )
24857ec681f3Smrg{
24867ec681f3Smrg    HRESULT r;
24877ec681f3Smrg    mtx_lock(&d3dlock_global);
24887ec681f3Smrg    r = NineIndexBuffer9_Unlock(This);
24897ec681f3Smrg    mtx_unlock(&d3dlock_global);
24907ec681f3Smrg    return r;
24917ec681f3Smrg}
24927ec681f3Smrg
24937ec681f3Smrg#if 0
24947ec681f3Smrgstatic HRESULT NINE_WINAPI
24957ec681f3SmrgLockIndexBuffer9_GetDesc( struct NineIndexBuffer9 *This,
24967ec681f3Smrg                          D3DINDEXBUFFER_DESC *pDesc )
24977ec681f3Smrg{
24987ec681f3Smrg    HRESULT r;
24997ec681f3Smrg    mtx_lock(&d3dlock_global);
25007ec681f3Smrg    r = NineIndexBuffer9_GetDesc(This, pDesc);
25017ec681f3Smrg    mtx_unlock(&d3dlock_global);
25027ec681f3Smrg    return r;
25037ec681f3Smrg}
25047ec681f3Smrg#endif
25057ec681f3Smrg
25067ec681f3SmrgIDirect3DIndexBuffer9Vtbl LockIndexBuffer9_vtable = {
25077ec681f3Smrg    (void *)NineUnknown_QueryInterface,
25087ec681f3Smrg    (void *)NineUnknown_AddRef,
25097ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
25107ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
25117ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
25127ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
25137ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
25147ec681f3Smrg    (void *)LockResource9_SetPriority,
25157ec681f3Smrg    (void *)LockResource9_GetPriority,
25167ec681f3Smrg    (void *)NineResource9_PreLoad, /* nop */
25177ec681f3Smrg    (void *)NineResource9_GetType, /* immutable */
25187ec681f3Smrg    (void *)LockIndexBuffer9_Lock,
25197ec681f3Smrg    (void *)LockIndexBuffer9_Unlock,
25207ec681f3Smrg    (void *)NineIndexBuffer9_GetDesc /* immutable */
25217ec681f3Smrg};
25227ec681f3Smrg
25237ec681f3Smrg#if 0
25247ec681f3Smrgstatic HRESULT NINE_WINAPI
25257ec681f3SmrgLockPixelShader9_GetDevice( struct NinePixelShader9 *This,
25267ec681f3Smrg                            IDirect3DDevice9 **ppDevice )
25277ec681f3Smrg{
25287ec681f3Smrg    HRESULT r;
25297ec681f3Smrg    mtx_lock(&d3dlock_global);
25307ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
25317ec681f3Smrg    mtx_unlock(&d3dlock_global);
25327ec681f3Smrg    return r;
25337ec681f3Smrg}
25347ec681f3Smrg#endif
25357ec681f3Smrg
25367ec681f3Smrgstatic HRESULT NINE_WINAPI
25377ec681f3SmrgLockPixelShader9_GetFunction( struct NinePixelShader9 *This,
25387ec681f3Smrg                              void *pData,
25397ec681f3Smrg                              UINT *pSizeOfData )
25407ec681f3Smrg{
25417ec681f3Smrg    HRESULT r;
25427ec681f3Smrg    mtx_lock(&d3dlock_global);
25437ec681f3Smrg    r = NinePixelShader9_GetFunction(This, pData, pSizeOfData);
25447ec681f3Smrg    mtx_unlock(&d3dlock_global);
25457ec681f3Smrg    return r;
25467ec681f3Smrg}
25477ec681f3Smrg
25487ec681f3SmrgIDirect3DPixelShader9Vtbl LockPixelShader9_vtable = {
25497ec681f3Smrg    (void *)NineUnknown_QueryInterface,
25507ec681f3Smrg    (void *)NineUnknown_AddRef,
25517ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
25527ec681f3Smrg    (void *)NineUnknown_GetDevice,
25537ec681f3Smrg    (void *)LockPixelShader9_GetFunction
25547ec681f3Smrg};
25557ec681f3Smrg
25567ec681f3Smrg#if 0
25577ec681f3Smrgstatic HRESULT NINE_WINAPI
25587ec681f3SmrgLockQuery9_GetDevice( struct NineQuery9 *This,
25597ec681f3Smrg                      IDirect3DDevice9 **ppDevice )
25607ec681f3Smrg{
25617ec681f3Smrg    HRESULT r;
25627ec681f3Smrg    mtx_lock(&d3dlock_global);
25637ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
25647ec681f3Smrg    mtx_unlock(&d3dlock_global);
25657ec681f3Smrg    return r;
25667ec681f3Smrg}
25677ec681f3Smrg#endif
25687ec681f3Smrg
25697ec681f3Smrg#if 0
25707ec681f3Smrgstatic D3DQUERYTYPE NINE_WINAPI
25717ec681f3SmrgLockQuery9_GetType( struct NineQuery9 *This )
25727ec681f3Smrg{
25737ec681f3Smrg    D3DQUERYTYPE r;
25747ec681f3Smrg    mtx_lock(&d3dlock_global);
25757ec681f3Smrg    r = NineQuery9_GetType(This);
25767ec681f3Smrg    mtx_unlock(&d3dlock_global);
25777ec681f3Smrg    return r;
25787ec681f3Smrg}
25797ec681f3Smrg#endif
25807ec681f3Smrg
25817ec681f3Smrg#if 0
25827ec681f3Smrgstatic DWORD NINE_WINAPI
25837ec681f3SmrgLockQuery9_GetDataSize( struct NineQuery9 *This )
25847ec681f3Smrg{
25857ec681f3Smrg    DWORD r;
25867ec681f3Smrg    mtx_lock(&d3dlock_global);
25877ec681f3Smrg    r = NineQuery9_GetDataSize(This);
25887ec681f3Smrg    mtx_unlock(&d3dlock_global);
25897ec681f3Smrg    return r;
25907ec681f3Smrg}
25917ec681f3Smrg#endif
25927ec681f3Smrg
25937ec681f3Smrgstatic HRESULT NINE_WINAPI
25947ec681f3SmrgLockQuery9_Issue( struct NineQuery9 *This,
25957ec681f3Smrg                  DWORD dwIssueFlags )
25967ec681f3Smrg{
25977ec681f3Smrg    HRESULT r;
25987ec681f3Smrg    mtx_lock(&d3dlock_global);
25997ec681f3Smrg    r = NineQuery9_Issue(This, dwIssueFlags);
26007ec681f3Smrg    mtx_unlock(&d3dlock_global);
26017ec681f3Smrg    return r;
26027ec681f3Smrg}
26037ec681f3Smrg
26047ec681f3Smrgstatic HRESULT NINE_WINAPI
26057ec681f3SmrgLockQuery9_GetData( struct NineQuery9 *This,
26067ec681f3Smrg                    void *pData,
26077ec681f3Smrg                    DWORD dwSize,
26087ec681f3Smrg                    DWORD dwGetDataFlags )
26097ec681f3Smrg{
26107ec681f3Smrg    HRESULT r;
26117ec681f3Smrg    mtx_lock(&d3dlock_global);
26127ec681f3Smrg    r = NineQuery9_GetData(This, pData, dwSize, dwGetDataFlags);
26137ec681f3Smrg    mtx_unlock(&d3dlock_global);
26147ec681f3Smrg    return r;
26157ec681f3Smrg}
26167ec681f3Smrg
26177ec681f3SmrgIDirect3DQuery9Vtbl LockQuery9_vtable = {
26187ec681f3Smrg    (void *)NineUnknown_QueryInterface,
26197ec681f3Smrg    (void *)NineUnknown_AddRef,
26207ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
26217ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Query9 iface */
26227ec681f3Smrg    (void *)NineQuery9_GetType, /* immutable */
26237ec681f3Smrg    (void *)NineQuery9_GetDataSize, /* immutable */
26247ec681f3Smrg    (void *)LockQuery9_Issue,
26257ec681f3Smrg    (void *)LockQuery9_GetData
26267ec681f3Smrg};
26277ec681f3Smrg
26287ec681f3Smrg#if 0
26297ec681f3Smrgstatic HRESULT NINE_WINAPI
26307ec681f3SmrgLockStateBlock9_GetDevice( struct NineStateBlock9 *This,
26317ec681f3Smrg                           IDirect3DDevice9 **ppDevice )
26327ec681f3Smrg{
26337ec681f3Smrg    HRESULT r;
26347ec681f3Smrg    mtx_lock(&d3dlock_global);
26357ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
26367ec681f3Smrg    mtx_unlock(&d3dlock_global);
26377ec681f3Smrg    return r;
26387ec681f3Smrg}
26397ec681f3Smrg#endif
26407ec681f3Smrg
26417ec681f3Smrgstatic HRESULT NINE_WINAPI
26427ec681f3SmrgLockStateBlock9_Capture( struct NineStateBlock9 *This )
26437ec681f3Smrg{
26447ec681f3Smrg    HRESULT r;
26457ec681f3Smrg    mtx_lock(&d3dlock_global);
26467ec681f3Smrg    r = NineStateBlock9_Capture(This);
26477ec681f3Smrg    mtx_unlock(&d3dlock_global);
26487ec681f3Smrg    return r;
26497ec681f3Smrg}
26507ec681f3Smrg
26517ec681f3Smrgstatic HRESULT NINE_WINAPI
26527ec681f3SmrgLockStateBlock9_Apply( struct NineStateBlock9 *This )
26537ec681f3Smrg{
26547ec681f3Smrg    HRESULT r;
26557ec681f3Smrg    mtx_lock(&d3dlock_global);
26567ec681f3Smrg    r = NineStateBlock9_Apply(This);
26577ec681f3Smrg    mtx_unlock(&d3dlock_global);
26587ec681f3Smrg    return r;
26597ec681f3Smrg}
26607ec681f3Smrg
26617ec681f3SmrgIDirect3DStateBlock9Vtbl LockStateBlock9_vtable = {
26627ec681f3Smrg    (void *)NineUnknown_QueryInterface,
26637ec681f3Smrg    (void *)NineUnknown_AddRef,
26647ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
26657ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of StateBlock9 iface */
26667ec681f3Smrg    (void *)LockStateBlock9_Capture,
26677ec681f3Smrg    (void *)LockStateBlock9_Apply
26687ec681f3Smrg};
26697ec681f3Smrg
26707ec681f3Smrgstatic HRESULT NINE_WINAPI
26717ec681f3SmrgLockSurface9_GetContainer( struct NineSurface9 *This,
26727ec681f3Smrg                           REFIID riid,
26737ec681f3Smrg                           void **ppContainer )
26747ec681f3Smrg{
26757ec681f3Smrg    HRESULT r;
26767ec681f3Smrg    mtx_lock(&d3dlock_global);
26777ec681f3Smrg    r = NineSurface9_GetContainer(This, riid, ppContainer);
26787ec681f3Smrg    mtx_unlock(&d3dlock_global);
26797ec681f3Smrg    return r;
26807ec681f3Smrg}
26817ec681f3Smrg
26827ec681f3Smrg#if 0
26837ec681f3Smrgstatic HRESULT NINE_WINAPI
26847ec681f3SmrgLockSurface9_GetDesc( struct NineSurface9 *This,
26857ec681f3Smrg                      D3DSURFACE_DESC *pDesc )
26867ec681f3Smrg{
26877ec681f3Smrg    HRESULT r;
26887ec681f3Smrg    mtx_lock(&d3dlock_global);
26897ec681f3Smrg    r = NineSurface9_GetDesc(This, pDesc);
26907ec681f3Smrg    mtx_unlock(&d3dlock_global);
26917ec681f3Smrg    return r;
26927ec681f3Smrg}
26937ec681f3Smrg#endif
26947ec681f3Smrg
26957ec681f3Smrgstatic HRESULT NINE_WINAPI
26967ec681f3SmrgLockSurface9_LockRect( struct NineSurface9 *This,
26977ec681f3Smrg                       D3DLOCKED_RECT *pLockedRect,
26987ec681f3Smrg                       const RECT *pRect,
26997ec681f3Smrg                       DWORD Flags )
27007ec681f3Smrg{
27017ec681f3Smrg    HRESULT r;
27027ec681f3Smrg    mtx_lock(&d3dlock_global);
27037ec681f3Smrg    r = NineSurface9_LockRect(This, pLockedRect, pRect, Flags);
27047ec681f3Smrg    mtx_unlock(&d3dlock_global);
27057ec681f3Smrg    return r;
27067ec681f3Smrg}
27077ec681f3Smrg
27087ec681f3Smrgstatic HRESULT NINE_WINAPI
27097ec681f3SmrgLockSurface9_UnlockRect( struct NineSurface9 *This )
27107ec681f3Smrg{
27117ec681f3Smrg    HRESULT r;
27127ec681f3Smrg    mtx_lock(&d3dlock_global);
27137ec681f3Smrg    r = NineSurface9_UnlockRect(This);
27147ec681f3Smrg    mtx_unlock(&d3dlock_global);
27157ec681f3Smrg    return r;
27167ec681f3Smrg}
27177ec681f3Smrg
27187ec681f3Smrgstatic HRESULT NINE_WINAPI
27197ec681f3SmrgLockSurface9_GetDC( struct NineSurface9 *This,
27207ec681f3Smrg                    HDC *phdc )
27217ec681f3Smrg{
27227ec681f3Smrg    HRESULT r;
27237ec681f3Smrg    mtx_lock(&d3dlock_global);
27247ec681f3Smrg    r = NineSurface9_GetDC(This, phdc);
27257ec681f3Smrg    mtx_unlock(&d3dlock_global);
27267ec681f3Smrg    return r;
27277ec681f3Smrg}
27287ec681f3Smrg
27297ec681f3Smrgstatic HRESULT NINE_WINAPI
27307ec681f3SmrgLockSurface9_ReleaseDC( struct NineSurface9 *This,
27317ec681f3Smrg                        HDC hdc )
27327ec681f3Smrg{
27337ec681f3Smrg    HRESULT r;
27347ec681f3Smrg    mtx_lock(&d3dlock_global);
27357ec681f3Smrg    r = NineSurface9_ReleaseDC(This, hdc);
27367ec681f3Smrg    mtx_unlock(&d3dlock_global);
27377ec681f3Smrg    return r;
27387ec681f3Smrg}
27397ec681f3Smrg
27407ec681f3SmrgIDirect3DSurface9Vtbl LockSurface9_vtable = {
27417ec681f3Smrg    (void *)NineUnknown_QueryInterface,
27427ec681f3Smrg    (void *)NineUnknown_AddRef,
27437ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
27447ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
27457ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
27467ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
27477ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
27487ec681f3Smrg    (void *)LockResource9_SetPriority,
27497ec681f3Smrg    (void *)LockResource9_GetPriority,
27507ec681f3Smrg    (void *)NineResource9_PreLoad, /* nop */
27517ec681f3Smrg    (void *)NineResource9_GetType, /* immutable */
27527ec681f3Smrg    (void *)LockSurface9_GetContainer,
27537ec681f3Smrg    (void *)NineSurface9_GetDesc, /* immutable */
27547ec681f3Smrg    (void *)LockSurface9_LockRect,
27557ec681f3Smrg    (void *)LockSurface9_UnlockRect,
27567ec681f3Smrg    (void *)LockSurface9_GetDC,
27577ec681f3Smrg    (void *)LockSurface9_ReleaseDC
27587ec681f3Smrg};
27597ec681f3Smrg
27607ec681f3Smrgstatic HRESULT NINE_WINAPI
27617ec681f3SmrgLockSwapChain9_Present( struct NineSwapChain9 *This,
27627ec681f3Smrg                        const RECT *pSourceRect,
27637ec681f3Smrg                        const RECT *pDestRect,
27647ec681f3Smrg                        HWND hDestWindowOverride,
27657ec681f3Smrg                        const RGNDATA *pDirtyRegion,
27667ec681f3Smrg                        DWORD dwFlags )
27677ec681f3Smrg{
27687ec681f3Smrg    HRESULT r;
27697ec681f3Smrg    mtx_lock(&d3dlock_global);
27707ec681f3Smrg    r = NineSwapChain9_Present(This, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion, dwFlags);
27717ec681f3Smrg    mtx_unlock(&d3dlock_global);
27727ec681f3Smrg    return r;
27737ec681f3Smrg}
27747ec681f3Smrg
27757ec681f3Smrgstatic HRESULT NINE_WINAPI
27767ec681f3SmrgLockSwapChain9_GetFrontBufferData( struct NineSwapChain9 *This,
27777ec681f3Smrg                                   IDirect3DSurface9 *pDestSurface )
27787ec681f3Smrg{
27797ec681f3Smrg    HRESULT r;
27807ec681f3Smrg    mtx_lock(&d3dlock_global);
27817ec681f3Smrg    r = NineSwapChain9_GetFrontBufferData(This, pDestSurface);
27827ec681f3Smrg    mtx_unlock(&d3dlock_global);
27837ec681f3Smrg    return r;
27847ec681f3Smrg}
27857ec681f3Smrg
27867ec681f3Smrgstatic HRESULT NINE_WINAPI
27877ec681f3SmrgLockSwapChain9_GetBackBuffer( struct NineSwapChain9 *This,
27887ec681f3Smrg                              UINT iBackBuffer,
27897ec681f3Smrg                              D3DBACKBUFFER_TYPE Type,
27907ec681f3Smrg                              IDirect3DSurface9 **ppBackBuffer )
27917ec681f3Smrg{
27927ec681f3Smrg    HRESULT r;
27937ec681f3Smrg    mtx_lock(&d3dlock_global);
27947ec681f3Smrg    r = NineSwapChain9_GetBackBuffer(This, iBackBuffer, Type, ppBackBuffer);
27957ec681f3Smrg    mtx_unlock(&d3dlock_global);
27967ec681f3Smrg    return r;
27977ec681f3Smrg}
27987ec681f3Smrg
27997ec681f3Smrgstatic HRESULT NINE_WINAPI
28007ec681f3SmrgLockSwapChain9_GetRasterStatus( struct NineSwapChain9 *This,
28017ec681f3Smrg                                D3DRASTER_STATUS *pRasterStatus )
28027ec681f3Smrg{
28037ec681f3Smrg    HRESULT r;
28047ec681f3Smrg    mtx_lock(&d3dlock_global);
28057ec681f3Smrg    r = NineSwapChain9_GetRasterStatus(This, pRasterStatus);
28067ec681f3Smrg    mtx_unlock(&d3dlock_global);
28077ec681f3Smrg    return r;
28087ec681f3Smrg}
28097ec681f3Smrg
28107ec681f3Smrgstatic HRESULT NINE_WINAPI
28117ec681f3SmrgLockSwapChain9_GetDisplayMode( struct NineSwapChain9 *This,
28127ec681f3Smrg                               D3DDISPLAYMODE *pMode )
28137ec681f3Smrg{
28147ec681f3Smrg    HRESULT r;
28157ec681f3Smrg    mtx_lock(&d3dlock_global);
28167ec681f3Smrg    r = NineSwapChain9_GetDisplayMode(This, pMode);
28177ec681f3Smrg    mtx_unlock(&d3dlock_global);
28187ec681f3Smrg    return r;
28197ec681f3Smrg}
28207ec681f3Smrg
28217ec681f3Smrg#if 0
28227ec681f3Smrgstatic HRESULT NINE_WINAPI
28237ec681f3SmrgLockSwapChain9_GetDevice( struct NineSwapChain9 *This,
28247ec681f3Smrg                          IDirect3DDevice9 **ppDevice )
28257ec681f3Smrg{
28267ec681f3Smrg    HRESULT r;
28277ec681f3Smrg    mtx_lock(&d3dlock_global);
28287ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
28297ec681f3Smrg    mtx_unlock(&d3dlock_global);
28307ec681f3Smrg    return r;
28317ec681f3Smrg}
28327ec681f3Smrg#endif
28337ec681f3Smrg
28347ec681f3Smrgstatic HRESULT NINE_WINAPI
28357ec681f3SmrgLockSwapChain9_GetPresentParameters( struct NineSwapChain9 *This,
28367ec681f3Smrg                                     D3DPRESENT_PARAMETERS *pPresentationParameters )
28377ec681f3Smrg{
28387ec681f3Smrg    HRESULT r;
28397ec681f3Smrg    mtx_lock(&d3dlock_global);
28407ec681f3Smrg    r = NineSwapChain9_GetPresentParameters(This, pPresentationParameters);
28417ec681f3Smrg    mtx_unlock(&d3dlock_global);
28427ec681f3Smrg    return r;
28437ec681f3Smrg}
28447ec681f3Smrg
28457ec681f3SmrgIDirect3DSwapChain9Vtbl LockSwapChain9_vtable = {
28467ec681f3Smrg    (void *)NineUnknown_QueryInterface,
28477ec681f3Smrg    (void *)NineUnknown_AddRef,
28487ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
28497ec681f3Smrg    (void *)LockSwapChain9_Present,
28507ec681f3Smrg    (void *)LockSwapChain9_GetFrontBufferData,
28517ec681f3Smrg    (void *)LockSwapChain9_GetBackBuffer,
28527ec681f3Smrg    (void *)LockSwapChain9_GetRasterStatus,
28537ec681f3Smrg    (void *)LockSwapChain9_GetDisplayMode,
28547ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of SwapChain9 iface */
28557ec681f3Smrg    (void *)LockSwapChain9_GetPresentParameters
28567ec681f3Smrg};
28577ec681f3Smrg
28587ec681f3Smrgstatic HRESULT NINE_WINAPI
28597ec681f3SmrgLockSwapChain9Ex_GetLastPresentCount( struct NineSwapChain9Ex *This,
28607ec681f3Smrg                                      UINT *pLastPresentCount )
28617ec681f3Smrg{
28627ec681f3Smrg    HRESULT r;
28637ec681f3Smrg    mtx_lock(&d3dlock_global);
28647ec681f3Smrg    r = NineSwapChain9Ex_GetLastPresentCount(This, pLastPresentCount);
28657ec681f3Smrg    mtx_unlock(&d3dlock_global);
28667ec681f3Smrg    return r;
28677ec681f3Smrg}
28687ec681f3Smrg
28697ec681f3Smrgstatic HRESULT NINE_WINAPI
28707ec681f3SmrgLockSwapChain9Ex_GetPresentStats( struct NineSwapChain9Ex *This,
28717ec681f3Smrg                                  D3DPRESENTSTATS *pPresentationStatistics )
28727ec681f3Smrg{
28737ec681f3Smrg    HRESULT r;
28747ec681f3Smrg    mtx_lock(&d3dlock_global);
28757ec681f3Smrg    r = NineSwapChain9Ex_GetPresentStats(This, pPresentationStatistics);
28767ec681f3Smrg    mtx_unlock(&d3dlock_global);
28777ec681f3Smrg    return r;
28787ec681f3Smrg}
28797ec681f3Smrg
28807ec681f3Smrgstatic HRESULT NINE_WINAPI
28817ec681f3SmrgLockSwapChain9Ex_GetDisplayModeEx( struct NineSwapChain9Ex *This,
28827ec681f3Smrg                                   D3DDISPLAYMODEEX *pMode,
28837ec681f3Smrg                                   D3DDISPLAYROTATION *pRotation )
28847ec681f3Smrg{
28857ec681f3Smrg    HRESULT r;
28867ec681f3Smrg    mtx_lock(&d3dlock_global);
28877ec681f3Smrg    r = NineSwapChain9Ex_GetDisplayModeEx(This, pMode, pRotation);
28887ec681f3Smrg    mtx_unlock(&d3dlock_global);
28897ec681f3Smrg    return r;
28907ec681f3Smrg}
28917ec681f3Smrg
28927ec681f3SmrgIDirect3DSwapChain9ExVtbl LockSwapChain9Ex_vtable = {
28937ec681f3Smrg    (void *)NineUnknown_QueryInterface,
28947ec681f3Smrg    (void *)NineUnknown_AddRef,
28957ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
28967ec681f3Smrg    (void *)LockSwapChain9_Present,
28977ec681f3Smrg    (void *)LockSwapChain9_GetFrontBufferData,
28987ec681f3Smrg    (void *)LockSwapChain9_GetBackBuffer,
28997ec681f3Smrg    (void *)LockSwapChain9_GetRasterStatus,
29007ec681f3Smrg    (void *)LockSwapChain9_GetDisplayMode,
29017ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of NineSwapChain9 iface */
29027ec681f3Smrg    (void *)LockSwapChain9_GetPresentParameters,
29037ec681f3Smrg    (void *)LockSwapChain9Ex_GetLastPresentCount,
29047ec681f3Smrg    (void *)LockSwapChain9Ex_GetPresentStats,
29057ec681f3Smrg    (void *)LockSwapChain9Ex_GetDisplayModeEx
29067ec681f3Smrg};
29077ec681f3Smrg
29087ec681f3Smrg#if 0
29097ec681f3Smrgstatic HRESULT NINE_WINAPI
29107ec681f3SmrgLockTexture9_GetLevelDesc( struct NineTexture9 *This,
29117ec681f3Smrg                           UINT Level,
29127ec681f3Smrg                           D3DSURFACE_DESC *pDesc )
29137ec681f3Smrg{
29147ec681f3Smrg    HRESULT r;
29157ec681f3Smrg    mtx_lock(&d3dlock_global);
29167ec681f3Smrg    r = NineTexture9_GetLevelDesc(This, Level, pDesc);
29177ec681f3Smrg    mtx_unlock(&d3dlock_global);
29187ec681f3Smrg    return r;
29197ec681f3Smrg}
29207ec681f3Smrg#endif
29217ec681f3Smrg
29227ec681f3Smrg#if 0
29237ec681f3Smrgstatic HRESULT NINE_WINAPI
29247ec681f3SmrgLockTexture9_GetSurfaceLevel( struct NineTexture9 *This,
29257ec681f3Smrg                              UINT Level,
29267ec681f3Smrg                              IDirect3DSurface9 **ppSurfaceLevel )
29277ec681f3Smrg{
29287ec681f3Smrg    HRESULT r;
29297ec681f3Smrg    mtx_lock(&d3dlock_global);
29307ec681f3Smrg    r = NineTexture9_GetSurfaceLevel(This, Level, ppSurfaceLevel);
29317ec681f3Smrg    mtx_unlock(&d3dlock_global);
29327ec681f3Smrg    return r;
29337ec681f3Smrg}
29347ec681f3Smrg#endif
29357ec681f3Smrg
29367ec681f3Smrgstatic HRESULT NINE_WINAPI
29377ec681f3SmrgLockTexture9_LockRect( struct NineTexture9 *This,
29387ec681f3Smrg                       UINT Level,
29397ec681f3Smrg                       D3DLOCKED_RECT *pLockedRect,
29407ec681f3Smrg                       const RECT *pRect,
29417ec681f3Smrg                       DWORD Flags )
29427ec681f3Smrg{
29437ec681f3Smrg    HRESULT r;
29447ec681f3Smrg    mtx_lock(&d3dlock_global);
29457ec681f3Smrg    r = NineTexture9_LockRect(This, Level, pLockedRect, pRect, Flags);
29467ec681f3Smrg    mtx_unlock(&d3dlock_global);
29477ec681f3Smrg    return r;
29487ec681f3Smrg}
29497ec681f3Smrg
29507ec681f3Smrgstatic HRESULT NINE_WINAPI
29517ec681f3SmrgLockTexture9_UnlockRect( struct NineTexture9 *This,
29527ec681f3Smrg                         UINT Level )
29537ec681f3Smrg{
29547ec681f3Smrg    HRESULT r;
29557ec681f3Smrg    mtx_lock(&d3dlock_global);
29567ec681f3Smrg    r = NineTexture9_UnlockRect(This, Level);
29577ec681f3Smrg    mtx_unlock(&d3dlock_global);
29587ec681f3Smrg    return r;
29597ec681f3Smrg}
29607ec681f3Smrg
29617ec681f3Smrgstatic HRESULT NINE_WINAPI
29627ec681f3SmrgLockTexture9_AddDirtyRect( struct NineTexture9 *This,
29637ec681f3Smrg                           const RECT *pDirtyRect )
29647ec681f3Smrg{
29657ec681f3Smrg    HRESULT r;
29667ec681f3Smrg    mtx_lock(&d3dlock_global);
29677ec681f3Smrg    r = NineTexture9_AddDirtyRect(This, pDirtyRect);
29687ec681f3Smrg    mtx_unlock(&d3dlock_global);
29697ec681f3Smrg    return r;
29707ec681f3Smrg}
29717ec681f3Smrg
29727ec681f3SmrgIDirect3DTexture9Vtbl LockTexture9_vtable = {
29737ec681f3Smrg    (void *)NineUnknown_QueryInterface,
29747ec681f3Smrg    (void *)NineUnknown_AddRef,
29757ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
29767ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
29777ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
29787ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
29797ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
29807ec681f3Smrg    (void *)LockResource9_SetPriority,
29817ec681f3Smrg    (void *)LockResource9_GetPriority,
29827ec681f3Smrg    (void *)LockBaseTexture9_PreLoad,
29837ec681f3Smrg    (void *)NineResource9_GetType, /* immutable */
29847ec681f3Smrg    (void *)LockBaseTexture9_SetLOD,
29857ec681f3Smrg    (void *)LockBaseTexture9_GetLOD,
29867ec681f3Smrg    (void *)LockBaseTexture9_GetLevelCount,
29877ec681f3Smrg    (void *)LockBaseTexture9_SetAutoGenFilterType,
29887ec681f3Smrg    (void *)LockBaseTexture9_GetAutoGenFilterType,
29897ec681f3Smrg    (void *)LockBaseTexture9_GenerateMipSubLevels,
29907ec681f3Smrg    (void *)NineTexture9_GetLevelDesc, /* immutable */
29917ec681f3Smrg    (void *)NineTexture9_GetSurfaceLevel, /* AddRef */
29927ec681f3Smrg    (void *)LockTexture9_LockRect,
29937ec681f3Smrg    (void *)LockTexture9_UnlockRect,
29947ec681f3Smrg    (void *)LockTexture9_AddDirtyRect
29957ec681f3Smrg};
29967ec681f3Smrg
29977ec681f3Smrgstatic HRESULT NINE_WINAPI
29987ec681f3SmrgLockVertexBuffer9_Lock( struct NineVertexBuffer9 *This,
29997ec681f3Smrg                        UINT OffsetToLock,
30007ec681f3Smrg                        UINT SizeToLock,
30017ec681f3Smrg                        void **ppbData,
30027ec681f3Smrg                        DWORD Flags )
30037ec681f3Smrg{
30047ec681f3Smrg    HRESULT r;
30057ec681f3Smrg    mtx_lock(&d3dlock_global);
30067ec681f3Smrg    r = NineVertexBuffer9_Lock(This, OffsetToLock, SizeToLock, ppbData, Flags);
30077ec681f3Smrg    mtx_unlock(&d3dlock_global);
30087ec681f3Smrg    return r;
30097ec681f3Smrg}
30107ec681f3Smrg
30117ec681f3Smrgstatic HRESULT NINE_WINAPI
30127ec681f3SmrgLockVertexBuffer9_Unlock( struct NineVertexBuffer9 *This )
30137ec681f3Smrg{
30147ec681f3Smrg    HRESULT r;
30157ec681f3Smrg    mtx_lock(&d3dlock_global);
30167ec681f3Smrg    r = NineVertexBuffer9_Unlock(This);
30177ec681f3Smrg    mtx_unlock(&d3dlock_global);
30187ec681f3Smrg    return r;
30197ec681f3Smrg}
30207ec681f3Smrg
30217ec681f3Smrg#if 0
30227ec681f3Smrgstatic HRESULT NINE_WINAPI
30237ec681f3SmrgLockVertexBuffer9_GetDesc( struct NineVertexBuffer9 *This,
30247ec681f3Smrg                           D3DVERTEXBUFFER_DESC *pDesc )
30257ec681f3Smrg{
30267ec681f3Smrg    HRESULT r;
30277ec681f3Smrg    mtx_lock(&d3dlock_global);
30287ec681f3Smrg    r = NineVertexBuffer9_GetDesc(This, pDesc);
30297ec681f3Smrg    mtx_unlock(&d3dlock_global);
30307ec681f3Smrg    return r;
30317ec681f3Smrg}
30327ec681f3Smrg#endif
30337ec681f3Smrg
30347ec681f3SmrgIDirect3DVertexBuffer9Vtbl LockVertexBuffer9_vtable = {
30357ec681f3Smrg    (void *)NineUnknown_QueryInterface,
30367ec681f3Smrg    (void *)NineUnknown_AddRef,
30377ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
30387ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
30397ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
30407ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
30417ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
30427ec681f3Smrg    (void *)LockResource9_SetPriority,
30437ec681f3Smrg    (void *)LockResource9_GetPriority,
30447ec681f3Smrg    (void *)NineResource9_PreLoad, /* nop */
30457ec681f3Smrg    (void *)NineResource9_GetType, /* immutable */
30467ec681f3Smrg    (void *)LockVertexBuffer9_Lock,
30477ec681f3Smrg    (void *)LockVertexBuffer9_Unlock,
30487ec681f3Smrg    (void *)NineVertexBuffer9_GetDesc /* immutable */
30497ec681f3Smrg};
30507ec681f3Smrg
30517ec681f3Smrg#if 0
30527ec681f3Smrgstatic HRESULT NINE_WINAPI
30537ec681f3SmrgLockVertexDeclaration9_GetDevice( struct NineVertexDeclaration9 *This,
30547ec681f3Smrg                                  IDirect3DDevice9 **ppDevice )
30557ec681f3Smrg{
30567ec681f3Smrg    HRESULT r;
30577ec681f3Smrg    mtx_lock(&d3dlock_global);
30587ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
30597ec681f3Smrg    mtx_unlock(&d3dlock_global);
30607ec681f3Smrg    return r;
30617ec681f3Smrg}
30627ec681f3Smrg#endif
30637ec681f3Smrg
30647ec681f3Smrgstatic HRESULT NINE_WINAPI
30657ec681f3SmrgLockVertexDeclaration9_GetDeclaration( struct NineVertexDeclaration9 *This,
30667ec681f3Smrg                                       D3DVERTEXELEMENT9 *pElement,
30677ec681f3Smrg                                       UINT *pNumElements )
30687ec681f3Smrg{
30697ec681f3Smrg    HRESULT r;
30707ec681f3Smrg    mtx_lock(&d3dlock_global);
30717ec681f3Smrg    r = NineVertexDeclaration9_GetDeclaration(This, pElement, pNumElements);
30727ec681f3Smrg    mtx_unlock(&d3dlock_global);
30737ec681f3Smrg    return r;
30747ec681f3Smrg}
30757ec681f3Smrg
30767ec681f3SmrgIDirect3DVertexDeclaration9Vtbl LockVertexDeclaration9_vtable = {
30777ec681f3Smrg    (void *)NineUnknown_QueryInterface,
30787ec681f3Smrg    (void *)NineUnknown_AddRef,
30797ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
30807ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of VertexDecl9 iface */
30817ec681f3Smrg    (void *)LockVertexDeclaration9_GetDeclaration
30827ec681f3Smrg};
30837ec681f3Smrg
30847ec681f3Smrg#if 0
30857ec681f3Smrgstatic HRESULT NINE_WINAPI
30867ec681f3SmrgLockVertexShader9_GetDevice( struct NineVertexShader9 *This,
30877ec681f3Smrg                             IDirect3DDevice9 **ppDevice )
30887ec681f3Smrg{
30897ec681f3Smrg    HRESULT r;
30907ec681f3Smrg    mtx_lock(&d3dlock_global);
30917ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
30927ec681f3Smrg    mtx_unlock(&d3dlock_global);
30937ec681f3Smrg    return r;
30947ec681f3Smrg}
30957ec681f3Smrg#endif
30967ec681f3Smrg
30977ec681f3Smrgstatic HRESULT NINE_WINAPI
30987ec681f3SmrgLockVertexShader9_GetFunction( struct NineVertexShader9 *This,
30997ec681f3Smrg                               void *pData,
31007ec681f3Smrg                               UINT *pSizeOfData )
31017ec681f3Smrg{
31027ec681f3Smrg    HRESULT r;
31037ec681f3Smrg    mtx_lock(&d3dlock_global);
31047ec681f3Smrg    r = NineVertexShader9_GetFunction(This, pData, pSizeOfData);
31057ec681f3Smrg    mtx_unlock(&d3dlock_global);
31067ec681f3Smrg    return r;
31077ec681f3Smrg}
31087ec681f3Smrg
31097ec681f3SmrgIDirect3DVertexShader9Vtbl LockVertexShader9_vtable = {
31107ec681f3Smrg    (void *)NineUnknown_QueryInterface,
31117ec681f3Smrg    (void *)NineUnknown_AddRef,
31127ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
31137ec681f3Smrg    (void *)NineUnknown_GetDevice,
31147ec681f3Smrg    (void *)LockVertexShader9_GetFunction
31157ec681f3Smrg};
31167ec681f3Smrg
31177ec681f3Smrg#if 0
31187ec681f3Smrgstatic HRESULT NINE_WINAPI
31197ec681f3SmrgLockVolume9_GetDevice( struct NineVolume9 *This,
31207ec681f3Smrg                       IDirect3DDevice9 **ppDevice )
31217ec681f3Smrg{
31227ec681f3Smrg    HRESULT r;
31237ec681f3Smrg    mtx_lock(&d3dlock_global);
31247ec681f3Smrg    r = NineUnknown_GetDevice(NineUnknown(This), ppDevice);
31257ec681f3Smrg    mtx_unlock(&d3dlock_global);
31267ec681f3Smrg    return r;
31277ec681f3Smrg}
31287ec681f3Smrg#endif
31297ec681f3Smrg
31307ec681f3Smrgstatic HRESULT NINE_WINAPI
31317ec681f3SmrgLockVolume9_GetContainer( struct NineVolume9 *This,
31327ec681f3Smrg                          REFIID riid,
31337ec681f3Smrg                          void **ppContainer )
31347ec681f3Smrg{
31357ec681f3Smrg    HRESULT r;
31367ec681f3Smrg    mtx_lock(&d3dlock_global);
31377ec681f3Smrg    r = NineVolume9_GetContainer(This, riid, ppContainer);
31387ec681f3Smrg    mtx_unlock(&d3dlock_global);
31397ec681f3Smrg    return r;
31407ec681f3Smrg}
31417ec681f3Smrg
31427ec681f3Smrg#if 0
31437ec681f3Smrgstatic HRESULT NINE_WINAPI
31447ec681f3SmrgLockVolume9_GetDesc( struct NineVolume9 *This,
31457ec681f3Smrg                     D3DVOLUME_DESC *pDesc )
31467ec681f3Smrg{
31477ec681f3Smrg    HRESULT r;
31487ec681f3Smrg    mtx_lock(&d3dlock_global);
31497ec681f3Smrg    r = NineVolume9_GetDesc(This, pDesc);
31507ec681f3Smrg    mtx_unlock(&d3dlock_global);
31517ec681f3Smrg    return r;
31527ec681f3Smrg}
31537ec681f3Smrg#endif
31547ec681f3Smrg
31557ec681f3Smrgstatic HRESULT NINE_WINAPI
31567ec681f3SmrgLockVolume9_LockBox( struct NineVolume9 *This,
31577ec681f3Smrg                     D3DLOCKED_BOX *pLockedVolume,
31587ec681f3Smrg                     const D3DBOX *pBox,
31597ec681f3Smrg                     DWORD Flags )
31607ec681f3Smrg{
31617ec681f3Smrg    HRESULT r;
31627ec681f3Smrg    mtx_lock(&d3dlock_global);
31637ec681f3Smrg    r = NineVolume9_LockBox(This, pLockedVolume, pBox, Flags);
31647ec681f3Smrg    mtx_unlock(&d3dlock_global);
31657ec681f3Smrg    return r;
31667ec681f3Smrg}
31677ec681f3Smrg
31687ec681f3Smrgstatic HRESULT NINE_WINAPI
31697ec681f3SmrgLockVolume9_UnlockBox( struct NineVolume9 *This )
31707ec681f3Smrg{
31717ec681f3Smrg    HRESULT r;
31727ec681f3Smrg    mtx_lock(&d3dlock_global);
31737ec681f3Smrg    r = NineVolume9_UnlockBox(This);
31747ec681f3Smrg    mtx_unlock(&d3dlock_global);
31757ec681f3Smrg    return r;
31767ec681f3Smrg}
31777ec681f3Smrg
31787ec681f3SmrgIDirect3DVolume9Vtbl LockVolume9_vtable = {
31797ec681f3Smrg    (void *)NineUnknown_QueryInterface,
31807ec681f3Smrg    (void *)NineUnknown_AddRef,
31817ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
31827ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Volume9 iface */
31837ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
31847ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
31857ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
31867ec681f3Smrg    (void *)LockVolume9_GetContainer,
31877ec681f3Smrg    (void *)NineVolume9_GetDesc, /* immutable */
31887ec681f3Smrg    (void *)LockVolume9_LockBox,
31897ec681f3Smrg    (void *)LockVolume9_UnlockBox
31907ec681f3Smrg};
31917ec681f3Smrg
31927ec681f3Smrg#if 0
31937ec681f3Smrgstatic HRESULT NINE_WINAPI
31947ec681f3SmrgLockVolumeTexture9_GetLevelDesc( struct NineVolumeTexture9 *This,
31957ec681f3Smrg                                 UINT Level,
31967ec681f3Smrg                                 D3DVOLUME_DESC *pDesc )
31977ec681f3Smrg{
31987ec681f3Smrg    HRESULT r;
31997ec681f3Smrg    mtx_lock(&d3dlock_global);
32007ec681f3Smrg    r = NineVolumeTexture9_GetLevelDesc(This, Level, pDesc);
32017ec681f3Smrg    mtx_unlock(&d3dlock_global);
32027ec681f3Smrg    return r;
32037ec681f3Smrg}
32047ec681f3Smrg#endif
32057ec681f3Smrg
32067ec681f3Smrg#if 0
32077ec681f3Smrgstatic HRESULT NINE_WINAPI
32087ec681f3SmrgLockVolumeTexture9_GetVolumeLevel( struct NineVolumeTexture9 *This,
32097ec681f3Smrg                                   UINT Level,
32107ec681f3Smrg                                   IDirect3DVolume9 **ppVolumeLevel )
32117ec681f3Smrg{
32127ec681f3Smrg    HRESULT r;
32137ec681f3Smrg    mtx_lock(&d3dlock_global);
32147ec681f3Smrg    r = NineVolumeTexture9_GetVolumeLevel(This, Level, ppVolumeLevel);
32157ec681f3Smrg    mtx_unlock(&d3dlock_global);
32167ec681f3Smrg    return r;
32177ec681f3Smrg}
32187ec681f3Smrg#endif
32197ec681f3Smrg
32207ec681f3Smrgstatic HRESULT NINE_WINAPI
32217ec681f3SmrgLockVolumeTexture9_LockBox( struct NineVolumeTexture9 *This,
32227ec681f3Smrg                            UINT Level,
32237ec681f3Smrg                            D3DLOCKED_BOX *pLockedVolume,
32247ec681f3Smrg                            const D3DBOX *pBox,
32257ec681f3Smrg                            DWORD Flags )
32267ec681f3Smrg{
32277ec681f3Smrg    HRESULT r;
32287ec681f3Smrg    mtx_lock(&d3dlock_global);
32297ec681f3Smrg    r = NineVolumeTexture9_LockBox(This, Level, pLockedVolume, pBox, Flags);
32307ec681f3Smrg    mtx_unlock(&d3dlock_global);
32317ec681f3Smrg    return r;
32327ec681f3Smrg}
32337ec681f3Smrg
32347ec681f3Smrgstatic HRESULT NINE_WINAPI
32357ec681f3SmrgLockVolumeTexture9_UnlockBox( struct NineVolumeTexture9 *This,
32367ec681f3Smrg                              UINT Level )
32377ec681f3Smrg{
32387ec681f3Smrg    HRESULT r;
32397ec681f3Smrg    mtx_lock(&d3dlock_global);
32407ec681f3Smrg    r = NineVolumeTexture9_UnlockBox(This, Level);
32417ec681f3Smrg    mtx_unlock(&d3dlock_global);
32427ec681f3Smrg    return r;
32437ec681f3Smrg}
32447ec681f3Smrg
32457ec681f3Smrgstatic HRESULT NINE_WINAPI
32467ec681f3SmrgLockVolumeTexture9_AddDirtyBox( struct NineVolumeTexture9 *This,
32477ec681f3Smrg                                const D3DBOX *pDirtyBox )
32487ec681f3Smrg{
32497ec681f3Smrg    HRESULT r;
32507ec681f3Smrg    mtx_lock(&d3dlock_global);
32517ec681f3Smrg    r = NineVolumeTexture9_AddDirtyBox(This, pDirtyBox);
32527ec681f3Smrg    mtx_unlock(&d3dlock_global);
32537ec681f3Smrg    return r;
32547ec681f3Smrg}
32557ec681f3Smrg
32567ec681f3SmrgIDirect3DVolumeTexture9Vtbl LockVolumeTexture9_vtable = {
32577ec681f3Smrg    (void *)NineUnknown_QueryInterface,
32587ec681f3Smrg    (void *)NineUnknown_AddRef,
32597ec681f3Smrg    (void *)NineUnknown_ReleaseWithDtorLock,
32607ec681f3Smrg    (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
32617ec681f3Smrg    (void *)LockUnknown_SetPrivateData,
32627ec681f3Smrg    (void *)LockUnknown_GetPrivateData,
32637ec681f3Smrg    (void *)LockUnknown_FreePrivateData,
32647ec681f3Smrg    (void *)LockResource9_SetPriority,
32657ec681f3Smrg    (void *)LockResource9_GetPriority,
32667ec681f3Smrg    (void *)LockBaseTexture9_PreLoad,
32677ec681f3Smrg    (void *)NineResource9_GetType, /* immutable */
32687ec681f3Smrg    (void *)LockBaseTexture9_SetLOD,
32697ec681f3Smrg    (void *)LockBaseTexture9_GetLOD,
32707ec681f3Smrg    (void *)LockBaseTexture9_GetLevelCount,
32717ec681f3Smrg    (void *)LockBaseTexture9_SetAutoGenFilterType,
32727ec681f3Smrg    (void *)LockBaseTexture9_GetAutoGenFilterType,
32737ec681f3Smrg    (void *)LockBaseTexture9_GenerateMipSubLevels,
32747ec681f3Smrg    (void *)NineVolumeTexture9_GetLevelDesc, /* immutable */
32757ec681f3Smrg    (void *)NineVolumeTexture9_GetVolumeLevel, /* AddRef */
32767ec681f3Smrg    (void *)LockVolumeTexture9_LockBox,
32777ec681f3Smrg    (void *)LockVolumeTexture9_UnlockBox,
32787ec681f3Smrg    (void *)LockVolumeTexture9_AddDirtyBox
32797ec681f3Smrg};
32807ec681f3Smrg
32817ec681f3SmrgID3DAdapter9Vtbl LockAdapter9_vtable = { /* not used */
32827ec681f3Smrg    (void *)NULL,
32837ec681f3Smrg    (void *)NULL,
32847ec681f3Smrg    (void *)NULL,
32857ec681f3Smrg    (void *)NULL,
32867ec681f3Smrg    (void *)NULL,
32877ec681f3Smrg    (void *)NULL,
32887ec681f3Smrg    (void *)NULL,
32897ec681f3Smrg    (void *)NULL,
32907ec681f3Smrg    (void *)NULL,
32917ec681f3Smrg    (void *)NULL,
32927ec681f3Smrg    (void *)NULL,
32937ec681f3Smrg    (void *)NULL
32947ec681f3Smrg};
3295