VirtualBox

Ignore:
Timestamp:
May 31, 2010 10:52:52 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
62160
Message:

wddm/2d: overlay creation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp

    r29883 r29895  
    14061406}
    14071407
    1408 NTSTATUS vboxWddmCreateAllocation(PDEVICE_EXTENSION pDevExt, DXGK_ALLOCATIONINFO* pAllocationInfo)
     1408NTSTATUS vboxWddmCreateAllocation(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_RCINFO pRcInfo, DXGK_ALLOCATIONINFO* pAllocationInfo)
    14091409{
    14101410    PAGED_CODE();
     
    14291429            pAllocationInfo->PrivateDriverDataSize = 0;
    14301430            pAllocationInfo->Alignment = 0;
    1431             pAllocationInfo->Size = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height;
     1431            pAllocationInfo->Size = pAllocInfo->SurfDesc.cbSize;
    14321432            pAllocationInfo->PitchAlignedSize = 0;
    14331433            pAllocationInfo->HintedBank.Value = 0;
     
    14531453#endif
    14541454                    break;
     1455                case VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC:
     1456#ifdef VBOX_WITH_VIDEOHWACCEL
     1457                    Assert(pRcInfo);
     1458                    if (pRcInfo)
     1459                    {
     1460                        Assert(pRcInfo->cAllocInfos);
     1461                        if (pRcInfo->cAllocInfos)
     1462                        {
     1463                            if (pRcInfo->RcDesc.fFlags.Overlay)
     1464                            {
     1465                                int rc = vboxVhwaHlpCreateOverlay(pDevExt, pAllocation, pRcInfo->cAllocInfos - 1, pRcInfo->RcDesc.VidPnSourceId);
     1466                                AssertRC(rc);
     1467                                if (RT_FAILURE(rc))
     1468                                    Status = STATUS_UNSUCCESSFUL;
     1469                            }
     1470                        }
     1471                        else
     1472                            Status = STATUS_INVALID_PARAMETER;
     1473                    }
     1474#endif
     1475                    /* do not break to set CPU visibility flag */
    14551476                case VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE:
    14561477                case VBOXWDDM_ALLOC_TYPE_STD_STAGINGSURFACE:
    1457                 case VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC:
    14581478                    pAllocationInfo->Flags.Value = 0;
    14591479                    pAllocationInfo->Flags.CpuVisible = 1;
     
    14961516    vboxVDbgBreakFv();
    14971517
     1518    PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)hAdapter;
    14981519    NTSTATUS Status = STATUS_SUCCESS;
     1520    PVBOXWDDM_RCINFO pRcInfo = NULL;
    14991521
    15001522    if (pCreateAllocation->PrivateDriverDataSize)
    15011523    {
     1524        Assert(pCreateAllocation->PrivateDriverDataSize == sizeof (VBOXWDDM_RCINFO));
     1525        Assert(pCreateAllocation->pPrivateDriverData);
     1526        if (pCreateAllocation->PrivateDriverDataSize >= sizeof (VBOXWDDM_RCINFO))
     1527        {
     1528            pRcInfo = (PVBOXWDDM_RCINFO)pCreateAllocation->pPrivateDriverData;
     1529            Assert(pRcInfo->RcDesc.VidPnSourceId < pDevExt->cSources);
     1530            Assert(pRcInfo->cAllocInfos == pCreateAllocation->NumAllocations);
     1531        }
     1532        else
     1533            Status = STATUS_INVALID_PARAMETER;
    15021534        /* @todo: Implement Resource Data Handling */
    15031535        drprintf((__FUNCTION__ ": WARNING: Implement Resource Data Handling\n"));
    15041536    }
    15051537
    1506     for (UINT i = 0; i < pCreateAllocation->NumAllocations; ++i)
    1507     {
    1508         Status = vboxWddmCreateAllocation((PDEVICE_EXTENSION)hAdapter, &pCreateAllocation->pAllocationInfo[i]);
    1509         Assert(Status == STATUS_SUCCESS);
    1510         if (Status != STATUS_SUCCESS)
    1511         {
    1512             drprintf((__FUNCTION__ ": ERROR: vboxWddmCreateAllocation error (0x%x)\n", Status));
    1513             /* note: i-th allocation is expected to be cleared in a fail handling code above */
    1514             for (UINT j = 0; j < i; ++j)
    1515             {
    1516                 vboxWddmDestroyAllocation((PDEVICE_EXTENSION)hAdapter, (PVBOXWDDM_ALLOCATION)pCreateAllocation->pAllocationInfo[j].hAllocation);
    1517             }
    1518         }
    1519     }
    1520 
     1538    if (Status == STATUS_SUCCESS)
     1539    {
     1540        for (UINT i = 0; i < pCreateAllocation->NumAllocations; ++i)
     1541        {
     1542            Status = vboxWddmCreateAllocation(pDevExt, pRcInfo, &pCreateAllocation->pAllocationInfo[i]);
     1543            Assert(Status == STATUS_SUCCESS);
     1544            if (Status != STATUS_SUCCESS)
     1545            {
     1546                drprintf((__FUNCTION__ ": ERROR: vboxWddmCreateAllocation error (0x%x)\n", Status));
     1547                /* note: i-th allocation is expected to be cleared in a fail handling code above */
     1548                for (UINT j = 0; j < i; ++j)
     1549                {
     1550                    vboxWddmDestroyAllocation(pDevExt, (PVBOXWDDM_ALLOCATION)pCreateAllocation->pAllocationInfo[j].hAllocation);
     1551                }
     1552            }
     1553        }
     1554    }
    15211555    dfprintf(("<== "__FUNCTION__ ", status(0x%x), context(0x%x)\n", Status, hAdapter));
    15221556
     
    16101644                pAllocInfo->SurfDesc.bpp = vboxWddmCalcBitsPerPixel(pAllocInfo->SurfDesc.format);
    16111645                pAllocInfo->SurfDesc.pitch = vboxWddmCalcPitch(pGetStandardAllocationDriverData->pCreateSharedPrimarySurfaceData->Width, pAllocInfo->SurfDesc.bpp);
     1646                pAllocInfo->SurfDesc.cbSize = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height;
    16121647                pAllocInfo->SurfDesc.depth = 0;
    16131648                pAllocInfo->SurfDesc.slicePitch = 0;
     
    16411676                    pAllocInfo->SurfDesc.bpp = vboxWddmCalcBitsPerPixel(pAllocInfo->SurfDesc.format);
    16421677                    pAllocInfo->SurfDesc.pitch = vboxWddmCalcPitch(pGetStandardAllocationDriverData->pCreateShadowSurfaceData->Width, pAllocInfo->SurfDesc.bpp);
     1678                    pAllocInfo->SurfDesc.cbSize = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height;
    16431679                    pAllocInfo->SurfDesc.depth = 0;
    16441680                    pAllocInfo->SurfDesc.slicePitch = 0;
     
    16721708                pAllocInfo->SurfDesc.bpp = vboxWddmCalcBitsPerPixel(pAllocInfo->SurfDesc.format);
    16731709                pAllocInfo->SurfDesc.pitch = vboxWddmCalcPitch(pGetStandardAllocationDriverData->pCreateStagingSurfaceData->Width, pAllocInfo->SurfDesc.bpp);
     1710                pAllocInfo->SurfDesc.cbSize = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height;
    16741711                pAllocInfo->SurfDesc.depth = 0;
    16751712                pAllocInfo->SurfDesc.slicePitch = 0;
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