Index: trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDX.h
===================================================================
--- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDX.h	(revision 102299)
+++ trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDX.h	(revision 102383)
@@ -64,4 +64,6 @@
 
     bool f3D;
+
+    uint32_t fVBoxCaps;
 
     VBOXWDDM_QAI AdapterInfo;
@@ -753,4 +755,6 @@
 void vboxDXGetVideoProcessorRateConversionCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
                                                D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+void vboxDXGetVideoProcessorCustomRate(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
+                                       UINT CustomRateIndex, D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);
 void vboxDXGetVideoProcessorFilterRange(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
                                         D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter, D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange);
Index: trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDI.cpp
===================================================================
--- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDI.cpp	(revision 102299)
+++ trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDI.cpp	(revision 102383)
@@ -119,4 +119,6 @@
     pAdapter->f3D = true;
 
+    pAdapter->fVBoxCaps = pHWInfo->u.svga.au32Caps[SVGA3D_DEVCAP_3D];
+
     *ppAdapter = pAdapter;
 
@@ -3958,10 +3960,10 @@
         AssertReturn(ParamSize >= sizeof(D3D11_1DDI_VIDEO_INPUT), E_INVALIDARG);
 
-#if 0
-        D3D11_1DDI_VIDEO_INPUT *pVideoInput = (D3D11_1DDI_VIDEO_INPUT *)pParams;
-        return ddi11_1RetrieveVideoFunctions(pDevice, pVideoInput);
-#else
-        RT_NOREF(pDevice, pParams);
-#endif
+        if (pDevice->pAdapter->fVBoxCaps & VBSVGA3D_CAP_VIDEO)
+        {
+            D3D11_1DDI_VIDEO_INPUT *pVideoInput = (D3D11_1DDI_VIDEO_INPUT *)pParams;
+            return ddi11_1RetrieveVideoFunctions(pDevice, pVideoInput);
+        }
+        return E_FAIL;
     }
 
Index: trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp
===================================================================
--- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp	(revision 102299)
+++ trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp	(revision 102383)
@@ -312,14 +312,14 @@
     D3D10DDI_HDEVICE hDevice,
     D3D11_1DDI_HVIDEOPROCESSORENUM hProcessorEnum,
+    UINT RateConversionIndex,
     UINT CustomRateIndex,
-    UINT RateConversionIndex,
     D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate)
 {
     PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate;
     PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate;
-    DEBUG_BREAKPOINT_TEST();
-
-    RT_NOREF(pDevice, pVideoProcessorEnum, CustomRateIndex, RateConversionIndex);
-    RT_ZERO(*pRate); /* Not supported. */
+    //DEBUG_BREAKPOINT_TEST();
+
+    RT_NOREF(RateConversionIndex); /* One capability. */
+    vboxDXGetVideoProcessorCustomRate(pDevice, pVideoProcessorEnum, CustomRateIndex, pRate);
 }
 
Index: trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXVideo.cpp
===================================================================
--- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXVideo.cpp	(revision 102299)
+++ trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXVideo.cpp	(revision 102383)
@@ -471,5 +471,22 @@
     pCaps->ConversionCaps  = pInfo->RateCaps.ProcessorCaps;
     pCaps->ITelecineCaps   = pInfo->RateCaps.ITelecineCaps;
-    pCaps->CustomRateCount = 0;
+    pCaps->CustomRateCount = RT_MIN(pInfo->RateCaps.CustomRateCount, VBSVGA3D_MAX_VIDEO_CUSTOM_RATE_CAPS);;
+}
+
+
+void vboxDXGetVideoProcessorCustomRate(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum,
+                                       UINT CustomRateIndex, D3D11_1DDI_VIDEO_PROCESSOR_CUSTOM_RATE *pRate)
+{
+    if (memcmp(&pVideoProcessorEnum->svga.desc,
+               &pDevice->VideoDevice.videoProcessorEnum.desc, sizeof(pVideoProcessorEnum->svga.desc)) != 0)
+        vboxDXQueryVideoProcessorEnumInfo(pDevice, pVideoProcessorEnum->svga.desc);
+
+    VBSVGA3dVideoProcessorEnumInfo const *pInfo = &pDevice->VideoDevice.videoProcessorEnum.info;
+    VBSVGA3dVideoProcessorCustomRateCaps const *pCustomRateCaps = &pInfo->aCustomRateCaps[CustomRateIndex];
+    pRate->CustomRate.Numerator   = pCustomRateCaps->CustomRate.numerator;
+    pRate->CustomRate.Denominator = pCustomRateCaps->CustomRate.denominator;
+    pRate->OutputFrames           = pCustomRateCaps->OutputFrames;
+    pRate->InputInterlaced        = RT_BOOL(pCustomRateCaps->InputInterlaced);
+    pRate->InputFramesOrFields    = pCustomRateCaps->InputFramesOrFields;
 }
 
