http://bugs.winehq.org/show_bug.cgi?id=8051
--- Comment #101 from Robert Wm Ruedisueli esd45@earthlink.net 2010-07-14 20:48:52 --- I was thinking about this bug and came up with two solutions.
One, we could utilize a modified version of libmesa to handle creating vertex shaders.
Second, probably better is the following psuedocode to multiplex the hardware capability to produce vertex shaders:
If vertex shaders necessary are under number of supported do not multiplex, and use full hardware. Else multiplexing is neccessary routine as follows:
Load all shaders into virtual driver.
Whenever shaders change do as follows or are given modifications do the following loop. |----------| Load supported number of vertex shaders from buffer into video memory. Do any hardware based modifications necessary while loaded in video driver Copy image of loaded vertex shaders into pixel-based shaders. Unload and save vertex shaders into storage. Keep the pixel-based shaders in video driver buffer for use instead of vertex shaders. repeat loop until all modifications are processed. |----------|
The quality of the produced images should be based on the stored OpenGL settings. If such a routine is not stored, it should use texture settings used for other pixel shaders on the program.
When rendering of those vertex shaders is called for, simply translate the calls to use the pixel shader renderings of the vertex shaders.
This is probably the fastest, and most efficient method I can think of, as it doesn't have to reload the vertex shaders unless they are changed.
If someone has the skill to translate this pseudo-code onto an actual programming language for a patch, it would be appreciated.