VirtualBox

Changeset 102295 in vbox for trunk


Ignore:
Timestamp:
Nov 24, 2023 1:45:12 PM (15 months ago)
Author:
vboxsync
Message:

WDDM: user mode driver update: bugref:10529

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

Legend:

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

    r102253 r102295  
    399399    struct {
    400400        VBSVGA3dVideoProcessorDesc desc;
    401         uint32 RateConversionCapsIndex;
    402401    } svga;
    403402    struct {
     
    424423    } StereoMode;
    425424
    426     VBOXDXVIDEOPROCESSORSTREAM aStreams[2];
     425    VBOXDXVIDEOPROCESSORSTREAM aStreams[VBSVGA3D_MAX_VIDEO_STREAMS];
    427426} VBOXDXVIDEOPROCESSOR, *PVBOXDXVIDEOPROCESSOR;
    428427
     
    431430{
    432431    D3D11_1DDI_HRTVIDEOPROCESSORENUM hRTVideoProcessorEnum;
    433     D3D11_1DDI_VIDEO_PROCESSOR_CONTENT_DESC Desc;
     432
     433    struct {
     434        VBSVGA3dVideoProcessorDesc desc;
     435    } svga;
    434436} VBOXDXVIDEOPROCESSORENUM, *PVBOXDXVIDEOPROCESSORENUM;
    435437
     
    614616            VBSVGA3dDecodeConfigInfo *pConfigInfo;
    615617        } config;
     618
     619        struct
     620        {
     621            VBSVGA3dVideoProcessorDesc desc;                /* Info has been queried for this desc; */
     622            VBSVGA3dVideoProcessorEnumInfo info;            /* Last queried info. */
     623        } videoProcessorEnum;
    616624    } VideoDevice;
    617625} VBOXDX_DEVICE, *PVBOXDX_DEVICE;
     
    737745void vboxDXGetVideoDecoderConfig(PVBOXDX_DEVICE pDevice, D3D11_1DDI_VIDEO_DECODER_DESC const *pDecodeDesc, UINT Index,
    738746                                 D3D11_1DDI_VIDEO_DECODER_CONFIG *pConfig);
     747HRESULT vboxDXCreateVideoProcessorEnum(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     748                                       D3D11_1DDI_VIDEO_PROCESSOR_CONTENT_DESC const *Desc);
     749void vboxDXCheckVideoProcessorFormat(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     750                                     DXGI_FORMAT Format, UINT *pSupported);
     751void vboxDXGetVideoProcessorCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     752                                 D3D11_1DDI_VIDEO_PROCESSOR_CAPS *pCaps);
     753void vboxDXGetVideoProcessorRateConversionCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     754                                               D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
     755void vboxDXGetVideoProcessorFilterRange(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     756                                        D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter, D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange);
    739757HRESULT vboxDXCreateVideoProcessor(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor,
    740758                                   PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, UINT RateConversionCapsIndex);
     
    778796void vboxDXVideoProcessorSetStreamAlpha(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex,
    779797                                        BOOL Enable, FLOAT Alpha);
     798void vboxDXVideoProcessorSetStreamPalette(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex,
     799                                          UINT Count, UINT const *pEntries);
    780800void vboxDXVideoProcessorSetStreamPixelAspectRatio(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex,
    781801                                                   BOOL Enable, DXGI_RATIONAL const *pSourceRatio, DXGI_RATIONAL const *pDestRatio);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXCmd.cpp

    r102145 r102295  
    15471547int vgpu10DefineVideoProcessor(PVBOXDX_DEVICE pDevice,
    15481548                               uint32 videoProcessorId,
    1549                                VBSVGA3dVideoProcessorDesc const &desc,
    1550                                uint32 RateConversionCapsIndex)
     1549                               VBSVGA3dVideoProcessorDesc const &desc)
    15511550{
    15521551    void *pvCmd = vboxDXCommandBufferReserve(pDevice, VBSVGA_3D_CMD_DX_DEFINE_VIDEO_PROCESSOR,
     
    15581557    SET_CMD_FIELD(videoProcessorId);
    15591558    SET_CMD_FIELD(desc);
    1560     SET_CMD_FIELD(RateConversionCapsIndex);
    15611559
    15621560    vboxDXCommandBufferCommit(pDevice);
     
    20762074    SET_CMD_FIELD(enable);
    20772075    SET_CMD_FIELD(alpha);
     2076
     2077    vboxDXCommandBufferCommit(pDevice);
     2078    return VINF_SUCCESS;
     2079}
     2080
     2081
     2082int vgpu10VideoProcessorSetStreamPalette(PVBOXDX_DEVICE pDevice,
     2083                                         VBSVGA3dVideoProcessorId videoProcessorId,
     2084                                         uint32 streamIndex,
     2085                                         UINT Count,
     2086                                         UINT const *pEntries)
     2087{
     2088    void *pvCmd = vboxDXCommandBufferReserve(pDevice, VBSVGA_3D_CMD_DX_VIDEO_PROCESSOR_SET_STREAM_PALETTE,
     2089                                             sizeof(VBSVGA3dCmdDXVideoProcessorSetStreamPalette) + Count * sizeof(uint32), 0);
     2090    if (!pvCmd)
     2091        return VERR_NO_MEMORY;
     2092
     2093    VBSVGA3dCmdDXVideoProcessorSetStreamPalette *cmd = (VBSVGA3dCmdDXVideoProcessorSetStreamPalette *)pvCmd;
     2094    SET_CMD_FIELD(videoProcessorId);
     2095    SET_CMD_FIELD(streamIndex);
     2096    if (Count > 0)
     2097    {
     2098        uint32 *p = (uint32 *)&cmd[1];
     2099        memcpy(p, pEntries, Count * sizeof(uint32));
     2100    }
    20782101
    20792102    vboxDXCommandBufferCommit(pDevice);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXCmd.h

    r102145 r102295  
    327327int vgpu10DefineVideoProcessor(PVBOXDX_DEVICE pDevice,
    328328                               uint32 uVideoProcessorId,
    329                                VBSVGA3dVideoProcessorDesc const &desc,
    330                                uint32 RateConversionCapsIndex);
     329                               VBSVGA3dVideoProcessorDesc const &desc);
    331330int vgpu10DefineVideoDecoderOutputView(PVBOXDX_DEVICE pDevice,
    332331                                       VBSVGA3dVideoDecoderOutputViewId videoDecoderOutputViewId,
     
    425424                                       BOOL enable,
    426425                                       float alpha);
     426int vgpu10VideoProcessorSetStreamPalette(PVBOXDX_DEVICE pDevice,
     427                                         VBSVGA3dVideoProcessorId videoProcessorId,
     428                                         uint32 streamIndex,
     429                                         UINT Count,
     430                                         UINT const *pEntries);
    427431int vgpu10VideoProcessorSetStreamPixelAspectRatio(PVBOXDX_DEVICE pDevice,
    428432                                                  VBSVGA3dVideoProcessorId videoProcessorId,
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp

    r102137 r102295  
    9696}
    9797
    98 /* There are no corresponding D3D11 host API so return the hardcoded information bout buffers.
     98/* There are no corresponding D3D11 host API so return the hardcoded information about buffers.
    9999 *
    100100 * D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO::Usage has to be D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY,
     
    179179{
    180180    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    181     DEBUG_BREAKPOINT_TEST();
     181    //DEBUG_BREAKPOINT_TEST();
    182182    RT_NOREF(pDevice, hDecoder, pExtension);
    183     return S_OK;
     183    return E_INVALIDARG; /* Not supported. */
    184184}
    185185
     
    249249    D3D11_1DDI_HRTVIDEOPROCESSORENUM hRTVideoProcessorEnum)
    250250{
    251     /* HOST CONFIG */
    252251    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    253252    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hVideoProcessorEnum.pDrvPrivate;
    254253    //DEBUG_BREAKPOINT_TEST();
     254
     255    RT_ZERO(*pVideoProcessorEnum);
     256    pVideoProcessorEnum->hRTVideoProcessorEnum = hRTVideoProcessorEnum;
     257    return vboxDXCreateVideoProcessorEnum(pDevice, pVideoProcessorEnum, &pCreateData->Desc);
     258}
     259
     260static VOID APIENTRY ddi11_1DestroyVideoProcessorEnum(
     261    D3D10DDI_HDEVICE hDevice,
     262    D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum)
     263{
     264    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     265    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
     266    //DEBUG_BREAKPOINT_TEST();
     267
    255268    RT_NOREF(pDevice);
    256269    RT_ZERO(*pVideoProcessorEnum);
    257     pVideoProcessorEnum->hRTVideoProcessorEnum = hRTVideoProcessorEnum;
    258     pVideoProcessorEnum->Desc = pCreateData->Desc;
    259     return S_OK;
    260 }
    261 
    262 static VOID APIENTRY ddi11_1DestroyVideoProcessorEnum(
    263     D3D10DDI_HDEVICE hDevice,
    264     D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum)
    265 {
    266     /* HOST CONFIG */
    267     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    268     PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
    269     //DEBUG_BREAKPOINT_TEST();
    270     RT_ZERO(*pVideoProcessorEnum);
    271     RT_NOREF(pDevice);
    272     return;
    273270}
    274271
     
    279276    UINT *pSupported)
    280277{
    281     /* HOST CONFIG */
    282     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    283     //DEBUG_BREAKPOINT_TEST();
    284     RT_NOREF(pDevice, hVideoProcessorEnum, Format);
    285     if (   Format == DXGI_FORMAT_NV12
    286         || Format == DXGI_FORMAT_B8G8R8A8_UNORM)
    287         *pSupported = D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT
    288                     | D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT;
    289     else
    290         *pSupported = 0;
    291     return;
     278    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     279    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hVideoProcessorEnum.pDrvPrivate;
     280    //DEBUG_BREAKPOINT_TEST();
     281
     282    vboxDXCheckVideoProcessorFormat(pDevice, pVideoProcessorEnum, Format, pSupported);
    292283}
    293284
     
    297288    D3D11_1DDI_VIDEO_PROCESSOR_CAPS *pCaps)
    298289{
    299     /* HOST CONFIG */
    300290    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    301291    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
    302292    //DEBUG_BREAKPOINT_TEST();
    303     RT_NOREF(pDevice, pVideoProcessorEnum);
    304     RT_ZERO(*pCaps);
    305     pCaps->DeviceCaps = D3D11_1DDI_VIDEO_PROCESSOR_DEVICE_CAPS_LINEAR_SPACE
    306                       | D3D11_1DDI_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC
    307                       | D3D11_1DDI_VIDEO_PROCESSOR_DEVICE_CAPS_RGB_RANGE_CONVERSION
    308                       | D3D11_1DDI_VIDEO_PROCESSOR_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION
    309                       | D3D11_1DDI_VIDEO_PROCESSOR_DEVICE_CAPS_NOMINAL_RANGE;
    310     pCaps->FeatureCaps = D3D11_1DDI_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL
    311                        | D3D11_1DDI_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION
    312                        | D3D11_1DDI_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY;
    313     pCaps->FilterCaps = D3D11_1DDI_VIDEO_PROCESSOR_FILTER_CAPS_BRIGHTNESS
    314                       | D3D11_1DDI_VIDEO_PROCESSOR_FILTER_CAPS_CONTRAST
    315                       | D3D11_1DDI_VIDEO_PROCESSOR_FILTER_CAPS_HUE
    316                       | D3D11_1DDI_VIDEO_PROCESSOR_FILTER_CAPS_SATURATION;
    317     pCaps->InputFormatCaps = D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_INTERLACED
    318                            | D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_PROCAMP
    319                            | D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY;
    320     pCaps->AutoStreamCaps = 0;
    321     pCaps->StereoCaps = 0;
    322     pCaps->RateConversionCapsCount = 1;
    323     pCaps->MaxInputStreams = 2;
    324     pCaps->MaxStreamStates = 2;
    325     return;
     293
     294    vboxDXGetVideoProcessorCaps(pDevice, pVideoProcessorEnum, pCaps);
    326295}
    327296
     
    332301    D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps)
    333302{
    334     /* HOST CONFIG */
    335     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    336     //DEBUG_BREAKPOINT_TEST();
    337     RT_NOREF(pDevice, hProcessorEnum, RateConversionIndex);
    338     RT_ZERO(*pCaps);
    339     pCaps->PastFrames = 2;
    340     pCaps->FutureFrames = 2;
    341     pCaps->ConversionCaps = D3D11_1DDI_VIDEO_PROCESSOR_CONVERSION_CAPS_DEINTERLACE_BLEND
    342                           | D3D11_1DDI_VIDEO_PROCESSOR_CONVERSION_CAPS_DEINTERLACE_BOB
    343                           | D3D11_1DDI_VIDEO_PROCESSOR_CONVERSION_CAPS_DEINTERLACE_ADAPTIVE
    344                           | D3D11_1DDI_VIDEO_PROCESSOR_CONVERSION_CAPS_DEINTERLACE_MOTION_COMPENSATION
    345                           | D3D11_1DDI_VIDEO_PROCESSOR_CONVERSION_CAPS_INVERSE_TELECINE
    346                           | D3D11_1DDI_VIDEO_PROCESSOR_CONVERSION_CAPS_FRAME_RATE_CONVERSION;
    347     pCaps->ITelecineCaps = D3D11_1DDI_VIDEO_PROCESSOR_ITELECINE_CAPS_32
    348                          | D3D11_1DDI_VIDEO_PROCESSOR_ITELECINE_CAPS_22
    349                          | D3D11_1DDI_VIDEO_PROCESSOR_ITELECINE_CAPS_2224
    350                          | D3D11_1DDI_VIDEO_PROCESSOR_ITELECINE_CAPS_2332;
    351     pCaps->CustomRateCount  = 0;
    352     return;
     303    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     304    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
     305    //DEBUG_BREAKPOINT_TEST();
     306
     307    RT_NOREF(RateConversionIndex); /* One capability. */
     308    vboxDXGetVideoProcessorRateConversionCaps(pDevice, pVideoProcessorEnum, pCaps);
    353309}
    354310
     
    361317{
    362318    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    363     DEBUG_BREAKPOINT_TEST();
    364     RT_NOREF(pDevice, hProcessorEnum, CustomRateIndex, RateConversionIndex, pRate);
    365     return;
     319    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
     320    DEBUG_BREAKPOINT_TEST();
     321
     322    RT_NOREF(pDevice, pVideoProcessorEnum, CustomRateIndex, RateConversionIndex);
     323    RT_ZERO(*pRate); /* Not supported. */
    366324}
    367325
     
    372330    D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange)
    373331{
    374     /* HOST CONFIG */
    375     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    376     //DEBUG_BREAKPOINT_TEST();
    377     RT_NOREF(pDevice, hProcessorEnum, Filter);
    378     pFilterRange->Minimum = 0;
    379     pFilterRange->Maximum = 100;
    380     pFilterRange->Default = 50;
    381     pFilterRange->Multiplier = 0.01f;
    382     return;
     332    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     333    PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
     334    //DEBUG_BREAKPOINT_TEST();
     335
     336    vboxDXGetVideoProcessorFilterRange(pDevice, pVideoProcessorEnum, Filter, pFilterRange);
    383337}
    384338
     
    613567{
    614568    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    615     DEBUG_BREAKPOINT_TEST();
    616     RT_NOREF(pDevice, hVideoProcessor, StreamIndex, Count, pEntries);
    617     return;
     569    PVBOXDXVIDEOPROCESSOR pVideoProcessor = (PVBOXDXVIDEOPROCESSOR)hVideoProcessor.pDrvPrivate;
     570    //DEBUG_BREAKPOINT_TEST();
     571
     572    vboxDXVideoProcessorSetStreamPalette(pDevice, pVideoProcessor, StreamIndex, Count, pEntries);
    618573}
    619574
     
    720675    //DEBUG_BREAKPOINT_TEST();
    721676    RT_NOREF(pDevice, hVideoProcessor, StreamIndex, pGuid, DataSize, pData);
    722     return S_OK;
     677    return E_INVALIDARG; /* Not supported. */
    723678}
    724679
     
    732687{
    733688    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    734     DEBUG_BREAKPOINT_TEST();
     689    //DEBUG_BREAKPOINT_TEST();
    735690    RT_NOREF(pDevice, hVideoProcessor, StreamIndex, pGuid, DataSize, pData);
    736     return S_OK;
     691    return E_INVALIDARG; /* Not supported. */
    737692}
    738693
     
    873828{
    874829    PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
    875     //DEBUG_BREAKPOINT_TEST();
    876     RT_NOREF(pDevice, hView, hResource);
    877     return;
     830    PVBOXDX_RESOURCE pResource = (PVBOXDX_RESOURCE)hResource.pDrvPrivate;
     831    PVBOXDXVIDEOPROCESSORINPUTVIEW pVideoProcessorInputView = (PVBOXDXVIDEOPROCESSORINPUTVIEW)hView.pDrvPrivate;
     832    //DEBUG_BREAKPOINT_TEST();
     833
     834    RT_NOREF(pDevice, pVideoProcessorInputView, pResource);
    878835}
    879836
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXVideo.cpp

    r102137 r102295  
    275275
    276276
     277static void vboxDXQueryVideoProcessorEnumInfo(PVBOXDX_DEVICE pDevice, VBSVGA3dVideoProcessorDesc const &desc)
     278{
     279    void *pvDataOut = 0;
     280    uint32_t cbDataOut = 0;
     281    vboxDXQueryVideoCapability(pDevice, VBSVGA3D_VIDEO_CAPABILITY_PROCESSOR_ENUM,
     282                               &desc, sizeof(desc), &pvDataOut, &cbDataOut);
     283    if (pvDataOut)
     284    {
     285        AssertReturnVoidStmt(cbDataOut >= sizeof(VBSVGA3dProcessorEnumInfo), RTMemFree(pvDataOut));
     286
     287        VBSVGA3dProcessorEnumInfo *pInfo = (VBSVGA3dProcessorEnumInfo *)pvDataOut;
     288        pDevice->VideoDevice.videoProcessorEnum.desc = desc;
     289        pDevice->VideoDevice.videoProcessorEnum.info = pInfo->info;
     290
     291        RTMemFree(pvDataOut);
     292    }
     293}
     294
     295
    277296void vboxDXGetVideoDecoderProfileCount(PVBOXDX_DEVICE pDevice, UINT *pDecodeProfileCount)
    278297{
     
    305324            switch (Format)
    306325            {
    307                 case DXGI_FORMAT_AYUV: *pSupported = s->fAYUV; break;
    308                 case DXGI_FORMAT_NV12: *pSupported = s->fNV12; break;
    309                 case DXGI_FORMAT_420_OPAQUE: *pSupported = s->f420_OPAQUE; break;
     326                case DXGI_FORMAT_AYUV: *pSupported = RT_BOOL(s->fAYUV); break;
     327                case DXGI_FORMAT_NV12: *pSupported = RT_BOOL(s->fNV12); break;
     328                case DXGI_FORMAT_420_OPAQUE: *pSupported = RT_BOOL(s->fNV12); break;
     329                case DXGI_FORMAT_YUY2: *pSupported = RT_BOOL(s->fYUY2); break;
    310330                default:  *pSupported = false;
    311331            }
     
    371391
    372392
     393HRESULT vboxDXCreateVideoProcessorEnum(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     394                                       D3D11_1DDI_VIDEO_PROCESSOR_CONTENT_DESC const *pDesc)
     395{
     396    RT_NOREF(pDevice);
     397
     398    pVideoProcessorEnum->svga.desc.InputFrameFormat = pDesc->InputFrameFormat;
     399    pVideoProcessorEnum->svga.desc.InputFrameRate.numerator = pDesc->InputFrameRate.Numerator;
     400    pVideoProcessorEnum->svga.desc.InputFrameRate.denominator = pDesc->InputFrameRate.Denominator;
     401    pVideoProcessorEnum->svga.desc.InputWidth       = pDesc->InputWidth;
     402    pVideoProcessorEnum->svga.desc.InputHeight      = pDesc->InputHeight;
     403    pVideoProcessorEnum->svga.desc.OutputFrameRate.numerator = pDesc->OutputFrameRate.Numerator;
     404    pVideoProcessorEnum->svga.desc.OutputFrameRate.denominator = pDesc->OutputFrameRate.Denominator;
     405    pVideoProcessorEnum->svga.desc.OutputWidth      = pDesc->OutputWidth;
     406    pVideoProcessorEnum->svga.desc.OutputHeight     = pDesc->OutputHeight;
     407    pVideoProcessorEnum->svga.desc.Usage            = pDesc->Usage;
     408    return S_OK;
     409}
     410
     411
     412void vboxDXCheckVideoProcessorFormat(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     413                                     DXGI_FORMAT Format, UINT *pSupported)
     414{
     415    if (memcmp(&pVideoProcessorEnum->svga.desc,
     416               &pDevice->VideoDevice.videoProcessorEnum.desc, sizeof(pVideoProcessorEnum->svga.desc)) != 0)
     417        vboxDXQueryVideoProcessorEnumInfo(pDevice, pVideoProcessorEnum->svga.desc);
     418
     419    AssertCompile(D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT == VBSVGA3D_VP_FORMAT_SUPPORT_INPUT);
     420    AssertCompile(D3D11_1DDI_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT == VBSVGA3D_VP_FORMAT_SUPPORT_OUTPUT);
     421    VBSVGA3dVideoProcessorEnumInfo const *pInfo = &pDevice->VideoDevice.videoProcessorEnum.info;
     422    switch (Format)
     423    {
     424        case DXGI_FORMAT_R8_UNORM:            *pSupported = pInfo->fR8_UNORM; break;
     425        case DXGI_FORMAT_R16_UNORM:           *pSupported = pInfo->fR16_UNORM; break;
     426        case DXGI_FORMAT_NV12:                *pSupported = pInfo->fNV12; break;
     427        case DXGI_FORMAT_YUY2:                *pSupported = pInfo->fYUY2; break;
     428        case DXGI_FORMAT_R16G16B16A16_FLOAT:  *pSupported = pInfo->fR16G16B16A16_FLOAT; break;
     429        case DXGI_FORMAT_B8G8R8X8_UNORM:      *pSupported = pInfo->fB8G8R8X8_UNORM; break;
     430        case DXGI_FORMAT_B8G8R8A8_UNORM:      *pSupported = pInfo->fB8G8R8A8_UNORM; break;
     431        case DXGI_FORMAT_R8G8B8A8_UNORM:      *pSupported = pInfo->fR8G8B8A8_UNORM; break;
     432        case DXGI_FORMAT_R10G10B10A2_UNORM:   *pSupported = pInfo->fR10G10B10A2_UNORM; break;
     433        case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: *pSupported = pInfo->fR10G10B10_XR_BIAS_A2_UNORM; break;
     434        case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: *pSupported = pInfo->fR8G8B8A8_UNORM_SRGB; break;
     435        case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: *pSupported = pInfo->fB8G8R8A8_UNORM_SRGB; break;
     436        default:  *pSupported = 0;
     437    }
     438}
     439
     440
     441void vboxDXGetVideoProcessorCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     442                                 D3D11_1DDI_VIDEO_PROCESSOR_CAPS *pCaps)
     443{
     444    if (memcmp(&pVideoProcessorEnum->svga.desc,
     445               &pDevice->VideoDevice.videoProcessorEnum.desc, sizeof(pVideoProcessorEnum->svga.desc)) != 0)
     446        vboxDXQueryVideoProcessorEnumInfo(pDevice, pVideoProcessorEnum->svga.desc);
     447
     448    VBSVGA3dVideoProcessorEnumInfo const *pInfo = &pDevice->VideoDevice.videoProcessorEnum.info;
     449    pCaps->DeviceCaps              = pInfo->Caps.DeviceCaps;
     450    pCaps->FeatureCaps             = pInfo->Caps.FeatureCaps;
     451    pCaps->FilterCaps              = pInfo->Caps.FilterCaps;
     452    pCaps->InputFormatCaps         = pInfo->Caps.InputFormatCaps;
     453    pCaps->AutoStreamCaps          = pInfo->Caps.AutoStreamCaps;
     454    pCaps->StereoCaps              = pInfo->Caps.StereoCaps;
     455    pCaps->RateConversionCapsCount = RT_MIN(pInfo->Caps.RateConversionCapsCount, VBSVGA3D_MAX_VIDEO_RATE_CONVERSION_CAPS);
     456    pCaps->MaxInputStreams         = RT_MIN(pInfo->Caps.MaxInputStreams, VBSVGA3D_MAX_VIDEO_STREAMS);
     457    pCaps->MaxStreamStates         = RT_MIN(pInfo->Caps.MaxStreamStates, VBSVGA3D_MAX_VIDEO_STREAMS);
     458}
     459
     460
     461void vboxDXGetVideoProcessorRateConversionCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     462                                               D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps)
     463{
     464    if (memcmp(&pVideoProcessorEnum->svga.desc,
     465               &pDevice->VideoDevice.videoProcessorEnum.desc, sizeof(pVideoProcessorEnum->svga.desc)) != 0)
     466        vboxDXQueryVideoProcessorEnumInfo(pDevice, pVideoProcessorEnum->svga.desc);
     467
     468    VBSVGA3dVideoProcessorEnumInfo const *pInfo = &pDevice->VideoDevice.videoProcessorEnum.info;
     469    pCaps->PastFrames      = pInfo->RateCaps.PastFrames;
     470    pCaps->FutureFrames    = pInfo->RateCaps.FutureFrames;
     471    pCaps->ConversionCaps  = pInfo->RateCaps.ProcessorCaps;
     472    pCaps->ITelecineCaps   = pInfo->RateCaps.ITelecineCaps;
     473    pCaps->CustomRateCount = 0;
     474}
     475
     476
     477void vboxDXGetVideoProcessorFilterRange(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
     478                                        D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter, D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange)
     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    pFilterRange->Minimum = pInfo->aFilterRange[Filter].Minimum;
     486    pFilterRange->Maximum = pInfo->aFilterRange[Filter].Maximum;
     487    pFilterRange->Default = pInfo->aFilterRange[Filter].Default;
     488    pFilterRange->Multiplier = pInfo->aFilterRange[Filter].Multiplier;
     489}
     490
     491
    373492HRESULT vboxDXCreateVideoProcessor(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor,
    374493                                   PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, UINT RateConversionCapsIndex)
    375494{
    376     /// @todo Compare with a value from config.
    377     AssertReturnStmt(RateConversionCapsIndex <= 0, vboxDXDeviceSetError(pDevice, E_INVALIDARG), E_INVALIDARG);
     495    AssertReturnStmt(RateConversionCapsIndex < VBSVGA3D_MAX_VIDEO_RATE_CONVERSION_CAPS, vboxDXDeviceSetError(pDevice, E_INVALIDARG), E_INVALIDARG);
    378496
    379497    int rc = RTHandleTableAlloc(pDevice->hHTVideoProcessor, pVideoProcessor, &pVideoProcessor->uVideoProcessorId);
    380498    AssertRCReturnStmt(rc, vboxDXDeviceSetError(pDevice, E_OUTOFMEMORY), E_OUTOFMEMORY);
    381499
    382     pVideoProcessor->svga.desc.InputFrameFormat = pVideoProcessorEnum->Desc.InputFrameFormat;
    383     pVideoProcessor->svga.desc.InputFrameRate.numerator = pVideoProcessorEnum->Desc.InputFrameRate.Numerator;
    384     pVideoProcessor->svga.desc.InputFrameRate.denominator = pVideoProcessorEnum->Desc.InputFrameRate.Denominator;
    385     pVideoProcessor->svga.desc.InputWidth       = pVideoProcessorEnum->Desc.InputWidth;
    386     pVideoProcessor->svga.desc.InputHeight      = pVideoProcessorEnum->Desc.InputHeight;
    387     pVideoProcessor->svga.desc.OutputFrameRate.numerator = pVideoProcessorEnum->Desc.OutputFrameRate.Numerator;
    388     pVideoProcessor->svga.desc.OutputFrameRate.denominator = pVideoProcessorEnum->Desc.OutputFrameRate.Denominator;
    389     pVideoProcessor->svga.desc.OutputWidth      = pVideoProcessorEnum->Desc.OutputWidth;
    390     pVideoProcessor->svga.desc.OutputHeight     = pVideoProcessorEnum->Desc.OutputHeight;
    391     pVideoProcessor->svga.desc.Usage            = pVideoProcessorEnum->Desc.Usage;
    392 
    393     pVideoProcessor->svga.RateConversionCapsIndex = RateConversionCapsIndex;
     500    pVideoProcessor->svga.desc = pVideoProcessorEnum->svga.desc;
    394501
    395502    vgpu10DefineVideoProcessor(pDevice, pVideoProcessor->uVideoProcessorId,
    396                                pVideoProcessor->svga.desc, pVideoProcessor->svga.RateConversionCapsIndex);
     503                               pVideoProcessor->svga.desc);
    397504    return S_OK;
    398505}
     
    489596
    490597        VBSVGA3dVideoDecoderBufferDesc *d = &paBD[i];
    491         d->sidBuffer      = SVGA3D_INVALID_ID;;
     598        d->sidBuffer      = SVGA3D_INVALID_ID;
    492599        switch(s->BufferType)
    493600        {
     
    544651
    545652    pVideoProcessorInputView->pResource = pResource;
    546 
    547     pVideoProcessorInputView->svga.ContentDesc.InputFrameFormat = pVideoProcessorEnum->Desc.InputFrameFormat;
    548     pVideoProcessorInputView->svga.ContentDesc.InputFrameRate.numerator = pVideoProcessorEnum->Desc.InputFrameRate.Numerator;
    549     pVideoProcessorInputView->svga.ContentDesc.InputFrameRate.denominator = pVideoProcessorEnum->Desc.InputFrameRate.Denominator;
    550     pVideoProcessorInputView->svga.ContentDesc.InputWidth       = pVideoProcessorEnum->Desc.InputWidth;
    551     pVideoProcessorInputView->svga.ContentDesc.InputHeight      = pVideoProcessorEnum->Desc.InputHeight;
    552     pVideoProcessorInputView->svga.ContentDesc.OutputFrameRate.numerator = pVideoProcessorEnum->Desc.OutputFrameRate.Numerator;
    553     pVideoProcessorInputView->svga.ContentDesc.OutputFrameRate.denominator = pVideoProcessorEnum->Desc.OutputFrameRate.Denominator;
    554     pVideoProcessorInputView->svga.ContentDesc.OutputWidth      = pVideoProcessorEnum->Desc.OutputWidth;
    555     pVideoProcessorInputView->svga.ContentDesc.OutputHeight     = pVideoProcessorEnum->Desc.OutputHeight;
    556     pVideoProcessorInputView->svga.ContentDesc.Usage            = pVideoProcessorEnum->Desc.Usage;
     653    pVideoProcessorInputView->svga.ContentDesc = pVideoProcessorEnum->svga.desc;
    557654
    558655    VBSVGA3dVPIVDesc *pDesc= &pVideoProcessorInputView->svga.VPIVDesc;
     
    581678
    582679    pVideoProcessorOutputView->pResource = pResource;
    583 
    584     VBSVGA3dVideoProcessorDesc *pContentDesc  = &pVideoProcessorOutputView->svga.ContentDesc;
    585     pContentDesc->InputFrameFormat            = pVideoProcessorEnum->Desc.InputFrameFormat;
    586     pContentDesc->InputFrameRate.numerator    = pVideoProcessorEnum->Desc.InputFrameRate.Numerator;
    587     pContentDesc->InputFrameRate.denominator  = pVideoProcessorEnum->Desc.InputFrameRate.Denominator;
    588     pContentDesc->InputWidth                  = pVideoProcessorEnum->Desc.InputWidth;
    589     pContentDesc->InputHeight                 = pVideoProcessorEnum->Desc.InputHeight;
    590     pContentDesc->OutputFrameRate.numerator   = pVideoProcessorEnum->Desc.OutputFrameRate.Numerator;
    591     pContentDesc->OutputFrameRate.denominator = pVideoProcessorEnum->Desc.OutputFrameRate.Denominator;
    592     pContentDesc->OutputWidth                 = pVideoProcessorEnum->Desc.OutputWidth;
    593     pContentDesc->OutputHeight                = pVideoProcessorEnum->Desc.OutputHeight;
    594     pContentDesc->Usage                       = pVideoProcessorEnum->Desc.Usage;
     680    pVideoProcessorOutputView->svga.ContentDesc = pVideoProcessorEnum->svga.desc;
    595681
    596682    VBSVGA3dVPOVDesc *pDesc= &pVideoProcessorOutputView->svga.VPOVDesc;
     
    611697    vgpu10DefineVideoProcessorOutputView(pDevice, pVideoProcessorOutputView->uVideoProcessorOutputViewId,
    612698                                         vboxDXGetAllocation(pVideoProcessorOutputView->pResource),
    613                                          *pContentDesc, *pDesc);
     699                                         pVideoProcessorOutputView->svga.ContentDesc, *pDesc);
    614700
    615701    pVideoProcessorOutputView->fDefined = true;
     
    864950
    865951
     952void vboxDXVideoProcessorSetStreamPalette(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex,
     953                                          UINT Count, UINT const *pEntries)
     954{
     955    vgpu10VideoProcessorSetStreamPalette(pDevice, pVideoProcessor->uVideoProcessorId, StreamIndex,
     956                                         RT_MIN(Count, VBSVGA3D_MAX_VIDEO_PALETTE_ENTRIES), pEntries);
     957}
     958
     959
    866960void vboxDXVideoProcessorSetStreamPixelAspectRatio(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex,
    867961                                                   BOOL Enable, DXGI_RATIONAL const *pSourceRatio, DXGI_RATIONAL const *pDestRatio)
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