VirtualBox

Ignore:
Timestamp:
Sep 7, 2010 12:02:49 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
65609
Message:

wddm/3d: basics for early d3d device creation (needed for win7), wine/d3d: stub for device settings update

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm
Files:
5 edited

Legend:

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

    r32185 r32281  
    16021602            break;
    16031603        case D3DDDICAPS_GETD3DQUERYCOUNT:
    1604 #if 0
     1604#if 1
    16051605            *((uint32_t*)pData->pData) = VBOX_QUERYTYPE_COUNT();
    16061606#else
     
    16091609            break;
    16101610        case D3DDDICAPS_GETD3DQUERYDATA:
    1611 #if 0
     1611#if 1
    16121612            Assert(pData->DataSize == VBOX_QUERYTYPE_COUNT() * sizeof (D3DDDIQUERYTYPE));
    16131613            memcpy(pData->pData, gVBoxQueryTypes, VBOX_QUERYTYPE_COUNT() * sizeof (D3DDDIQUERYTYPE));
     
    33583358}
    33593359
     3360static HRESULT vboxWddmD3DDeviceCreate(PVBOXWDDMDISP_DEVICE pDevice, UINT iScreen, PVBOXWDDMDISP_RESOURCE pRc, D3DPRESENT_PARAMETERS * pParams, BOOL bLockable)
     3361{
     3362    UINT cSurfs = pParams->BackBufferCount + 1;
     3363    Assert(pRc->cAllocations = cSurfs);
     3364    IDirect3DDevice9 *pPrimaryDevice = pDevice->aScreens[pDevice->iPrimaryScreen].pDevice9If;
     3365    PVBOXWDDMDISP_SCREEN pScreen = &pDevice->aScreens[iScreen];
     3366    PVBOXWDDMDISP_ADAPTER pAdapter = pDevice->pAdapter;
     3367    HRESULT hr;
     3368    HWND hWnd = NULL;
     3369    Assert(!pScreen->pDevice9If);
     3370    Assert(!pScreen->hWnd);
     3371    hr = VBoxDispWndCreate(pAdapter, pParams->BackBufferWidth, pParams->BackBufferHeight, &hWnd);
     3372    Assert(hr == S_OK);
     3373    if (hr == S_OK)
     3374    {
     3375        pScreen->hWnd = hWnd;
     3376
     3377        DWORD fFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
     3378        if (pDevice->fFlags.AllowMultithreading)
     3379            fFlags |= D3DCREATE_MULTITHREADED;
     3380
     3381        IDirect3DDevice9 *pDevice9If = NULL;
     3382        pParams->hDeviceWindow = hWnd;
     3383                    /* @todo: it seems there should be a way to detect this correctly since
     3384                     * our vboxWddmDDevSetDisplayMode will be called in case we are using full-screen */
     3385        pParams->Windowed = TRUE;
     3386        //            params.EnableAutoDepthStencil = FALSE;
     3387        //            params.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
     3388        //            params.Flags;
     3389        //            params.FullScreen_RefreshRateInHz;
     3390        //            params.FullScreen_PresentationInterval;
     3391        hr = pAdapter->pD3D9If->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, fFlags, pParams, &pDevice9If);
     3392        Assert(hr == S_OK);
     3393        if (hr == S_OK)
     3394        {
     3395            pScreen->pDevice9If = pDevice9If;
     3396            pScreen->pRenderTargetRc = pRc;
     3397            ++pDevice->cScreens;
     3398
     3399            for (UINT i = 0; i < cSurfs; ++i)
     3400            {
     3401                PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     3402                pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
     3403            }
     3404
     3405            if (pPrimaryDevice)
     3406            {
     3407                for (UINT i = 0; i < cSurfs; ++i)
     3408                {
     3409                    PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     3410                    IDirect3DSurface9 *pRt;
     3411                    IDirect3DSurface9 *pSecondaryOpenedRt;
     3412                    HANDLE hSharedHandle = NULL;
     3413                    hr = pPrimaryDevice->CreateRenderTarget(
     3414                            pParams->BackBufferWidth, pParams->BackBufferHeight,
     3415                            pParams->BackBufferFormat,
     3416                            pParams->MultiSampleType,
     3417                            pParams->MultiSampleQuality,
     3418                            TRUE, /*BOOL Lockable*/
     3419                            &pRt,
     3420                            &hSharedHandle);
     3421                    Assert(hr == S_OK);
     3422                    if (hr == S_OK)
     3423                    {
     3424                        Assert(hSharedHandle != NULL);
     3425                        /* open render target for primary device */
     3426                        hr = pDevice9If->CreateRenderTarget(
     3427                                    pParams->BackBufferWidth, pParams->BackBufferHeight,
     3428                                    pParams->BackBufferFormat,
     3429                                    pParams->MultiSampleType,
     3430                                    pParams->MultiSampleQuality,
     3431                                    TRUE, /*BOOL Lockable*/
     3432                                    &pSecondaryOpenedRt,
     3433                                    &hSharedHandle);
     3434                        Assert(hr == S_OK);
     3435                        if (hr == S_OK)
     3436                        {
     3437                            pAllocation->pD3DIf = pRt;
     3438                            pAllocation->pSecondaryOpenedD3DIf = pSecondaryOpenedRt;
     3439                            pAllocation->hSharedHandle = hSharedHandle;
     3440                            continue;
     3441                        }
     3442                        pRt->Release();
     3443                    }
     3444
     3445                    for (UINT j = 0; j < i; ++j)
     3446                    {
     3447                        PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[j];
     3448                        pAlloc->pD3DIf->Release();
     3449                        pAlloc->pSecondaryOpenedD3DIf->Release();
     3450                    }
     3451
     3452                    break;
     3453                }
     3454            }
     3455            else
     3456            {
     3457                pDevice->iPrimaryScreen = iScreen;
     3458                hr = vboxWddmRenderTargetUpdate(pDevice, pRc, 0);
     3459                Assert(hr == S_OK);
     3460            }
     3461
     3462            if (hr == S_OK)
     3463            {
     3464                for (UINT i = 0; i < cSurfs; ++i)
     3465                {
     3466                    PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     3467                    pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
     3468                    hr = vboxWddmSurfSynchMem(pRc, pAllocation);
     3469                    Assert(hr == S_OK);
     3470                    if (hr != S_OK)
     3471                    {
     3472                        break;
     3473                    }
     3474                }
     3475
     3476#ifndef VBOXWDDM_WITH_VISIBLE_FB
     3477                if (!pPrimaryDevice)
     3478                {
     3479                    if (hr == S_OK)
     3480                    {
     3481                        IDirect3DSurface9* pD3D9Surf;
     3482                        hr = pDevice9If->CreateRenderTarget(
     3483                                pParams->BackBufferWidth, pParams->BackBufferHeight,
     3484                                pParams->BackBufferFormat,
     3485                                pParams->MultiSampleType,
     3486                                pParams->MultiSampleQuality,
     3487                                bLockable,
     3488                                &pD3D9Surf,
     3489                                NULL /* HANDLE* pSharedHandle */
     3490                                );
     3491                        Assert(hr == S_OK);
     3492                        if (hr == S_OK)
     3493                        {
     3494                            pDevice->pRenderTargetFbCopy = pD3D9Surf;
     3495                        }
     3496                    }
     3497                }
     3498#endif
     3499
     3500                if (hr != S_OK)
     3501                {
     3502                    for (UINT i = 0; i < cSurfs; ++i)
     3503                    {
     3504                        PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     3505                        pAllocation->pD3DIf->Release();
     3506                    }
     3507                }
     3508            }
     3509
     3510            if (hr != S_OK)
     3511            {
     3512                pDevice9If->Release();
     3513                --pDevice->cScreens;
     3514                Assert(pDevice->cScreens < UINT32_MAX/2);
     3515            }
     3516        }
     3517
     3518        if (hr != S_OK)
     3519        {
     3520            HRESULT tmpHr = VBoxDispWndDestroy(pAdapter, pScreen->hWnd);
     3521            Assert(tmpHr == S_OK);
     3522        }
     3523    }
     3524
     3525    return hr;
     3526}
     3527
     3528static HRESULT APIENTRY vboxWddmDDevDestroyResource(HANDLE hDevice, HANDLE hResource);
     3529
     3530static HRESULT vboxWddmD3DDeviceUpdate(PVBOXWDDMDISP_DEVICE pDevice, UINT iScreen, PVBOXWDDMDISP_RESOURCE pRc, D3DPRESENT_PARAMETERS * pParams, BOOL bLockable)
     3531{
     3532    UINT cSurfs = pParams->BackBufferCount + 1;
     3533    Assert(pRc->cAllocations = cSurfs);
     3534    Assert(iScreen == pDevice->iPrimaryScreen);
     3535    PVBOXWDDMDISP_SCREEN pScreen = &pDevice->aScreens[iScreen];
     3536    PVBOXWDDMDISP_RESOURCE pCurRc = pScreen->pRenderTargetRc;
     3537    IDirect3DDevice9Ex *pNewDevice;
     3538    HRESULT hr = pDevice->pAdapter->D3D.pfnVBoxWineExD3DDev9Update((IDirect3DDevice9Ex*)pScreen->pDevice9If, pParams, &pNewDevice);
     3539    Assert(hr == S_OK);
     3540    if (hr == S_OK)
     3541    {
     3542        pScreen->pDevice9If->Release();
     3543        pScreen->pDevice9If = pNewDevice;
     3544        pScreen->pRenderTargetRc = pRc;
     3545
     3546        for (UINT i = 0; i < cSurfs; ++i)
     3547        {
     3548            PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     3549            pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
     3550        }
     3551
     3552#ifndef VBOXWDDM_WITH_VISIBLE_FB
     3553        if (pDevice->pRenderTargetFbCopy)
     3554        {
     3555            pDevice->pRenderTargetFbCopy->Release();
     3556        }
     3557        IDirect3DSurface9* pD3D9Surf;
     3558        hr = pNewDevice->CreateRenderTarget(
     3559                    pParams->BackBufferWidth, pParams->BackBufferHeight,
     3560                    pParams->BackBufferFormat,
     3561                    pParams->MultiSampleType,
     3562                    pParams->MultiSampleQuality,
     3563                    bLockable,
     3564                    &pD3D9Surf,
     3565                    NULL /* HANDLE* pSharedHandle */
     3566                    );
     3567        Assert(hr == S_OK);
     3568        if (hr == S_OK)
     3569        {
     3570            pDevice->pRenderTargetFbCopy = pD3D9Surf;
     3571        }
     3572#endif
     3573        if (hr == S_OK)
     3574        {
     3575            hr = vboxWddmRenderTargetUpdate(pDevice, pRc, 0);
     3576            Assert(hr == S_OK);
     3577            if (hr == S_OK)
     3578            {
     3579                for (UINT i = 0; i < cSurfs; ++i)
     3580                {
     3581                    PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
     3582                    pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
     3583                    hr = vboxWddmSurfSynchMem(pRc, pAllocation);
     3584                    Assert(hr == S_OK);
     3585                    if (hr != S_OK)
     3586                    {
     3587                        break;
     3588                    }
     3589                }
     3590            }
     3591        }
     3592    }
     3593
     3594
     3595    if (!pCurRc->hResource)
     3596    {
     3597        HRESULT tmpHr = vboxWddmDDevDestroyResource(pDevice, pCurRc);
     3598        Assert(tmpHr == S_OK);
     3599    }
     3600
     3601    return hr;
     3602}
     3603
    33603604static HRESULT APIENTRY vboxWddmDDevCreateResource(HANDLE hDevice, D3DDDIARG_CREATERESOURCE* pResource)
    33613605{
     
    36473891                bIssueCreateResource = true;
    36483892                Assert(pResource->SurfCount);
    3649                 IDirect3DDevice9 *pPrimaryDevice = pDevice->aScreens[pDevice->iPrimaryScreen].pDevice9If;
    3650                 if (!pPrimaryDevice || pResource->Flags.Primary)
    3651                 {
    3652                     PVBOXWDDMDISP_SCREEN pScreen = &pDevice->aScreens[pResource->VidPnSourceId];
    3653                     Assert(!pScreen->pDevice9If);
    3654                     Assert(!pScreen->hWnd);
    3655                     hr = VBoxDispWndCreate(pAdapter, pResource->pSurfList[0].Width, pResource->pSurfList[0].Height, &hWnd);
    3656                     Assert(hr == S_OK);
    3657                     if (hr == S_OK)
     3893                PVBOXWDDMDISP_SCREEN pScreen = &pDevice->aScreens[pDevice->iPrimaryScreen];
     3894                IDirect3DDevice9 *pPrimaryDevice = pScreen->pDevice9If;
     3895                if (!pPrimaryDevice || !pScreen->pRenderTargetRc->hResource || pResource->Flags.Primary)
     3896                {
     3897                    D3DPRESENT_PARAMETERS params;
     3898                    memset(&params, 0, sizeof (params));
     3899                    params.BackBufferWidth = pResource->pSurfList[0].Width;
     3900                    params.BackBufferHeight = pResource->pSurfList[0].Height;
     3901                    params.BackBufferFormat = vboxDDI2D3DFormat(pResource->Format);
     3902                    Assert(pResource->SurfCount);
     3903                    params.BackBufferCount = !pPrimaryDevice ? pResource->SurfCount - 1 : 0;
     3904                    params.MultiSampleType = vboxDDI2D3DMultiSampleType(pResource->MultisampleType);
     3905                    if (pResource->Flags.DiscardRenderTarget)
     3906                        params.SwapEffect = D3DSWAPEFFECT_DISCARD;
     3907//                    params.hDeviceWindow = hWnd;
     3908                                /* @todo: it seems there should be a way to detect this correctly since
     3909                                 * our vboxWddmDDevSetDisplayMode will be called in case we are using full-screen */
     3910                    params.Windowed = TRUE;
     3911                    //            params.EnableAutoDepthStencil = FALSE;
     3912                    //            params.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
     3913                    //            params.Flags;
     3914                    //            params.FullScreen_RefreshRateInHz;
     3915                    //            params.FullScreen_PresentationInterval;
     3916
     3917                    if (!pPrimaryDevice || pResource->Flags.Primary)
    36583918                    {
    3659                         pScreen->hWnd = hWnd;
    3660 
    3661                         DWORD fFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    3662                         if (pDevice->fFlags.AllowMultithreading)
    3663                             fFlags |= D3DCREATE_MULTITHREADED;
    3664 
    3665                         IDirect3DDevice9 *pDevice9If = NULL;
    3666                         D3DPRESENT_PARAMETERS params;
    3667                         memset(&params, 0, sizeof (params));
    3668                         params.BackBufferWidth = pResource->pSurfList[0].Width;
    3669                         params.BackBufferHeight = pResource->pSurfList[0].Height;
    3670                         params.BackBufferFormat = vboxDDI2D3DFormat(pResource->Format);
    3671                         Assert(pResource->SurfCount);
    3672                         params.BackBufferCount = !pPrimaryDevice ? pResource->SurfCount - 1 : 0;
    3673                         params.MultiSampleType = vboxDDI2D3DMultiSampleType(pResource->MultisampleType);
    3674                         if (pResource->Flags.DiscardRenderTarget)
    3675                             params.SwapEffect = D3DSWAPEFFECT_DISCARD;
    3676                         params.hDeviceWindow = hWnd;
    3677                                     /* @todo: it seems there should be a way to detect this correctly since
    3678                                      * our vboxWddmDDevSetDisplayMode will be called in case we are using full-screen */
    3679                         params.Windowed = TRUE;
    3680                         //            params.EnableAutoDepthStencil = FALSE;
    3681                         //            params.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
    3682                         //            params.Flags;
    3683                         //            params.FullScreen_RefreshRateInHz;
    3684                         //            params.FullScreen_PresentationInterval;
    3685                         hr = pAdapter->pD3D9If->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, fFlags, &params, &pDevice9If);
     3919                        hr = vboxWddmD3DDeviceCreate(pDevice, pResource->VidPnSourceId, pRc, &params, !pResource->Flags.NotLockable /*BOOL bLockable*/);
    36863920                        Assert(hr == S_OK);
    3687                         if (hr == S_OK)
    3688                         {
    3689                             pScreen->pDevice9If = pDevice9If;
    3690                             pScreen->pRenderTargetRc = pRc;
    3691                             ++pDevice->cScreens;
    3692 
    3693                             for (UINT i = 0; i < pResource->SurfCount; ++i)
    3694                             {
    3695                                 PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
    3696                                 pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
    3697                             }
    3698 
    3699                             if (pPrimaryDevice)
    3700                             {
    3701                                 for (UINT i = 0; i < pResource->SurfCount; ++i)
    3702                                 {
    3703                                     PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
    3704                                     IDirect3DSurface9 *pRt;
    3705                                     IDirect3DSurface9 *pSecondaryOpenedRt;
    3706                                     HANDLE hSharedHandle = NULL;
    3707                                     hr = pPrimaryDevice->CreateRenderTarget(
    3708                                             pResource->pSurfList[i].Width,
    3709                                             pResource->pSurfList[i].Height,
    3710                                             vboxDDI2D3DFormat(pResource->Format),
    3711                                             vboxDDI2D3DMultiSampleType(pResource->MultisampleType),
    3712                                             0, /*DWORD MultisampleQuality*/
    3713                                             TRUE, /*BOOL Lockable*/
    3714                                             &pRt,
    3715                                             &hSharedHandle);
    3716                                     Assert(hr == S_OK);
    3717                                     if (hr == S_OK)
    3718                                     {
    3719                                         Assert(hSharedHandle != NULL);
    3720                                         /* open render target for primary device */
    3721                                         hr = pDevice9If->CreateRenderTarget(
    3722                                                     pResource->pSurfList[i].Width,
    3723                                                     pResource->pSurfList[i].Height,
    3724                                                     vboxDDI2D3DFormat(pResource->Format),
    3725                                                     vboxDDI2D3DMultiSampleType(pResource->MultisampleType),
    3726                                                     0, /*DWORD MultisampleQuality*/
    3727                                                     TRUE, /*BOOL Lockable*/
    3728                                                     &pSecondaryOpenedRt,
    3729                                                     &hSharedHandle);
    3730                                         Assert(hr == S_OK);
    3731                                         if (hr == S_OK)
    3732                                         {
    3733                                             pAllocation->pD3DIf = pRt;
    3734                                             pAllocation->pSecondaryOpenedD3DIf = pSecondaryOpenedRt;
    3735                                             pAllocation->hSharedHandle = hSharedHandle;
    3736                                             continue;
    3737                                         }
    3738                                         pRt->Release();
    3739                                     }
    3740 
    3741                                     for (UINT j = 0; j < i; ++j)
    3742                                     {
    3743                                         PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[j];
    3744                                         pAlloc->pD3DIf->Release();
    3745                                         pAlloc->pSecondaryOpenedD3DIf->Release();
    3746                                     }
    3747 
    3748                                     break;
    3749                                 }
    3750                             }
    3751                             else
    3752                             {
    3753                                 pDevice->iPrimaryScreen = pResource->VidPnSourceId;
    3754                             }
    3755 
    3756                             if (hr == S_OK)
    3757                             {
    3758                                 hr = vboxWddmRenderTargetUpdate(pDevice, pRc, 0);
    3759                                 Assert(hr == S_OK);
    3760                                 if (hr == S_OK)
    3761                                 {
    3762                                     for (UINT i = 0; i < pResource->SurfCount; ++i)
    3763                                     {
    3764                                         PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
    3765                                         pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
    3766                                         hr = vboxWddmSurfSynchMem(pRc, pAllocation);
    3767                                         Assert(hr == S_OK);
    3768                                         if (hr != S_OK)
    3769                                         {
    3770                                             break;
    3771                                         }
    3772                                     }
    3773 
    3774 #ifndef VBOXWDDM_WITH_VISIBLE_FB
    3775                                     if (!pPrimaryDevice)
    3776                                     {
    3777                                         if (hr == S_OK)
    3778                                         {
    3779                                             IDirect3DSurface9* pD3D9Surf;
    3780                                             hr = pDevice9If->CreateRenderTarget(pRc->aAllocations[0].SurfDesc.width,
    3781                                                     pRc->aAllocations[0].SurfDesc.height,
    3782                                                     vboxDDI2D3DFormat(pResource->Format),
    3783                                                     vboxDDI2D3DMultiSampleType(pResource->MultisampleType),
    3784                                                     pResource->MultisampleQuality,
    3785                                                     !pResource->Flags.NotLockable /* BOOL Lockable */,
    3786                                                     &pD3D9Surf,
    3787                                                     NULL /* HANDLE* pSharedHandle */
    3788                                                     );
    3789                                             Assert(hr == S_OK);
    3790                                             if (hr == S_OK)
    3791                                             {
    3792                                                 pDevice->pRenderTargetFbCopy = pD3D9Surf;
    3793                                             }
    3794                                         }
    3795                                     }
    3796 #endif
    3797 
    3798                                     if (hr != S_OK)
    3799                                     {
    3800                                         for (UINT i = 0; i < pResource->SurfCount; ++i)
    3801                                         {
    3802                                             PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
    3803                                             pAllocation->pD3DIf->Release();
    3804                                         }
    3805                                     }
    3806                                 }
    3807                             }
    3808 
    3809                             if (hr != S_OK)
    3810                             {
    3811                                 pDevice9If->Release();
    3812                                 --pDevice->cScreens;
    3813                                 Assert(pDevice->cScreens < UINT32_MAX/2);
    3814                             }
    3815                         }
    3816 
    3817                         if (hr != S_OK)
    3818                         {
    3819                             HRESULT tmpHr = VBoxDispWndDestroy(pAdapter, pScreen->hWnd);
    3820                             Assert(tmpHr == S_OK);
    3821                         }
    38223921                    }
    3823 
    3824 
     3922                    else
     3923                    {
     3924                        Assert(0);
     3925                        hr = vboxWddmD3DDeviceUpdate(pDevice, pResource->VidPnSourceId, pRc, &params, !pResource->Flags.NotLockable /*BOOL bLockable*/);
     3926                        Assert(hr == S_OK);
     3927                    }
    38253928                }
    38263929                else
     
    58415944                Assert(hr == S_OK);
    58425945                if (hr == S_OK)
     5946                {
     5947#ifdef VBOXDISP_EARLYCREATEDEVICE
     5948                    PVBOXWDDMDISP_RESOURCE pRc = vboxResourceAlloc(2);
     5949                    Assert(pRc);
     5950                    if (pRc)
     5951                    {
     5952                        D3DPRESENT_PARAMETERS params;
     5953                        memset(&params, 0, sizeof (params));
     5954                        params.BackBufferWidth = 0x500;
     5955                        params.BackBufferHeight = 0x400;
     5956                        params.BackBufferFormat = D3DFMT_A8R8G8B8;
     5957                        params.BackBufferCount = 1;
     5958                        params.MultiSampleType = D3DMULTISAMPLE_NONE;
     5959                        params.SwapEffect = D3DSWAPEFFECT_DISCARD;
     5960    //                    params.hDeviceWindow = hWnd;
     5961                                    /* @todo: it seems there should be a way to detect this correctly since
     5962                                     * our vboxWddmDDevSetDisplayMode will be called in case we are using full-screen */
     5963                        params.Windowed = TRUE;
     5964                        //            params.EnableAutoDepthStencil = FALSE;
     5965                        //            params.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
     5966                        //            params.Flags;
     5967                        //            params.FullScreen_RefreshRateInHz;
     5968                        //            params.FullScreen_PresentationInterval;
     5969
     5970                        hr = vboxWddmD3DDeviceCreate(pDevice, 0, pRc, &params, TRUE /*BOOL bLockable*/);
     5971                        Assert(hr == S_OK);
     5972                        if (hr == S_OK)
     5973                            break;
     5974                        vboxResourceFree(pRc);
     5975                    }
     5976                    else
     5977                    {
     5978                        hr = E_OUTOFMEMORY;
     5979                    }
     5980#else
    58435981                    break;
     5982#endif
     5983
     5984                    HRESULT tmpHr = vboxDispCmCtxDestroy(pDevice, &pDevice->DefaultContext);
     5985                    Assert(tmpHr == S_OK);
     5986                }
    58445987            }
    58455988            else
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.h

    r32107 r32281  
    9595    IDirect3DDevice9 *pDevice9If;
    9696    struct VBOXWDDMDISP_RESOURCE *pRenderTargetRc;
    97     struct VBOXWDDMDISP_RESOURCE *pDstSharedRc;
     97//    struct VBOXWDDMDISP_RESOURCE *pDstSharedRc;
    9898    uint32_t iRenderTargetFrontBuf;
    9999    HWND hWnd;
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3DCmn.h

    r30916 r32281  
    4040# define VBOXWDDMDISP_DEBUG_DUMPSURFDATA
    4141#endif
     42
     43//#define VBOXDISP_EARLYCREATEDEVICE
    4244
    4345#if 0
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3DIf.cpp

    r32241 r32281  
    4343                if (pD3D->pfnVBoxWineExD3DDev9Flush)
    4444                {
    45                     return S_OK;
     45                    pD3D->pfnVBoxWineExD3DDev9Update = (PFNVBOXWINEEXD3DDEV9_UPDATE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Update");
     46                    Assert(pD3D->pfnVBoxWineExD3DDev9Update);
     47                    if (pD3D->pfnVBoxWineExD3DDev9Update)
     48                    {
     49                        return S_OK;
     50                    }
    4651                }
    4752            }
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3DIf.h

    r31868 r32281  
    3737    PFNVBOXWINEEXD3DDEV9_FLUSH pfnVBoxWineExD3DDev9Flush;
    3838
     39    PFNVBOXWINEEXD3DDEV9_UPDATE pfnVBoxWineExD3DDev9Update;
     40
     41
    3942    /* module handle */
    4043    HMODULE hD3DLib;
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