@@ -93,22 +93,13 @@ HRESULT CatmullRomEffectDrawer::Initialize(
9393 }
9494 }
9595
96- {
97- D3D12_COMPUTE_PIPELINE_STATE_DESC psoDesc = {
98- .pRootSignature = _rootSignature.get (),
99- .CS = CD3DX12_SHADER_BYTECODE (
100- _outputColorSpace == EffectColorSpace::sRGB ? CatmullRomCS_sRGB : CatmullRomCS,
101- _outputColorSpace == EffectColorSpace::sRGB ? sizeof (CatmullRomCS_sRGB) : sizeof (CatmullRomCS)
102- )
103- };
104- HRESULT hr = device->CreateComputePipelineState (&psoDesc, IID_PPV_ARGS (&_pipelineState));
105- if (FAILED (hr)) {
106- Logger::Get ().ComError (" CreateComputePipelineState 失败" , hr);
107- return hr;
108- }
96+ HRESULT hr = _CreatePiplineState ();
97+ if (FAILED (hr)) {
98+ Logger::Get ().ComError (" _CreatePiplineState 失败" , hr);
99+ return hr;
109100 }
110101
111- _CreateDisplayDependentResources (
102+ _CreateDescriptors (
112103 descriptorCpuHandle, descriptorGpuHandle, descriptorSize, inputResource, outputResource);
113104
114105 return S_OK;
@@ -165,11 +156,11 @@ void CatmullRomEffectDrawer::OnResized(
165156 _inputSize = inputSize;
166157 _outputSize = outputSize;
167158
168- _CreateDisplayDependentResources (
159+ _CreateDescriptors (
169160 descriptorCpuHandle, descriptorGpuHandle, descriptorSize, inputResource, outputResource);
170161}
171162
172- void CatmullRomEffectDrawer::OnColorInfoChanged (
163+ HRESULT CatmullRomEffectDrawer::OnColorInfoChanged (
173164 EffectColorSpace inputColorSpace,
174165 EffectColorSpace outputColorSpace,
175166 CD3DX12_CPU_DESCRIPTOR_HANDLE& descriptorCpuHandle,
@@ -179,16 +170,47 @@ void CatmullRomEffectDrawer::OnColorInfoChanged(
179170 ID3D12Resource* outputResource
180171) noexcept {
181172 if (_inputColorSpace == inputColorSpace && _outputColorSpace == outputColorSpace) {
182- return ;
173+ return S_OK ;
183174 }
175+
184176 _inputColorSpace = inputColorSpace;
185- _outputColorSpace = outputColorSpace;
186177
187- _CreateDisplayDependentResources (
188- descriptorCpuHandle, descriptorGpuHandle, descriptorSize, inputResource, outputResource);
178+ if (_outputColorSpace != outputColorSpace) {
179+ _outputColorSpace = outputColorSpace;
180+
181+ HRESULT hr = _CreatePiplineState ();
182+ if (FAILED (hr)) {
183+ Logger::Get ().ComError (" _CreatePiplineState 失败" , hr);
184+ return hr;
185+ }
186+ }
187+
188+ _CreateDescriptors (descriptorCpuHandle, descriptorGpuHandle,
189+ descriptorSize, inputResource, outputResource);
190+
191+ return S_OK;
192+ }
193+
194+ HRESULT CatmullRomEffectDrawer::_CreatePiplineState () noexcept {
195+ ID3D12Device5* device = _graphicsContext->GetDevice ();
196+
197+ D3D12_COMPUTE_PIPELINE_STATE_DESC psoDesc = {
198+ .pRootSignature = _rootSignature.get (),
199+ .CS = CD3DX12_SHADER_BYTECODE (
200+ _outputColorSpace == EffectColorSpace::sRGB ? CatmullRomCS_sRGB : CatmullRomCS,
201+ _outputColorSpace == EffectColorSpace::sRGB ? sizeof (CatmullRomCS_sRGB) : sizeof (CatmullRomCS)
202+ )
203+ };
204+ HRESULT hr = device->CreateComputePipelineState (&psoDesc, IID_PPV_ARGS (&_pipelineState));
205+ if (FAILED (hr)) {
206+ Logger::Get ().ComError (" CreateComputePipelineState 失败" , hr);
207+ return hr;
208+ }
209+
210+ return S_OK;
189211}
190212
191- void CatmullRomEffectDrawer::_CreateDisplayDependentResources (
213+ void CatmullRomEffectDrawer::_CreateDescriptors (
192214 CD3DX12_CPU_DESCRIPTOR_HANDLE& descriptorCpuHandle,
193215 CD3DX12_GPU_DESCRIPTOR_HANDLE& descriptorGpuHandle,
194216 uint32_t descriptorSize,
0 commit comments