wined3d: Mark vertex shader 3.0 as foggy shaders if they write
out the fog coord
Ivan Gyurdiev
ivg231 at gmail.com
Thu Apr 12 11:38:27 CDT 2007
Fabian Bieler wrote:
> Vertex shaders are marked as 'foggy shaders' in wined3d if they write out the
> fog coord. Previously this was not done for vertex shaders 3.0. This patch
> corrects this problem.
>
Please don't do that - the design is flawed enough as it is (GLSL being
invoked from vertexshader and such..).
The reg_maps was meant to be:
- computed in shader pass 1 [ register tracking ]
- used in shader pass 2 [ code generation ].
Here you're doing this:
- computing reg_maps at the very end of shader pass 2 [ unpack stage ]
- using this right afterwards in the calling function to set yet another
flag (This->usesFog).
I'm not sure what needs to be done instead, since it all looks so broken...
- I would say this type of analysis about shader usage needs to go into
pass 1 (baseshader), since it is backend independent. It's kind of
vertex-shader specific, but we're trying to merge vertex and pixel
shaders, and remove code from these two files, not add more of it.
- The usesFog looks like it's trying to persist information about
register usage after the shader has been compiled for optimization
purposes...except that this information is already persisted - if you
look in baseshader, you will see the entire reg_maps structure is kept
in there, exactly for that purpose [ was done for software shaders
actually, but that never happened ].
- Also, other code outside the shaders should not be accessing these
flags directly - there should be a function which looks inside the
reg_maps, and code from other file should call that function (we are
emulating OOP programming in C, so we should try to use encapsulation).
Ivan
More information about the wine-devel
mailing list