wined3d: Another GLSL shader status update

H. Verbeet hverbeet at
Sun Jun 4 14:34:39 CDT 2006

On 04/06/06, Ivan Gyurdiev <ivg2 at> wrote:
> Well, it seems to store a bit more than that. If I create pshaders A,B,
> and vshaders C,D, and do:
> set_pixel(A); set_vertex(C);
> draw_stuff();
> set_pixel(B); set_vertex(D);
> draw_stuff();
> set_pixel(NULL), set_vertex(NULL)
> Won't this create...5 different programs, all kept in memory for the
> entire lifetime of the program, while we only need 2 [1 active]?
> (A, NULL), (A,C), (B,C), (B,D), (NULL, D)
I think it should be possible to change the code in such a way that
the programs are only created once they're actually used.

> Also, is it necessary to store link pair info in both shaders - isn't
> this redundant somehow?
Well, yes. When a shader is released, the programs it's linked to
should be destroyed.
However, it's probably not neccesary to point to the other shader. We
could probably just link to a program struct that contains the program
id and a list of linked shaders. It doubt it will make much of a
difference wrt amount of memory used though, at least not as long as
there are only two shaders involved. On the other hand, for d3d10
we'll also need geometry / primitive shaders.

More information about the wine-devel mailing list