VirtualBox

Changeset 46885 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
Jul 1, 2013 2:02:37 PM (12 years ago)
Author:
vboxsync
Message:

crOpenGL: TexPresent fixes

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/common/VBoxMPDevExt.h

    r46757 r46885  
    117117   BOOLEAN fTexPresentEnabled;
    118118
     119   uint32_t u32CrConDefaultClientID;
     120
    119121   VBOXMP_CRCTLCON CrCtlCon;
    120122   VBOXMP_CRSHGSMITRANSPORT CrHgsmiTransport;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp

    r46783 r46885  
    932932#endif
    933933
    934 static NTSTATUS vboxVdmaSubitVBoxTexPresent(PVBOXMP_DEVEXT pDevExt,
     934static NTSTATUS vboxVdmaTexPresentSubmit(PVBOXMP_DEVEXT pDevExt,
    935935        VBOXMP_CRPACKER *pCrPacker,
    936936        uint32_t u32CrConClientID,
     
    965965}
    966966
     967static NTSTATUS vboxVdmaCrCtlGetDefaultClientId(PVBOXMP_DEVEXT pDevExt, uint32_t *pu32ClienID)
     968{
     969    if (!pDevExt->u32CrConDefaultClientID)
     970    {
     971        int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon, CR_PROTOCOL_VERSION_MAJOR, CR_PROTOCOL_VERSION_MINOR, &pDevExt->u32CrConDefaultClientID);
     972        if (!RT_SUCCESS(rc))
     973        {
     974            WARN(("VBoxMpCrCtlConConnect failed, rc %d", rc));
     975            return STATUS_UNSUCCESSFUL;
     976        }
     977    }
     978
     979    *pu32ClienID = pDevExt->u32CrConDefaultClientID;
     980    return STATUS_SUCCESS;
     981}
     982
     983NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, PVBOXWDDM_ALLOCATION pAllocation)
     984{
     985    RTRECT Rect, *pRect = NULL;
     986    uint32_t cRects = 0;
     987    uint32_t hostID = 0;
     988    uint32_t cfg = VidPnSourceId | CR_PRESENT_FLAG_CLEAR_RECTS;
     989    uint32_t u32CrConClientID;
     990    NTSTATUS Status = vboxVdmaCrCtlGetDefaultClientId(pDevExt, &u32CrConClientID);
     991    if (!NT_SUCCESS(Status))
     992    {
     993        WARN(("vboxVdmaCrCtlGetDefaultClientId failed Status 0x%x", Status));
     994        return Status;
     995    }
     996
     997    VBOXMP_CRPACKER CrPacker;
     998    VBoxMpCrPackerInit(&CrPacker);
     999
     1000    if (pAllocation && pAllocation->hostID)
     1001    {
     1002        hostID = pAllocation->hostID;
     1003        cRects = 1;
     1004        Rect.xLeft = 0;
     1005        Rect.yTop = 0;
     1006        Rect.xRight = pAllocation->AllocData.SurfDesc.width;
     1007        Rect.yBottom = pAllocation->AllocData.SurfDesc.height;
     1008        pRect = &Rect;
     1009        cfg = VidPnSourceId;
     1010    }
     1011
     1012    Status = vboxVdmaTexPresentSubmit(pDevExt, &CrPacker, u32CrConClientID,
     1013            hostID, cfg, 0, 0, cRects, pRect);
     1014    if (!NT_SUCCESS(Status))
     1015    {
     1016        WARN(("vboxVdmaCrCtlGetDefaultClientId failed Status 0x%x", Status));
     1017        return Status;
     1018    }
     1019
     1020    return STATUS_SUCCESS;
     1021 }
     1022
    9671023static NTSTATUS vboxVdmaProcessVRegCmd(PVBOXMP_DEVEXT pDevExt, VBOXWDDM_CONTEXT *pContext,
    9681024        VBOXWDDM_DMA_ALLOCINFO *pSrcAllocInfo,
     
    9941050            int32_t posY = pDstRects->ContextRect.top - pSrcRect->top;
    9951051
    996             Status = vboxVdmaSubitVBoxTexPresent(pDevExt, &pContext->CrPacker, pContext->u32CrConClientID, hostID, srcId, posX, posY, pDstRects->UpdateRects.cRects, (const RTRECT*)pDstRects->UpdateRects.aRects);
     1052            Status = vboxVdmaTexPresentSubmit(pDevExt, &pContext->CrPacker, pContext->u32CrConClientID, hostID, srcId, posX, posY, pDstRects->UpdateRects.cRects, (const RTRECT*)pDstRects->UpdateRects.aRects);
    9971053            if (NT_SUCCESS(Status))
    9981054            {
     
    10041060            }
    10051061            else
    1006                 WARN(("vboxVdmaSubitVBoxTexPresent failed Status 0x%x", Status));
     1062                WARN(("vboxVdmaTexPresentSubmit failed Status 0x%x", Status));
    10071063        }
    10081064        else if (pSource->pPrimaryAllocation == pDstAlloc)
     
    10151071                if (fChanged)
    10161072                {
    1017                     Status = vboxVdmaSubitVBoxTexPresent(pDevExt, &pContext->CrPacker, pContext->u32CrConClientID, hostID, srcId, 0, 0, pDstRects->UpdateRects.cRects, (const RTRECT*)pDstRects->UpdateRects.aRects);
     1073                    Status = vboxVdmaTexPresentSubmit(pDevExt, &pContext->CrPacker, pContext->u32CrConClientID, hostID, srcId, 0, 0, pDstRects->UpdateRects.cRects, (const RTRECT*)pDstRects->UpdateRects.aRects);
    10181074                    if (NT_SUCCESS(Status))
    10191075                    {
     
    10351091                    }
    10361092                    else
    1037                         WARN(("vboxVdmaSubitVBoxTexPresent failed Status 0x%x", Status));
     1093                        WARN(("vboxVdmaTexPresentSubmit failed Status 0x%x", Status));
    10381094                }
    10391095            }
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.h

    r46757 r46885  
    347347NTSTATUS vboxVdmaProcessClrFillCmd(PVBOXMP_DEVEXT pDevExt, struct VBOXWDDM_CONTEXT *pContext, struct VBOXWDDM_DMA_PRIVATEDATA_CLRFILL *pCF, struct VBOXVDMAPIPE_FLAGS_DMACMD fFlags);
    348348
     349
     350NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, PVBOXWDDM_ALLOCATION pAllocation);
     351
    349352#endif /* #ifndef ___VBoxMPVdma_h___ */
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r46852 r46885  
    30633063                                Assert(pDstAlloc->AllocData.SurfDesc.VidPnSourceId < VBOX_VIDEO_MAX_SCREENS);
    30643064
     3065                                if (pSource->fHas3DVrs)
     3066                                    fBltFlags.fVisibleRegions = 1;
     3067
    30653068                                if (!fRenderFromSharedDisabled && pSource->bVisible)
    30663069                                {
     
    55565559            if (pDstAlloc)
    55575560            {
     5561                PVBOXWDDM_SOURCE pSource = &pDevExt->aSources[pDstAlloc->AllocData.SurfDesc.VidPnSourceId];
    55585562                do
    55595563                {
     
    55735577                    /* issue VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE ONLY in case there are no 3D contexts currently
    55745578                     * otherwise we would need info about all rects being updated on primary for visible rect reporting */
    5575                     if (!cContexts3D && !cContexts2D)
     5579                    if (!cContexts3D && !cContexts2D && !pSource->fHas3DVrs)
    55765580                    {
    55775581                        if (pDstAlloc->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHAREDPRIMARYSURFACE
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h

    r46757 r46885  
    168168    }
    169169
    170     if (pAllocation && pAllocation->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHAREDPRIMARYSURFACE)
    171     {
     170    if (pAllocation && pAllocation->hostID)
     171    {
     172        NTSTATUS Status = vboxVdmaTexPresentSetAlloc(pDevExt, srcId, pAllocation);
     173        if (!NT_SUCCESS(Status))
     174        {
     175            WARN(("vboxVdmaTexPresentSetAlloc failed, Status 0x%x", Status));
     176        }
     177
     178        VBoxVrListClear(&pSource->VrList);
     179        pSource->fHas3DVrs = TRUE;
     180    }
     181    else
     182    {
     183        if (pSource->fHas3DVrs)
     184        {
     185            NTSTATUS Status = vboxVdmaTexPresentSetAlloc(pDevExt, srcId, NULL);
     186            if (!NT_SUCCESS(Status))
     187            {
     188                WARN(("vboxVdmaTexPresentSetAlloc failed, Status 0x%x", Status));
     189            }
     190            pSource->fHas3DVrs = FALSE;
     191        }
     192
    172193        RTRECT Rect;
    173194        Rect.xLeft = 0;
    174195        Rect.yTop = 0;
    175         Rect.xRight = pAllocation->AllocData.SurfDesc.width;
    176         Rect.yBottom = pAllocation->AllocData.SurfDesc.height;
     196        Rect.xRight = pAllocation ? pAllocation->AllocData.SurfDesc.width : pSource->AllocData.SurfDesc.width;
     197        Rect.yBottom = pAllocation ? pAllocation->AllocData.SurfDesc.height : pSource->AllocData.SurfDesc.height;
    177198
    178199        VBoxVrListRectsSet(&pSource->VrList, 1, &Rect, NULL);
    179200    }
    180     else
    181         VBoxVrListClear(&pSource->VrList);
    182 
    183     pSource->fHas3DVrs = FALSE;
    184201
    185202    KIRQL OldIrql;
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine_new/d3d9/device.c

    r46661 r46885  
    293293    if (refs != 1)
    294294    {
    295         ERR("unexpected ref count %d, destroying in anyway", refs);
     295        WARN("unexpected ref count %d, destroying in anyway", refs);
    296296    }
    297297
     
    39173917    if (device->refcount != 1)
    39183918    {
    3919         ERR("unexpected ref count %d, destroying in anyway", device->refcount);
     3919        WARN("unexpected ref count %d, destroying in anyway", device->refcount);
    39203920    }
    39213921    wined3d_refs = d3d9_device_Term(device);
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