@@ -144,40 +144,52 @@ HRESULT m_IDirect3D9::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType, HWND hFo
144144 << " , ppReturnedDeviceInterface = " << ppReturnedDeviceInterface
145145 << ' )' << " ..." ;
146146
147- if (pPresentationParameters == nullptr )
147+ if (pPresentationParameters == nullptr || ppReturnedDeviceInterface == nullptr )
148148 {
149149 return D3DERR_INVALIDCALL;
150150 }
151151
152- if ((BehaviorFlags & D3DCREATE_ADAPTERGROUP_DEVICE) != 0 )
152+ if (EnableCustomShaders )
153153 {
154- Logging::Log () << " Adapter group devices are unsupported." ;
155- return D3DERR_NOTAVAILABLE;
156- }
154+ if ((BehaviorFlags & D3DCREATE_ADAPTERGROUP_DEVICE) != 0 )
155+ {
156+ Logging::Log () << " Adapter group devices are unsupported." ;
157+ return D3DERR_NOTAVAILABLE;
158+ }
157159
158- D3DPRESENT_PARAMETERS pp = *pPresentationParameters;
160+ D3DPRESENT_PARAMETERS pp = *pPresentationParameters;
159161
160- const bool use_software_rendering = (BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) != 0 ;
161- if (use_software_rendering)
162- {
163- Logging::Log () << " > Replacing 'D3DCREATE_SOFTWARE_VERTEXPROCESSING' flag with 'D3DCREATE_MIXED_VERTEXPROCESSING' to allow for hardware rendering ..." ;
164- BehaviorFlags = (BehaviorFlags & ~D3DCREATE_SOFTWARE_VERTEXPROCESSING) | D3DCREATE_MIXED_VERTEXPROCESSING;
165- }
162+ const bool use_software_rendering = (BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) != 0 ;
163+ if (use_software_rendering)
164+ {
165+ Logging::Log () << " > Replacing 'D3DCREATE_SOFTWARE_VERTEXPROCESSING' flag with 'D3DCREATE_MIXED_VERTEXPROCESSING' to allow for hardware rendering ..." ;
166+ BehaviorFlags = (BehaviorFlags & ~D3DCREATE_SOFTWARE_VERTEXPROCESSING) | D3DCREATE_MIXED_VERTEXPROCESSING;
167+ }
166168
167- const HRESULT hr = ProxyInterface->CreateDevice (Adapter, DeviceType, hFocusWindow, BehaviorFlags, &pp, ppReturnedDeviceInterface);
168- // Update output values (see https://docs.microsoft.com/windows/win32/api/d3d9/nf-d3d9-idirect3d9-createdevice)
169- pPresentationParameters->BackBufferWidth = pp.BackBufferWidth ;
170- pPresentationParameters->BackBufferHeight = pp.BackBufferHeight ;
171- pPresentationParameters->BackBufferFormat = pp.BackBufferFormat ;
172- pPresentationParameters->BackBufferCount = pp.BackBufferCount ;
169+ const HRESULT hr = ProxyInterface->CreateDevice (Adapter, DeviceType, hFocusWindow, BehaviorFlags, &pp, ppReturnedDeviceInterface);
170+ // Update output values (see https://docs.microsoft.com/windows/win32/api/d3d9/nf-d3d9-idirect3d9-createdevice)
171+ pPresentationParameters->BackBufferWidth = pp.BackBufferWidth ;
172+ pPresentationParameters->BackBufferHeight = pp.BackBufferHeight ;
173+ pPresentationParameters->BackBufferFormat = pp.BackBufferFormat ;
174+ pPresentationParameters->BackBufferCount = pp.BackBufferCount ;
175+
176+ if (FAILED (hr))
177+ {
178+ Logging::Log () << " IDirect3D9::CreateDevice" << " failed with error code " << (D3DERR)hr << ' !' ;
179+ return hr;
180+ }
181+
182+ init_runtime_d3d (*ppReturnedDeviceInterface, DeviceType, pp, use_software_rendering);
173183
174- if (FAILED (hr))
175- {
176- Logging::Log () << " IDirect3D9::CreateDevice" << " failed with error code " << (D3DERR)hr << ' !' ;
177184 return hr;
178185 }
179186
180- init_runtime_d3d (*ppReturnedDeviceInterface, DeviceType, pp, use_software_rendering);
187+ const HRESULT hr = ProxyInterface->CreateDevice (Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
188+
189+ if (SUCCEEDED (hr))
190+ {
191+ *ppReturnedDeviceInterface = new m_IDirect3DDevice9 (*ppReturnedDeviceInterface, false );
192+ }
181193
182194 return hr;
183195}
0 commit comments