Changeset 29895 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
- Timestamp:
- May 31, 2010 10:52:52 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62160
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
r29883 r29895 1406 1406 } 1407 1407 1408 NTSTATUS vboxWddmCreateAllocation(PDEVICE_EXTENSION pDevExt, DXGK_ALLOCATIONINFO* pAllocationInfo)1408 NTSTATUS vboxWddmCreateAllocation(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_RCINFO pRcInfo, DXGK_ALLOCATIONINFO* pAllocationInfo) 1409 1409 { 1410 1410 PAGED_CODE(); … … 1429 1429 pAllocationInfo->PrivateDriverDataSize = 0; 1430 1430 pAllocationInfo->Alignment = 0; 1431 pAllocationInfo->Size = pAllocInfo->SurfDesc. pitch * pAllocInfo->SurfDesc.height;1431 pAllocationInfo->Size = pAllocInfo->SurfDesc.cbSize; 1432 1432 pAllocationInfo->PitchAlignedSize = 0; 1433 1433 pAllocationInfo->HintedBank.Value = 0; … … 1453 1453 #endif 1454 1454 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 */ 1455 1476 case VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE: 1456 1477 case VBOXWDDM_ALLOC_TYPE_STD_STAGINGSURFACE: 1457 case VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC:1458 1478 pAllocationInfo->Flags.Value = 0; 1459 1479 pAllocationInfo->Flags.CpuVisible = 1; … … 1496 1516 vboxVDbgBreakFv(); 1497 1517 1518 PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)hAdapter; 1498 1519 NTSTATUS Status = STATUS_SUCCESS; 1520 PVBOXWDDM_RCINFO pRcInfo = NULL; 1499 1521 1500 1522 if (pCreateAllocation->PrivateDriverDataSize) 1501 1523 { 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; 1502 1534 /* @todo: Implement Resource Data Handling */ 1503 1535 drprintf((__FUNCTION__ ": WARNING: Implement Resource Data Handling\n")); 1504 1536 } 1505 1537 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 } 1521 1555 dfprintf(("<== "__FUNCTION__ ", status(0x%x), context(0x%x)\n", Status, hAdapter)); 1522 1556 … … 1610 1644 pAllocInfo->SurfDesc.bpp = vboxWddmCalcBitsPerPixel(pAllocInfo->SurfDesc.format); 1611 1645 pAllocInfo->SurfDesc.pitch = vboxWddmCalcPitch(pGetStandardAllocationDriverData->pCreateSharedPrimarySurfaceData->Width, pAllocInfo->SurfDesc.bpp); 1646 pAllocInfo->SurfDesc.cbSize = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height; 1612 1647 pAllocInfo->SurfDesc.depth = 0; 1613 1648 pAllocInfo->SurfDesc.slicePitch = 0; … … 1641 1676 pAllocInfo->SurfDesc.bpp = vboxWddmCalcBitsPerPixel(pAllocInfo->SurfDesc.format); 1642 1677 pAllocInfo->SurfDesc.pitch = vboxWddmCalcPitch(pGetStandardAllocationDriverData->pCreateShadowSurfaceData->Width, pAllocInfo->SurfDesc.bpp); 1678 pAllocInfo->SurfDesc.cbSize = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height; 1643 1679 pAllocInfo->SurfDesc.depth = 0; 1644 1680 pAllocInfo->SurfDesc.slicePitch = 0; … … 1672 1708 pAllocInfo->SurfDesc.bpp = vboxWddmCalcBitsPerPixel(pAllocInfo->SurfDesc.format); 1673 1709 pAllocInfo->SurfDesc.pitch = vboxWddmCalcPitch(pGetStandardAllocationDriverData->pCreateStagingSurfaceData->Width, pAllocInfo->SurfDesc.bpp); 1710 pAllocInfo->SurfDesc.cbSize = pAllocInfo->SurfDesc.pitch * pAllocInfo->SurfDesc.height; 1674 1711 pAllocInfo->SurfDesc.depth = 0; 1675 1712 pAllocInfo->SurfDesc.slicePitch = 0;
Note:
See TracChangeset
for help on using the changeset viewer.