mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2025-07-01 07:15:27 +00:00
Add handling for AV1 High profile in D3D11VA/DXVA2
This doesn't seem to be supported by FFmpeg or any actual hardware yet
This commit is contained in:
parent
e25919e0f9
commit
f138827cdf
@ -989,6 +989,10 @@ bool D3D11VARenderer::checkDecoderSupport(IDXGIAdapter* adapter)
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H264_HIGH8_444:
|
||||
// Unsupported by DXVA
|
||||
return false;
|
||||
|
||||
case VIDEO_FORMAT_H265:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_HEVC_VLD_MAIN, DXGI_FORMAT_NV12, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
@ -1015,32 +1019,6 @@ bool D3D11VARenderer::checkDecoderSupport(IDXGIAdapter* adapter)
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_MAIN8:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_NV12, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 decoding");
|
||||
return false;
|
||||
}
|
||||
else if (!supported) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 decoding to NV12 format");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_MAIN10:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_P010, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 Main10 decoding");
|
||||
return false;
|
||||
}
|
||||
else if (!supported) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 Main10 decoding to P010 format");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H265_REXT8_444:
|
||||
if (adapterDesc.VendorId != 0x8086) {
|
||||
// This custom D3D11VA profile is only supported on Intel GPUs
|
||||
@ -1075,6 +1053,58 @@ bool D3D11VARenderer::checkDecoderSupport(IDXGIAdapter* adapter)
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_MAIN8:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_NV12, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 decoding");
|
||||
return false;
|
||||
}
|
||||
else if (!supported) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 decoding to NV12 format");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_MAIN10:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_P010, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 Main 10-bit decoding");
|
||||
return false;
|
||||
}
|
||||
else if (!supported) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 Main 10-bit decoding to P010 format");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_HIGH8_444:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE1, DXGI_FORMAT_AYUV, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 High 444 8-bit decoding");
|
||||
return false;
|
||||
}
|
||||
else if (!supported) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 High 444 8-bit decoding to AYUV format");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_HIGH10_444:
|
||||
if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE1, DXGI_FORMAT_Y410, &supported))) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 High 444 10-bit decoding");
|
||||
return false;
|
||||
}
|
||||
else if (!supported) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GPU doesn't support AV1 High 444 10-bit decoding to Y410 format");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SDL_assert(false);
|
||||
return false;
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
DEFINE_GUID(DXVADDI_Intel_ModeH264_E, 0x604F8E68,0x4951,0x4C54,0x88,0xFE,0xAB,0xD2,0x5C,0x15,0xB3,0xD6);
|
||||
DEFINE_GUID(DXVA2_ModeAV1_VLD_Profile0,0xb8be4ccb,0xcf53,0x46ba,0x8d,0x59,0xd6,0xb8,0xa6,0xda,0x5d,0x2a);
|
||||
DEFINE_GUID(DXVA2_ModeAV1_VLD_Profile1,0x6936ff0f,0x45b1,0x4163,0x9c,0xc1,0x64,0x6e,0xf6,0x94,0x61,0x08);
|
||||
|
||||
// This was incorrectly removed from public headers in FFmpeg 7.0
|
||||
#ifndef FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO
|
||||
@ -203,6 +204,12 @@ bool DXVA2Renderer::initializeDecoder()
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (m_VideoFormat == VIDEO_FORMAT_AV1_HIGH8_444 || m_VideoFormat == VIDEO_FORMAT_AV1_HIGH10_444) {
|
||||
if (IsEqualGUID(guids[i], DXVA2_ModeAV1_VLD_Profile1)) {
|
||||
chosenDeviceGuid = guids[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CoTaskMemFree(guids);
|
||||
|
Loading…
x
Reference in New Issue
Block a user