On Wednesday 09 December 2009 08:44:20 Keith Whitwell wrote:
> On Wed, 2009-12-09 at 04:41 -0800, michal wrote:
> > Zack Rusin pisze:
> > > Hi,
> > >
> > > currently Gallium3d shaders predefine all their inputs/outputs. We've
> > > handled all inputs/outputs the same way. e.g.
> > > VERT
> > > DCL IN[0]
> > > DCL OUT[0], POSITION
> > > DCL OUT[1], COLOR
> > > DCL CONST[0..9]
> > > DCL TEMP[0..3]
> > > or
> > > FRAG
> > > DCL IN[0], COLOR, LINEAR
> > > DCL OUT[0], COLOR
> > >
> > > There are certain inputs/output which don't really follow the typical
> > > rules for inputs/outputs though and we've been imitating those with
> > > extra normal semantics (e.g. front face).
> > >
> > > It all falls apart a bit on anything with shader model 4.x and up.
> > > That's because in there we've got what Microsoft calls system-value
> > > semantics. (
> > > http://msdn.microsoft.com/en-us/library/ee418355(VS.85).aspx#System_Val
> > >ue ). They all represent system-generated inputs/outputs for shaders.
> > > And while so far we only really had to handle front-face since shader
> > > model 4.x we have to deal with lots of them (geometry shaders, domain
> > > shaders, computer shaders... they all have system generated
> > > inputs/outputs)
> > >
> > > I'm thinking of adding something similar to what D3D does to Gallium3d.
> > > So just adding a new DCL type, e.g. DCL_SV which takes the vector name
> > > and the system-value semantic as its inputs, so
> > > FRAG
> > > DCL IN[0], COLOR, LINEAR
> > > DCL IN[1], COLOR[1], LINEAR
> > > DCL IN[2], FACE, CONSTANT
> > > would become
> > > FRAG
> > > DCL IN[0], COLOR, LINEAR
> > > DCL IN[1], COLOR[1], LINEAR
> > > DCL_SV IN[2], FACE
> > >
> > > It likely could be done in a more generic fashion though. Opinions?
> >
> > Zack,
> >
> > What would be the difference between
> >
> > DCL IN[2], FACE, CONSTANT
> >
> > and
> >
> > DCL_SV IN[2], FACE
> >
> > then? Maybe the example is bad, but I don't see what DCL_SV would give
> > us the existing DCL doesn't.
> 
> I'd have proposed something slightly different where the SV values don't
> land in the INPUT file but some new register file.
> 
> The reason is that when we start looking at geometry shaders, the INPUT
> register file becomes two-dimensional, but these SV values remain
> single-dimensional.  That means that for current TGSI we'd have stuff
> like:
> 
> DCL IN[0..3][0] POSITION
> DCL IN[0..3][1] COLOR
> DCL IN[2] SOME_SYSTEM_VALUE
> 
> Which is pretty nasty - half of the input file is one dimensional, half
> two-dimensional, and you need to look at the index of the first
> dimension to figure out whether the input reg is legal or not.
> 
> So, I'm think some new register file to handle these system-generated
> values is one possiblility, as in:
> 
> DCL SV[0], FACE
> 
> or
> 
> DCL SV[1],  PRIMITIVE_ID
> 
> Thoughts?

Yea, I like that.

And then separate syntax to handle the properties or overloading DCL? i.e.
DCL GS_INFO  PRIM_IN TRIANGLES
vs
PROPERTY GS_INFO PRIM_IN TRIANGLES
?

------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to