VirtualBox

Ignore:
Timestamp:
Aug 16, 2010 6:13:40 PM (14 years ago)
Author:
vboxsync
Message:

wddm/3d: shared resources frontend (driver) part

Location:
trunk/src/VBox/Additions/WINNT/Graphics
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp

    r31687 r31713  
    34843484                CONST D3DDDI_SURFACEINFO* pSurf = &pResource->pSurfList[0];
    34853485                IDirect3DTexture9 *pD3DIfTex;
     3486                HANDLE hSharedHandle = NULL;
    34863487#if 0
    34873488                hr = pDevice->pDevice9If->CreateTexture(pSurf->Width,
     
    35033504                                            vboxDDI2D3DPool(pResource->Pool),
    35043505                                            &pD3DIfTex,
    3505                                             NULL /* HANDLE* pSharedHandle */,
     3506                                            pResource->Flags.SharedResource ? &hSharedHandle : NULL,
    35063507                                            pResource->Pool == D3DDDIPOOL_SYSTEMMEM ? pRc->aAllocations[0].pvMem : NULL);
    35073508#endif
     
    35123513                    pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_TEXTURE;
    35133514                    pAllocation->pD3DIf = pD3DIfTex;
     3515                    Assert(!!(pResource->Flags.SharedResource) == !!(hSharedHandle));
     3516                    pAllocation->hSharedHandle = hSharedHandle;
    35143517#if 0
    35153518                    if (pResource->Pool == D3DDDIPOOL_SYSTEMMEM)
     
    37233726                {
    37243727                    D3DDDI_ALLOCATIONINFO *pDdiAllocI = &pDdiAllocate->pAllocationInfo[i];
     3728                    PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
    37253729                    Assert(pDdiAllocI->pPrivateDriverData);
    37263730                    Assert(pDdiAllocI->PrivateDriverDataSize == sizeof (VBOXWDDM_ALLOCINFO));
     
    37403744                    pAllocInfo->enmType = VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC;
    37413745                    pAllocInfo->fFlags = pResource->Flags;
     3746                    pAllocInfo->hSharedHandle = pAllocation->hSharedHandle;
    37423747                    pAllocInfo->SurfDesc.width = pSurf->Width;
    37433748                    pAllocInfo->SurfDesc.height = pSurf->Height;
     
    51775182        else
    51785183        {
    5179             Assert(0); /* <-- need to test that */
    5180 
    51815184            /* this is a "generic" resource whose creation is initiaded by the UMD */
    51825185            Assert(pData->PrivateDriverDataSize == sizeof (VBOXWDDM_RCINFO));
    5183             if (pData->PrivateDriverDataSize >= sizeof (VBOXWDDM_RCINFO))
     5186            if (pData->PrivateDriverDataSize == sizeof (VBOXWDDM_RCINFO))
    51845187            {
    51855188                VBOXWDDM_RCINFO *pRcInfo = (VBOXWDDM_RCINFO*)pData->pPrivateDriverData;
     
    51895192                pRc->RcDesc = pRcInfo->RcDesc;
    51905193                pRc->cAllocations = pData->NumAllocations;
     5194
     5195                for (UINT i = 0; i < pData->NumAllocations; ++i)
     5196                {
     5197                    PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     5198                    D3DDDI_OPENALLOCATIONINFO* pOAI = pData->pOpenAllocationInfo;
     5199                    Assert(pOAI->PrivateDriverDataSize == sizeof (VBOXWDDM_ALLOCINFO));
     5200                    if (pOAI->PrivateDriverDataSize != sizeof (VBOXWDDM_ALLOCINFO))
     5201                    {
     5202                        hr = E_INVALIDARG;
     5203                        break;
     5204                    }
     5205                    Assert(pOAI->pPrivateDriverData);
     5206                    PVBOXWDDM_ALLOCINFO pAllocInfo = (PVBOXWDDM_ALLOCINFO)pOAI->pPrivateDriverData;
     5207                    pAllocation->hAllocation = pOAI->hAllocation;
     5208                    pAllocation->enmType = pAllocInfo->enmType;
     5209                    pAllocation->hSharedHandle = pAllocInfo->hSharedHandle;
     5210                    pAllocation->SurfDesc = pAllocInfo->SurfDesc;
     5211                    Assert(pAllocation->hSharedHandle);
     5212                }
     5213
     5214                Assert(pRc->RcDesc.fFlags.SharedResource);
     5215                if (pRc->RcDesc.fFlags.Texture)
     5216                {
     5217                    Assert(pDevice->pDevice9If);
     5218
     5219                    PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[0];
     5220                    IDirect3DTexture9 *pD3DIfTex;
     5221                    HANDLE hSharedHandle = pAllocation->hSharedHandle;
     5222                    Assert(pAllocation->hSharedHandle);
     5223
     5224                    hr = pDevice->pAdapter->D3D.pfnVBoxWineExD3DDev9CreateTexture((IDirect3DDevice9Ex *)pDevice->pDevice9If,
     5225                                                pAllocation->SurfDesc.width,
     5226                                                pAllocation->SurfDesc.height,
     5227                                                pRc->cAllocations,
     5228                                                vboxDDI2D3DUsage(pRc->RcDesc.fFlags),
     5229                                                vboxDDI2D3DFormat(pRc->RcDesc.enmFormat),
     5230                                                vboxDDI2D3DPool(pRc->RcDesc.enmPool),
     5231                                                &pD3DIfTex,
     5232                                                &hSharedHandle,
     5233                                                NULL);
     5234                    Assert(hr == S_OK);
     5235                    if (hr == S_OK)
     5236                    {
     5237                        Assert(pD3DIfTex);
     5238                        pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_TEXTURE;
     5239                        pAllocation->pD3DIf = pD3DIfTex;
     5240                        Assert(pAllocation->hSharedHandle == hSharedHandle);
     5241                        Assert(pAllocation->hSharedHandle);
     5242                    }
     5243                }
     5244                else
     5245                {
     5246                    /* impl */
     5247                    Assert(0);
     5248                }
    51915249            }
    51925250            else
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.h

    r30795 r31713  
    151151    IUnknown *pD3DIf;
    152152    VBOXDISP_D3DIFTYPE enmD3DIfType;
     153    HANDLE hSharedHandle;
    153154    VBOXWDDMDISP_LOCKINFO LockInfo;
    154155    VBOXWDDM_DIRTYREGION DirtyRegion; /* <- dirty region to notify host about */
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoIf.h

    r31687 r31713  
    7171    VBOXWDDM_ALLOC_TYPE enmType;
    7272    D3DDDI_RESOURCEFLAGS fFlags;
     73    HANDLE hSharedHandle;
    7374    VBOXWDDM_SURFACE_DESC SurfDesc;
    7475} VBOXWDDM_ALLOCINFO, *PVBOXWDDM_ALLOCINFO;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette