| 952 | } |
| 953 | |
| 954 | void CDX11VideoProcessor::SetDolbyVisionDynamicParams() |
| 955 | { |
| 956 | const DoViDynamicConstantsBuffer_t cbuffer = { |
| 957 | m_DoviExtensionMetadata.L2.trim_chroma_weight - 0.5f, m_DoviExtensionMetadata.L2.trim_saturation_gain - 0.5f, |
| 958 | m_DoviExtensionMetadata.L2.trim_slope + 0.5f, m_DoviExtensionMetadata.L2.trim_offset - 0.5f, m_DoviExtensionMetadata.L2.trim_power + 0.5f, |
| 959 | static_cast<UINT>(m_DoviExtensionMetadata.L2.present) |
| 960 | }; |
| 961 | |
| 962 | if (m_pDoViDynamicConstants) { |
| 963 | if (memcmp(&m_lastDoViDynamicConstantsBuffer, &cbuffer, sizeof(cbuffer)) == 0) { |
| 964 | return; |
| 965 | } |
| 966 | |
| 967 | m_pDeviceContext->UpdateSubresource(m_pDoViDynamicConstants, 0, nullptr, &cbuffer, 0, 0); |
| 968 | } else { |
| 969 | D3D11_BUFFER_DESC BufferDesc = { |
| 970 | .ByteWidth = sizeof(cbuffer), |
| 971 | .Usage = D3D11_USAGE_DEFAULT, |
| 972 | .BindFlags = D3D11_BIND_CONSTANT_BUFFER, |
| 973 | }; |
| 974 | D3D11_SUBRESOURCE_DATA InitData = { &cbuffer, 0, 0 }; |
| 975 | HRESULT result = m_pDevice->CreateBuffer(&BufferDesc, &InitData, &m_pDoViDynamicConstants); |
| 976 | if (FAILED(result)) |
| 977 | { |
| 978 | DLog(L"SetDolbyVisionDynamicParams() failed to create m_pDoViDynamicConstants. Error: {}", result); |
| 979 | } |
| 980 | EXECUTE_ASSERT(S_OK == result); |
| 981 | } |
| 982 | |
| 983 | m_lastDoViDynamicConstantsBuffer = cbuffer; |
| 984 | |
| 985 | #ifndef NDEBUG |
| 986 | UpdateStatsStatic(); |
| 987 | #endif |
| 988 | } |
| 989 | |
| 990 | HRESULT CDX11VideoProcessor::SetShaderDoviCurvesPoly() |
| 991 | { |