MCPcopy Create free account
hub / github.com/Aleksoid1978/VideoRenderer / UpdateConvertColorShader

Method UpdateConvertColorShader

Source/DX11VideoProcessor.cpp:2942–3004  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2940}
2941
2942HRESULT CDX11VideoProcessor::UpdateConvertColorShader()
2943{
2944 m_pPSConvertColor.Release();
2945 m_pPSConvertColorDeint.Release();
2946 ID3DBlob* pShaderCode = nullptr;
2947
2948 int convertType = (m_bConvertToSdr && !(m_bHdrPassthroughSupport && (m_bHdrPassthrough || m_bHdrLocalToneMapping))) ? SHADER_CONVERT_TO_SDR
2949 : (m_bHdrPassthroughSupport && (m_bHdrPassthrough || m_bHdrLocalToneMapping) && m_srcExFmt.VideoTransferFunction == MFVideoTransFunc_HLG) ? SHADER_CONVERT_TO_PQ
2950 : SHADER_CONVERT_NONE;
2951
2952 MediaSideDataDOVIMetadata* pDOVIMetadata = m_Dovi.bValid ? &m_Dovi.msd : nullptr;
2953
2954 HRESULT hr = GetShaderConvertColor(true,
2955 m_srcWidth,
2956 m_TexSrcVideo.desc.Width, m_TexSrcVideo.desc.Height,
2957 m_srcRect, m_srcParams, m_srcExFmt, pDOVIMetadata,
2958 m_iChromaScaling, convertType, false,
2959 &pShaderCode);
2960 if (S_OK == hr) {
2961 hr = m_pDevice->CreatePixelShader(pShaderCode->GetBufferPointer(), pShaderCode->GetBufferSize(), nullptr, &m_pPSConvertColor);
2962 pShaderCode->Release();
2963 }
2964
2965 if (m_bInterlaced && m_srcParams.Subsampling == 420 && m_srcParams.pDX11Planes) {
2966 hr = GetShaderConvertColor(true,
2967 m_srcWidth,
2968 m_TexSrcVideo.desc.Width, m_TexSrcVideo.desc.Height,
2969 m_srcRect, m_srcParams, m_srcExFmt, pDOVIMetadata,
2970 m_iChromaScaling, convertType, true,
2971 &pShaderCode);
2972 if (S_OK == hr) {
2973 hr = m_pDevice->CreatePixelShader(pShaderCode->GetBufferPointer(), pShaderCode->GetBufferSize(), nullptr, &m_pPSConvertColorDeint);
2974 pShaderCode->Release();
2975 }
2976 }
2977
2978 if (FAILED(hr)) {
2979 ASSERT(0);
2980 UINT resid = 0;
2981 if (m_srcParams.cformat == CF_YUY2) {
2982 resid = IDF_PS_11_CONVERT_YUY2;
2983 }
2984 else if (m_srcParams.pDX11Planes) {
2985 if (m_srcParams.pDX11Planes->FmtPlane3) {
2986 if (m_srcParams.cformat == CF_YV12 || m_srcParams.cformat == CF_YV16 || m_srcParams.cformat == CF_YV24) {
2987 resid = IDF_PS_11_CONVERT_PLANAR_YV;
2988 } else {
2989 resid = IDF_PS_11_CONVERT_PLANAR;
2990 }
2991 } else {
2992 resid = IDF_PS_11_CONVERT_BIPLANAR;
2993 }
2994 }
2995 else {
2996 resid = IDF_PS_11_CONVERT_COLOR;
2997 }
2998 EXECUTE_ASSERT(S_OK == CreatePShaderFromResource(&m_pPSConvertColor, resid));
2999

Callers

nothing calls this directly

Calls 2

GetShaderConvertColorFunction · 0.85
ReleaseMethod · 0.45

Tested by

no test coverage detected