diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index d9e525bb5aa..0dd306f94a3 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -3005,6 +3005,15 @@ static void set_glsl_shader_program(IWineD3DDevice *iface, BOOL use_ps, BOOL use int max_attribs = 16; /* TODO: Will this always be the case? It is at the moment... */ char tmp_name[10]; + reorder_shader_id = generate_param_reorder_function(vshader, pshader, gl_info); + TRACE("Attaching GLSL shader object %u to program %u\n", reorder_shader_id, programId); + GL_EXTCALL(glAttachObjectARB(programId, reorder_shader_id)); + checkGLcall("glAttachObjectARB"); + /* Flag the reorder function for deletion, then it will be freed automatically when the program + * is destroyed + */ + GL_EXTCALL(glDeleteObjectARB(reorder_shader_id)); + TRACE("Attaching GLSL shader object %u to program %u\n", vshader_id, programId); GL_EXTCALL(glAttachObjectARB(programId, vshader_id)); checkGLcall("glAttachObjectARB"); @@ -3027,15 +3036,6 @@ static void set_glsl_shader_program(IWineD3DDevice *iface, BOOL use_ps, BOOL use checkGLcall("glBindAttribLocationARB"); list_add_head(&((IWineD3DBaseShaderImpl *)vshader)->baseShader.linked_programs, &entry->vshader_entry); - - reorder_shader_id = generate_param_reorder_function(vshader, pshader, gl_info); - TRACE("Attaching GLSL shader object %u to program %u\n", reorder_shader_id, programId); - GL_EXTCALL(glAttachObjectARB(programId, reorder_shader_id)); - checkGLcall("glAttachObjectARB"); - /* Flag the reorder function for deletion, then it will be freed automatically when the program - * is destroyed - */ - GL_EXTCALL(glDeleteObjectARB(reorder_shader_id)); } /* Attach GLSL pshader */