VirtualBox

Changeset 47566 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Aug 6, 2013 10:20:23 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
87766
Message:

crOpenGL/wddm: TexPresent fixes, irq handling fix

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.cpp

    r47070 r47566  
    893893    }
    894894
    895 #if 1 //ndef DEBUG_misha
     895#ifndef DEBUG_misha
    896896    /* zero it up temporary to avoid new code activation */
    897897    g_VBoxMpCrHostCaps = 0;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp

    r47059 r47566  
    242242}
    243243
    244 PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc)
     244PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOCATION *pAlloc)
    245245{
    246246    return vboxWddmSwapchainRetainByAllocData(pDevExt, &pAlloc->AllocData);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.h

    r47059 r47566  
    7474BOOLEAN vboxWddmSwapchainRetain(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
    7575VOID vboxWddmSwapchainRelease(PVBOXWDDM_SWAPCHAIN pSwapchain);
    76 PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
     76PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOCATION *pAlloc);
    7777PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAllocData(PVBOXMP_DEVEXT pDevExt, const struct VBOXWDDM_ALLOC_DATA *pAllocData);
    7878VOID vboxWddmSwapchainAllocRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp

    r47151 r47566  
    992992        VBOXMP_CRPACKER *pCrPacker,
    993993        uint32_t u32CrConClientID,
    994         const VBOXWDDM_ALLOC_DATA *pSrcAllocData,
    995         const VBOXWDDM_ALLOC_DATA *pDstAllocData,
     994        const VBOXWDDM_ALLOCATION *pSrcAlloc,
     995        const VBOXWDDM_ALLOCATION *pDstAlloc,
    996996        const RECT *pSrcRect, const VBOXVDMAPIPE_RECTS *pDstRects)
    997997{
    998     D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId = pDstAllocData->SurfDesc.VidPnSourceId;
     998    D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId = pDstAlloc->AllocData.SurfDesc.VidPnSourceId;
    999999    VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[srcId];
    10001000    NTSTATUS Status = STATUS_SUCCESS;
     
    10031003    {
    10041004        /* we care only about screen regions */
    1005         if (pDstAllocData != &pSource->pPrimaryAllocation->AllocData)
     1005        if (pDstAlloc != pSource->pPrimaryAllocation)
    10061006        {
    10071007            WARN(("non-primary allocation passed to vboxWddmSubmitBltCmd!"));
     
    10091009        }
    10101010
    1011         uint32_t hostID = pSrcAllocData->hostID;
     1011        uint32_t hostID = pSrcAlloc->AllocData.hostID;
    10121012        int rc;
    10131013        if (hostID)
     
    10291029                WARN(("vboxVdmaTexPresentSubmit failed Status 0x%x", Status));
    10301030        }
    1031         else if (&pSource->pPrimaryAllocation->AllocData == pDstAllocData)
     1031        else if (pSource->pPrimaryAllocation == pDstAlloc)
    10321032        {
    10331033            bool fChanged = false;
     
    10491049                                if (Rect.xLeft == 0
    10501050                                        && Rect.yTop == 0
    1051                                         && Rect.xRight == pDstAllocData->SurfDesc.width
    1052                                         && Rect.yBottom == pDstAllocData->SurfDesc.height)
     1051                                        && Rect.xRight == pDstAlloc->AllocData.SurfDesc.width
     1052                                        && Rect.yBottom == pDstAlloc->AllocData.SurfDesc.height)
    10531053                                {
    10541054                                    pSource->fHas3DVrs = FALSE;
     
    10721072    else
    10731073    {
    1074         PVBOXWDDM_SWAPCHAIN pSwapchain = vboxWddmSwapchainRetainByAllocData(pDevExt, pSrcAllocData);
     1074        PVBOXWDDM_SWAPCHAIN pSwapchain = vboxWddmSwapchainRetainByAlloc(pDevExt, pSrcAlloc);
    10751075
    10761076        if (pSwapchain)
    10771077        {
    1078             Assert(pSrcAllocData->SurfDesc.width == pSwapchain->width);
    1079             Assert(pSrcAllocData->SurfDesc.height == pSwapchain->height);
     1078            Assert(pSrcAlloc->AllocData.SurfDesc.width == pSwapchain->width);
     1079            Assert(pSrcAlloc->AllocData.SurfDesc.height == pSwapchain->height);
    10801080        }
    10811081
     
    10911091}
    10921092
    1093 NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData)
     1093NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pRealFbAlloc)
    10941094{
    10951095    VBOXMP_CRPACKER CrPacker;
     
    11071107    Rect.left = 0;
    11081108    Rect.top = 0;
    1109     Rect.right = pAllocData->SurfDesc.width;
    1110     Rect.bottom = pAllocData->SurfDesc.height;
     1109    Rect.right = pRealFbAlloc->AllocData.SurfDesc.width;
     1110    Rect.bottom = pRealFbAlloc->AllocData.SurfDesc.height;
    11111111
    11121112    VBOXVDMAPIPE_RECTS RectInfo;
     
    11161116
    11171117    return vboxVdmaProcessVReg(pDevExt, &CrPacker, u32CrConClientID,
    1118             pAllocData, pAllocData,
     1118            pRealFbAlloc, pRealFbAlloc,
    11191119            &Rect, &RectInfo);
    11201120}
     
    11261126{
    11271127    return vboxVdmaProcessVReg(pDevExt, &pContext->CrPacker, pContext->u32CrConClientID,
    1128             &pSrcAllocInfo->pAlloc->AllocData, &pDstAllocInfo->pAlloc->AllocData,
     1128            pSrcAllocInfo->pAlloc, pDstAllocInfo->pAlloc,
    11291129            pSrcRect, pDstRects);
    11301130}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.h

    r47063 r47566  
    334334NTSTATUS vboxVdmaProcessClrFillCmd(PVBOXMP_DEVEXT pDevExt, struct VBOXWDDM_CONTEXT *pContext, struct VBOXWDDM_DMA_PRIVATEDATA_CLRFILL *pCF);
    335335
    336 NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData);
     336NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pRealFbAlloc);
    337337
    338338#endif /* #ifndef ___VBoxMPVdma_h___ */
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r47151 r47566  
    270270}
    271271
    272 NTSTATUS vboxWddmGhDisplaySetInfo(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData, const POINT * pVScreenPos)
     272NTSTATUS vboxWddmGhDisplaySetInfo(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pRealFbAlloc, const VBOXWDDM_ALLOC_DATA *pAllocData, const POINT * pVScreenPos)
    273273{
    274274    NTSTATUS Status = vboxWddmGhDisplaySetMode(pDevExt, pAllocData);
     
    283283                if (pDevExt->f3DEnabled)
    284284                {
    285                     Status = vboxVdmaTexPresentSetAlloc(pDevExt, pAllocData);
     285                    Status = vboxVdmaTexPresentSetAlloc(pDevExt, pRealFbAlloc);
    286286                    if (NT_SUCCESS(Status))
    287287                        return STATUS_SUCCESS;
     
    311311    char fGhSynced = 1;
    312312    PVBOXWDDM_ALLOCATION pFbAlloc = VBOXWDDM_FB_ALLOCATION(pDevExt, pSource);
     313    PVBOXWDDM_ALLOCATION pRealFbAlloc = pSource->pPrimaryAllocation;
    313314#ifdef VBOXWDDM_RENDER_FROM_SHADOW
    314315# ifdef VBOX_WDDM_WIN8
     
    339340    Assert(!pFbAlloc || pFbAlloc->AllocData.Addr.SegmentId == pSource->AllocData.Addr.SegmentId);
    340341
    341     NTSTATUS Status = vboxWddmGhDisplaySetInfo(pDevExt, pFbAlloc ? &pFbAlloc->AllocData : &pSource->AllocData, &pSource->VScreenPos);
     342    NTSTATUS Status = vboxWddmGhDisplaySetInfo(pDevExt, pRealFbAlloc, pFbAlloc ? &pFbAlloc->AllocData : &pSource->AllocData, &pSource->VScreenPos);
    342343    if (NT_SUCCESS(Status))
    343344        pSource->fGhSynced = fGhSynced;
     
    14281429        uint32_t flags = VBoxCommonFromDeviceExt(pDevExt)->hostCtx.pfHostFlags->u32HostFlags;
    14291430        bOur = (flags & HGSMIHOSTFLAGS_IRQ);
     1431
     1432        if (bOur)
     1433            VBoxHGSMIClearIrq(&VBoxCommonFromDeviceExt(pDevExt)->hostCtx);
     1434
    14301435        do
    14311436        {
     
    15591564            }
    15601565
    1561             VBoxHGSMIClearIrq(&VBoxCommonFromDeviceExt(pDevExt)->hostCtx);
    15621566#if 0 //def DEBUG_misha
    15631567            /* this is not entirely correct since host may concurrently complete some commands and raise a new IRQ while we are here,
Note: See TracChangeset for help on using the changeset viewer.

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