| 905 | } |
| 906 | |
| 907 | void CDX11VideoProcessor::SetHDR10ShaderParams(float masteringMinLuminanceNits, float masteringMaxLuminanceNits, |
| 908 | float maxCLL, float maxFALL, |
| 909 | float displayMaxNits, int toneMappingType) |
| 910 | { |
| 911 | if (masteringMinLuminanceNits <= 0.f) masteringMinLuminanceNits = 0.f; |
| 912 | if (masteringMaxLuminanceNits <= 10.f) masteringMaxLuminanceNits = 1000.f; |
| 913 | if (maxCLL <= 10.f) maxCLL = masteringMaxLuminanceNits; |
| 914 | if (maxFALL <= 1.f) maxFALL = maxCLL; |
| 915 | if (displayMaxNits < 100.f || displayMaxNits > 10000.f) displayMaxNits = 1000.f; |
| 916 | if (toneMappingType < 1 || toneMappingType > 6) toneMappingType = 1; |
| 917 | |
| 918 | const HDRParamsConstantBuffer_t cbuffer = { |
| 919 | masteringMinLuminanceNits, masteringMaxLuminanceNits, |
| 920 | maxCLL, maxFALL, |
| 921 | displayMaxNits, static_cast<UINT>(toneMappingType) |
| 922 | }; |
| 923 | |
| 924 | if (!m_pPSHDR10ToneMapping) { |
| 925 | EXECUTE_ASSERT(S_OK == CreatePShaderFromResource(&m_pPSHDR10ToneMapping, IDF_PS_11_HDR10_TONEMAP)); |
| 926 | DLogIf(m_pPSHDR10ToneMapping, L"CDX11VideoProcessor::SetHDR10ShaderParams() : m_pPSHDR10ToneMapping({}) created", m_iHdrLocalToneMappingType); |
| 927 | |
| 928 | UpdatePostScaleTexures(); |
| 929 | } |
| 930 | |
| 931 | if (m_pHDR10ToneMappingConstants) { |
| 932 | if (memcmp(&m_lastHDRParamsConstantBuffer, &cbuffer, sizeof(cbuffer)) == 0) { |
| 933 | return; |
| 934 | } |
| 935 | |
| 936 | m_pDeviceContext->UpdateSubresource(m_pHDR10ToneMappingConstants, 0, nullptr, &cbuffer, 0, 0); |
| 937 | } else { |
| 938 | D3D11_BUFFER_DESC BufferDesc = { |
| 939 | .ByteWidth = sizeof(cbuffer), |
| 940 | .Usage = D3D11_USAGE_DEFAULT, |
| 941 | .BindFlags = D3D11_BIND_CONSTANT_BUFFER, |
| 942 | }; |
| 943 | D3D11_SUBRESOURCE_DATA InitData = { &cbuffer, 0, 0 }; |
| 944 | HRESULT result = m_pDevice->CreateBuffer(&BufferDesc, &InitData, &m_pHDR10ToneMappingConstants); |
| 945 | if (FAILED(result)) { |
| 946 | DLog(L"SetHDR10ShaderLuminanceParams() failed to create m_pHDR10ToneMappingConstants. Error: {}", result); |
| 947 | } |
| 948 | EXECUTE_ASSERT(S_OK == result); |
| 949 | } |
| 950 | |
| 951 | m_lastHDRParamsConstantBuffer = cbuffer; |
| 952 | } |
| 953 | |
| 954 | void CDX11VideoProcessor::SetDolbyVisionDynamicParams() |
| 955 | { |