- Timestamp:
- Nov 24, 2023 1:45:12 PM (15 months ago)
- 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 399 399 struct { 400 400 VBSVGA3dVideoProcessorDesc desc; 401 uint32 RateConversionCapsIndex;402 401 } svga; 403 402 struct { … … 424 423 } StereoMode; 425 424 426 VBOXDXVIDEOPROCESSORSTREAM aStreams[ 2];425 VBOXDXVIDEOPROCESSORSTREAM aStreams[VBSVGA3D_MAX_VIDEO_STREAMS]; 427 426 } VBOXDXVIDEOPROCESSOR, *PVBOXDXVIDEOPROCESSOR; 428 427 … … 431 430 { 432 431 D3D11_1DDI_HRTVIDEOPROCESSORENUM hRTVideoProcessorEnum; 433 D3D11_1DDI_VIDEO_PROCESSOR_CONTENT_DESC Desc; 432 433 struct { 434 VBSVGA3dVideoProcessorDesc desc; 435 } svga; 434 436 } VBOXDXVIDEOPROCESSORENUM, *PVBOXDXVIDEOPROCESSORENUM; 435 437 … … 614 616 VBSVGA3dDecodeConfigInfo *pConfigInfo; 615 617 } config; 618 619 struct 620 { 621 VBSVGA3dVideoProcessorDesc desc; /* Info has been queried for this desc; */ 622 VBSVGA3dVideoProcessorEnumInfo info; /* Last queried info. */ 623 } videoProcessorEnum; 616 624 } VideoDevice; 617 625 } VBOXDX_DEVICE, *PVBOXDX_DEVICE; … … 737 745 void vboxDXGetVideoDecoderConfig(PVBOXDX_DEVICE pDevice, D3D11_1DDI_VIDEO_DECODER_DESC const *pDecodeDesc, UINT Index, 738 746 D3D11_1DDI_VIDEO_DECODER_CONFIG *pConfig); 747 HRESULT vboxDXCreateVideoProcessorEnum(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, 748 D3D11_1DDI_VIDEO_PROCESSOR_CONTENT_DESC const *Desc); 749 void vboxDXCheckVideoProcessorFormat(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, 750 DXGI_FORMAT Format, UINT *pSupported); 751 void vboxDXGetVideoProcessorCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, 752 D3D11_1DDI_VIDEO_PROCESSOR_CAPS *pCaps); 753 void vboxDXGetVideoProcessorRateConversionCaps(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, 754 D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps); 755 void vboxDXGetVideoProcessorFilterRange(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, 756 D3D11_1DDI_VIDEO_PROCESSOR_FILTER Filter, D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange); 739 757 HRESULT vboxDXCreateVideoProcessor(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, 740 758 PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, UINT RateConversionCapsIndex); … … 778 796 void vboxDXVideoProcessorSetStreamAlpha(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex, 779 797 BOOL Enable, FLOAT Alpha); 798 void vboxDXVideoProcessorSetStreamPalette(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex, 799 UINT Count, UINT const *pEntries); 780 800 void vboxDXVideoProcessorSetStreamPixelAspectRatio(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex, 781 801 BOOL Enable, DXGI_RATIONAL const *pSourceRatio, DXGI_RATIONAL const *pDestRatio); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXCmd.cpp
r102145 r102295 1547 1547 int vgpu10DefineVideoProcessor(PVBOXDX_DEVICE pDevice, 1548 1548 uint32 videoProcessorId, 1549 VBSVGA3dVideoProcessorDesc const &desc, 1550 uint32 RateConversionCapsIndex) 1549 VBSVGA3dVideoProcessorDesc const &desc) 1551 1550 { 1552 1551 void *pvCmd = vboxDXCommandBufferReserve(pDevice, VBSVGA_3D_CMD_DX_DEFINE_VIDEO_PROCESSOR, … … 1558 1557 SET_CMD_FIELD(videoProcessorId); 1559 1558 SET_CMD_FIELD(desc); 1560 SET_CMD_FIELD(RateConversionCapsIndex);1561 1559 1562 1560 vboxDXCommandBufferCommit(pDevice); … … 2076 2074 SET_CMD_FIELD(enable); 2077 2075 SET_CMD_FIELD(alpha); 2076 2077 vboxDXCommandBufferCommit(pDevice); 2078 return VINF_SUCCESS; 2079 } 2080 2081 2082 int 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 } 2078 2101 2079 2102 vboxDXCommandBufferCommit(pDevice); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXCmd.h
r102145 r102295 327 327 int vgpu10DefineVideoProcessor(PVBOXDX_DEVICE pDevice, 328 328 uint32 uVideoProcessorId, 329 VBSVGA3dVideoProcessorDesc const &desc, 330 uint32 RateConversionCapsIndex); 329 VBSVGA3dVideoProcessorDesc const &desc); 331 330 int vgpu10DefineVideoDecoderOutputView(PVBOXDX_DEVICE pDevice, 332 331 VBSVGA3dVideoDecoderOutputViewId videoDecoderOutputViewId, … … 425 424 BOOL enable, 426 425 float alpha); 426 int vgpu10VideoProcessorSetStreamPalette(PVBOXDX_DEVICE pDevice, 427 VBSVGA3dVideoProcessorId videoProcessorId, 428 uint32 streamIndex, 429 UINT Count, 430 UINT const *pEntries); 427 431 int vgpu10VideoProcessorSetStreamPixelAspectRatio(PVBOXDX_DEVICE pDevice, 428 432 VBSVGA3dVideoProcessorId videoProcessorId, -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDIVideo.cpp
r102137 r102295 96 96 } 97 97 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. 99 99 * 100 100 * D3D11_1DDI_VIDEO_DECODER_BUFFER_INFO::Usage has to be D3D11_1DDI_VIDEO_USAGE_OPTIMAL_QUALITY, … … 179 179 { 180 180 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 181 DEBUG_BREAKPOINT_TEST();181 //DEBUG_BREAKPOINT_TEST(); 182 182 RT_NOREF(pDevice, hDecoder, pExtension); 183 return S_OK;183 return E_INVALIDARG; /* Not supported. */ 184 184 } 185 185 … … 249 249 D3D11_1DDI_HRTVIDEOPROCESSORENUM hRTVideoProcessorEnum) 250 250 { 251 /* HOST CONFIG */252 251 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 253 252 PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hVideoProcessorEnum.pDrvPrivate; 254 253 //DEBUG_BREAKPOINT_TEST(); 254 255 RT_ZERO(*pVideoProcessorEnum); 256 pVideoProcessorEnum->hRTVideoProcessorEnum = hRTVideoProcessorEnum; 257 return vboxDXCreateVideoProcessorEnum(pDevice, pVideoProcessorEnum, &pCreateData->Desc); 258 } 259 260 static 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 255 268 RT_NOREF(pDevice); 256 269 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;273 270 } 274 271 … … 279 276 UINT *pSupported) 280 277 { 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); 292 283 } 293 284 … … 297 288 D3D11_1DDI_VIDEO_PROCESSOR_CAPS *pCaps) 298 289 { 299 /* HOST CONFIG */300 290 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 301 291 PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum = (PVBOXDXVIDEOPROCESSORENUM)hProcessorEnum.pDrvPrivate; 302 292 //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); 326 295 } 327 296 … … 332 301 D3D11_1DDI_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps) 333 302 { 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); 353 309 } 354 310 … … 361 317 { 362 318 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. */ 366 324 } 367 325 … … 372 330 D3D11_1DDI_VIDEO_PROCESSOR_FILTER_RANGE *pFilterRange) 373 331 { 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); 383 337 } 384 338 … … 613 567 { 614 568 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); 618 573 } 619 574 … … 720 675 //DEBUG_BREAKPOINT_TEST(); 721 676 RT_NOREF(pDevice, hVideoProcessor, StreamIndex, pGuid, DataSize, pData); 722 return S_OK;677 return E_INVALIDARG; /* Not supported. */ 723 678 } 724 679 … … 732 687 { 733 688 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 734 DEBUG_BREAKPOINT_TEST();689 //DEBUG_BREAKPOINT_TEST(); 735 690 RT_NOREF(pDevice, hVideoProcessor, StreamIndex, pGuid, DataSize, pData); 736 return S_OK;691 return E_INVALIDARG; /* Not supported. */ 737 692 } 738 693 … … 873 828 { 874 829 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); 878 835 } 879 836 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXVideo.cpp
r102137 r102295 275 275 276 276 277 static 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 277 296 void vboxDXGetVideoDecoderProfileCount(PVBOXDX_DEVICE pDevice, UINT *pDecodeProfileCount) 278 297 { … … 305 324 switch (Format) 306 325 { 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; 310 330 default: *pSupported = false; 311 331 } … … 371 391 372 392 393 HRESULT 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 412 void 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 441 void 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 461 void 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 477 void 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 373 492 HRESULT vboxDXCreateVideoProcessor(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, 374 493 PVBOXDXVIDEOPROCESSORENUM pVideoProcessorEnum, UINT RateConversionCapsIndex) 375 494 { 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); 378 496 379 497 int rc = RTHandleTableAlloc(pDevice->hHTVideoProcessor, pVideoProcessor, &pVideoProcessor->uVideoProcessorId); 380 498 AssertRCReturnStmt(rc, vboxDXDeviceSetError(pDevice, E_OUTOFMEMORY), E_OUTOFMEMORY); 381 499 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; 394 501 395 502 vgpu10DefineVideoProcessor(pDevice, pVideoProcessor->uVideoProcessorId, 396 pVideoProcessor->svga.desc , pVideoProcessor->svga.RateConversionCapsIndex);503 pVideoProcessor->svga.desc); 397 504 return S_OK; 398 505 } … … 489 596 490 597 VBSVGA3dVideoDecoderBufferDesc *d = &paBD[i]; 491 d->sidBuffer = SVGA3D_INVALID_ID; ;598 d->sidBuffer = SVGA3D_INVALID_ID; 492 599 switch(s->BufferType) 493 600 { … … 544 651 545 652 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; 557 654 558 655 VBSVGA3dVPIVDesc *pDesc= &pVideoProcessorInputView->svga.VPIVDesc; … … 581 678 582 679 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; 595 681 596 682 VBSVGA3dVPOVDesc *pDesc= &pVideoProcessorOutputView->svga.VPOVDesc; … … 611 697 vgpu10DefineVideoProcessorOutputView(pDevice, pVideoProcessorOutputView->uVideoProcessorOutputViewId, 612 698 vboxDXGetAllocation(pVideoProcessorOutputView->pResource), 613 *pContentDesc, *pDesc);699 pVideoProcessorOutputView->svga.ContentDesc, *pDesc); 614 700 615 701 pVideoProcessorOutputView->fDefined = true; … … 864 950 865 951 952 void 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 866 960 void vboxDXVideoProcessorSetStreamPixelAspectRatio(PVBOXDX_DEVICE pDevice, PVBOXDXVIDEOPROCESSOR pVideoProcessor, UINT StreamIndex, 867 961 BOOL Enable, DXGI_RATIONAL const *pSourceRatio, DXGI_RATIONAL const *pDestRatio)
Note:
See TracChangeset
for help on using the changeset viewer.