VirtualBox

Ignore:
Timestamp:
Nov 29, 2023 5:49:56 PM (14 months ago)
Author:
vboxsync
Message:

WDDM: user mode driver update: bugref:10529

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDX.h

    r102295 r102383  
    6464
    6565    bool f3D;
     66
     67    uint32_t fVBoxCaps;
    6668
    6769    VBOXWDDM_QAI AdapterInfo;
     
    753755void vboxDXGetVideoProcessorRateConversionCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
    754756                                               D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
     757void vboxDXGetVideoProcessorCustomRate(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     758                                       UINT CustomRateIndex, D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);
    755759void vboxDXGetVideoProcessorFilterRange(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
    756760                                        D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter, D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDI.cpp

    r102253 r102383  
    119119    pAdapter->f3D = true;
    120120
     121    pAdapter->fVBoxCaps = pHWInfo->u.svga.au32Caps[SVGA3D_DEVCAP_3D];
     122
    121123    *ppAdapter = pAdapter;
    122124
     
    39583960        AssertReturn(ParamSize >= sizeof(D3D11_1DDI_VIDEO_INPUT), E_INVALIDARG);
    39593961
    3960 #if 0
    3961         D3D11_1DDI_VIDEO_INPUT *pVideoInput = (D3D11_1DDI_VIDEO_INPUT *)pParams;
    3962         return ddi11_1RetrieveVideoFunctions(pDevice, pVideoInput);
    3963 #else
    3964         RT_NOREF(pDevice, pParams);
    3965 #endif
     3962        if (pDevice->pAdapter->fVBoxCaps & VBSVGA3D_CAP_VIDEO)
     3963        {
     3964            D3D11_1DDI_VIDEO_INPUT *pVideoInput = (D3D11_1DDI_VIDEO_INPUT *)pParams;
     3965            return ddi11_1RetrieveVideoFunctions(pDevice, pVideoInput);
     3966        }
     3967        return E_FAIL;
    39663968    }
    39673969
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp

    r102295 r102383  
    312312    D3D10DDI_HDEVICE hDevice,
    313313    D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum,
     314    UINT RateConversionIndex,
    314315    UINT CustomRateIndex,
    315     UINT RateConversionIndex,
    316316    D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate)
    317317{
    318318    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    319319    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
    320     DEBUG_BREAKPOINT_TEST();
    321 
    322     RT_NOREF(pDevice, pVideoProcessorEnum, CustomRateIndex, RateConversionIndex);
    323     RT_ZERO(*pRate); /* Not supported. */
     320    //DEBUG_BREAKPOINT_TEST();
     321
     322    RT_NOREF(RateConversionIndex); /* One capability. */
     323    vboxDXGetVideoProcessorCustomRate(pDevice, pVideoProcessorEnum, CustomRateIndex, pRate);
    324324}
    325325
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXVideo.cpp

    r102295 r102383  
    471471    pCaps->ConversionCaps  = pInfo->RateCaps.ProcessorCaps;
    472472    pCaps->ITelecineCaps   = pInfo->RateCaps.ITelecineCaps;
    473     pCaps->CustomRateCount = 0;
     473    pCaps->CustomRateCount = RT_MIN(pInfo->RateCaps.CustomRateCount, VBSVGA3D_MAX_VIDEO_CUSTOM_RATE_CAPS);;
     474}
     475
     476
     477void vboxDXGetVideoProcessorCustomRate(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     478                                       UINT CustomRateIndex, D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate)
     479{
     480    if (memcmp(&pVideoProcessorEnum->svga.desc,
     481               &pDevice->VideoDevice.videoProcessorEnum.desc, sizeof(pVideoProcessorEnum->svga.desc)) != 0)
     482        vboxDXQueryVideoProcessorEnumInfo(pDevice, pVideoProcessorEnum->svga.desc);
     483
     484    VBSVGA3dVideoProcessorEnumInfo const *pInfo = &pDevice->VideoDevice.videoProcessorEnum.info;
     485    VBSVGA3dVideoProcessorCustomRateCaps const *pCustomRateCaps = &pInfo->aCustomRateCaps[CustomRateIndex];
     486    pRate->CustomRate.Numerator   = pCustomRateCaps->CustomRate.numerator;
     487    pRate->CustomRate.Denominator = pCustomRateCaps->CustomRate.denominator;
     488    pRate->OutputFrames           = pCustomRateCaps->OutputFrames;
     489    pRate->InputInterlaced        = RT_BOOL(pCustomRateCaps->InputInterlaced);
     490    pRate->InputFramesOrFields    = pCustomRateCaps->InputFramesOrFields;
    474491}
    475492
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