On 25.04.2013 09:59, Henri Verbeet wrote:
-static HRESULT shader_arb_alloc(struct wined3d_device *device, const struct
fragment_pipeline *fragment_pipe)
+static HRESULT shader_arb_alloc(struct wined3d_device *device, const struct
wined3d_vertex_pipe_ops *vertex_pipe,
+ const struct fragment_pipeline *fragment_pipe)
{
struct shader_arb_priv *priv = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, sizeof(*priv));
struct fragment_caps fragment_caps;
- void *fragment_priv;
+ void *vertex_priv, *fragment_priv;
+
+ if (!(vertex_priv = vertex_pipe->vp_alloc(&arb_program_shader_backend,
priv)))
+ {
+ ERR("Failed to initialize vertex pipe.\n");
+ HeapFree(GetProcessHeap(), 0, priv);
+ return E_FAIL;
+ }
if (!(fragment_priv =
fragment_pipe->alloc_private(&arb_program_shader_backend, priv)))
{
ERR("Failed to initialize fragment pipe.\n");
+ fragment_pipe->free_private(device);
Shouldn't that vertex_pipe->vp_free(device)?
HeapFree(GetProcessHeap(), 0, priv);
return E_FAIL;
}