wined3d: Alloc / free shader private data and blt stuff in Init3D/Uninit3D.
This commit is contained in:
parent
ac57b4e2f5
commit
28fdebe404
|
@ -173,8 +173,6 @@ static ULONG WINAPI IWineD3DDeviceImpl_Release(IWineD3DDevice *iface) {
|
|||
GL_EXTCALL(glDeleteFramebuffersEXT(1, &This->dst_fbo));
|
||||
}
|
||||
|
||||
This->shader_backend->shader_free_private(iface);
|
||||
|
||||
if (This->glsl_program_lookup) hash_table_destroy(This->glsl_program_lookup);
|
||||
|
||||
/* TODO: Clean up all the surfaces and textures! */
|
||||
|
@ -2084,6 +2082,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Init3D(IWineD3DDevice *iface, WINED3DPR
|
|||
IWineD3DSurface_AddRef(This->stencilBufferTarget);
|
||||
}
|
||||
|
||||
hr = This->shader_backend->shader_alloc_private(iface);
|
||||
if(FAILED(hr)) {
|
||||
TRACE("Shader private data couldn't be allocated\n");
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
/* Set up some starting GL setup */
|
||||
ENTER_GL();
|
||||
|
||||
|
@ -2147,6 +2151,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Init3D(IWineD3DDevice *iface, WINED3DPR
|
|||
return WINED3D_OK;
|
||||
|
||||
err_out:
|
||||
This->shader_backend->shader_free_private(iface);
|
||||
HeapFree(GetProcessHeap(), 0, This->render_targets);
|
||||
HeapFree(GetProcessHeap(), 0, This->fbo_color_attachments);
|
||||
HeapFree(GetProcessHeap(), 0, This->draw_buffers);
|
||||
|
@ -2212,6 +2217,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface, D3DCB_D
|
|||
IWineD3DDevice_SetTexture(iface, WINED3DVERTEXTEXTURESAMPLER0 + sampler, NULL);
|
||||
}
|
||||
|
||||
/* Destroy the depth blt resources, they will be invalid after the reset. Also free shader
|
||||
* private data, it might contain opengl pointers
|
||||
*/
|
||||
This->shader_backend->shader_destroy_depth_blt(iface);
|
||||
This->shader_backend->shader_free_private(iface);
|
||||
|
||||
/* Release the update stateblock */
|
||||
if(IWineD3DStateBlock_Release((IWineD3DStateBlock *)This->updateStateBlock) > 0){
|
||||
if(This->updateStateBlock != This->stateBlock)
|
||||
|
|
|
@ -3213,12 +3213,7 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
|
|||
object->devType = DeviceType;
|
||||
|
||||
select_shader_mode(&GLINFO_LOCATION, DeviceType, &object->ps_selected_mode, &object->vs_selected_mode);
|
||||
object->shader_backend = select_shader_backend(Adapter, DeviceType); if(FAILED(object->shader_backend->shader_alloc_private((IWineD3DDevice *) object))) {
|
||||
IWineD3D_Release(object->wineD3D);
|
||||
HeapFree(GetProcessHeap(), 0, object);
|
||||
*ppReturnedDeviceInterface = NULL;
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
object->shader_backend = select_shader_backend(Adapter, DeviceType);
|
||||
|
||||
/* Prefer the vtable with functions optimized for single dirtifyable objects if the shader
|
||||
* model can deal with that. It is essentially the same, just with adjusted
|
||||
|
|
Loading…
Reference in New Issue