Christoph,

This looks good.  Thanks for bringing this back to life.

Keith

On Thu, 2010-12-16 at 07:47 -0800, Christoph Bumiller wrote:
> On 12/14/2010 12:36 PM, Keith Whitwell wrote:
> > On Mon, 2010-12-13 at 12:01 -0800, Christoph Bumiller wrote:
> >> I want to warm this up again adding nvc0 and
> >> GL_ARB_separate_shader_objects to the picture.
> >>
> >> The latter extends GL_EXT_separate_shader_objects to support user
> >> defined varyings and guarantees well defined behaviour only if
> >> - varyings are declared inside the gl_PerVertex/gl_PerFragment block the
> >> blocks match exactly in name, type, qualification, and (most
> >> significantly) declaration order.
> >> - varyings are assigned matching location qualifiers:
> >> like: layout(location = 3) in vec4 normal
> >> "The number of input locations available to a shader is limited."
> >>
> >> So, I propose to (loosely) identify GENERIC semantic indices with these
> >> location qualifiers and let the pipe driver set a limit on the allowed
> >> maximum (e.g PIPE_SHADER_CAP_MAX_INPUTS, and not demand to at least
> >> support 219 of them - nvc0 offsers 0x200 bytes for generic inputs/outputs).
> > 
> > This sounds fine actually.  We kicked this around before & I was
> > basically ok with the last iteration of the proposal, but this seems ok
> > too.
> > 
> > As far as I can tell from a gallium perspective you're really just
> > proposing a new pipe cap _MAX_INPUTS (actually _MAX_GENERIC_INDEX would
> > be clearer), which the state tracker thereafter has to respect?
> > 
> > That would be fine with me.
> First attempt at a patch introducing such a cap attached.
> 
> > 
> >> My motivation is mostly that the hardware routing table for shader
> >> varyings that was present on nv50 has been removed with nvc0 (Fermi).
> >> And I'm glad, because filling 4 routing tables (since we have 5 shader
> >> types now) is somewhat annoying. And so applying relocations to shaders
> >> - it can be done, it's probably not too time consuming, but it's just
> >> plain *unnecessary* (and thus stupid) for OpenGL.
> >>
> >> Now about d3d9 ...
> >> 1. don't care, I don't see a d3d9 state tracker
> >> 2. http://msdn.microsoft.com/en-us/library/bb509647%28v=VS.85%29.aspx
> >> says "n is an optional integer between 0 and the number of resources
> >> supported" - what "supported" means here isn't clear to me, but, I
> >> didn't find any example where someone used something OpenGL doesn't have
> >> (like COLOR2).
> >> 3.
> >> http://msdn.microsoft.com/en-us/library/bb944006%28v=vs.85%29.aspx#Varying_Shader_Inputs_and_Semantics
> >> says "Input semantics are similar to the values in the D3DDECLUSAGE."
> >> and
> >> DECLUSAGE sounds like you're limited to sane values.
> > 
> > I think you're on the right track with (1)...  It's fairly pointless
> > trying to discuss code here which isn't public & I don't think people
> > need to be worrying about what may or may not be important for code they
> > can't see.
> > 
> > I know this idea previously got tied up with speculation about what a
> > DX9 state tracker might or might not require, but in retrospect I wish
> > I'd been able to steer conversation away from that.
> > 
> > The work on closed components may drive a lot of the feature development
> > and new interfaces, but there's usually enough flexibility that this
> > sort of cleanup isn't a big deal.
> > 
> > 
> > Keith
> > 
> >> Not sure if anyone wants to think about this issue at this time (since
> >> implementation of ARB_separate_shader_objects is probably far in the GL4
> >> future), but I'd be happy about any comments.
> >>
> >> Regards,
> >> Christoph
> >>
> >> On 04/13/2010 12:55 PM, Luca Barbieri wrote:
> >>> This patch series is intended to resolve the issue of semantic-based 
> >>> shader linkage in Gallium.
> >>> It can also be found in the RFC-gallium-semantics branch.
> >>>
> >>> It does not change the current Gallium design, but rather formalizes some 
> >>> limitations to it, and provides infrastructure to implement this model 
> >>> more easily in drivers, along with a full nv30/nv40 implementation.
> >>>
> >>> These limitations are added to allow an efficient implementation for both 
> >>> hardware lacking special support and hardware having support but also 
> >>> special constraints.
> >>>
> >>> Note that this does NOT resolve all issues, and there are quite a bit 
> >>> left to future refinement.
> >>>
> >>> In particular, the following issues are still open:
> >>> 1. COLOR clamping (and floating point framebuffers)
> >>> 2. A linkage table CSO allowing to specify non-identity linkage
> >>> 3. BCOLOR/FACE-related issues
> >>> 4. Adding a cap to inform the state tracker that more than 219 generic 
> >>> indices are provided
> >>>
> >>> This topic was already very extensively discussed.
> >>> See 
> >>> http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg10865.html
> >>>  for some early inconclusive discussion around an early implementation 
> >>> that modified the GLSL linker (which is NOT being proposed here)
> >>> See 
> >>> http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg12016.html
> >>>  for some more discussion that seemed to mostly reach a consensus over 
> >>> the approach proposed here.
> >>> See in particular 
> >>> http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg12041.html
> >>>  .
> >>>
> >>> That said, I'm going to try to repeat all information here, partially by 
> >>> copy&pasting from earlier messages.
> >>> This message should probably be adapted into gallium/docs if/when this is 
> >>> accepted.
> >>>
> >>> Here is the short summary; the long rationale follows after it.
> >>>
> >>> The proposal here is to add the following limitations to Gallium, for the 
> >>> intermediate semantics:
> >>> 1. TGSI_SEMANTIC_NORMAL is removed, using a commit by Michal Krol that 
> >>> was never merged
> >>> 2. Every semantic except GENERIC, COLOR and BCOLOR can only be used with 
> >>> semantic index 0
> >>> 3. COLOR and BCOLOR can only be used with semantic index 0-1 (note that 
> >>> this doesn't apply to fragment outputs)
> >>> 4. GENERIC can be used with semantic indices 0-218 on any driver, if 
> >>> BCOLOR is not used
> >>> 5. GENERIC can be used with semantic indices 0-216 on any driver, if 
> >>> BCOLOR IS used
> >>> 6. GENERIC can be used with semantic indices 0-255 on almost all drivers 
> >>> (those that don't need the 0-218 limitation)
> >>> 7. Some drivers may also choose to support GENERIC with arbitrary 
> >>> indices, but that should generally not happen
> >>>
> >>> The reason of this, in short, is that this maps directly to DirectX 9 
> >>> SM3, which is the most problematic interface of all.
> >>>
> >>> The peculiar problem we have here is that we have two competing 
> >>> constraints that force us into choosing the exact SM3 value:
> >>> 1. The VMware SVGA driver must deal with an SM3 host interface and would 
> >>> ideally want to directly feed the Gallium semantics to the host
> >>> 2. An hypotetical DirectX 9 state tracker needs to support SM3 and would 
> >>> ideally want to directly feed the SM3 semantics to Gallium
> >>>
> >>> Note that this is not a reference to the VMware DirectX 9 state tracker, 
> >>> since its authors haven't provided details about its handling of shader 
> >>> semantics.
> >>>
> >>> SM3 ends up supporting 219 generic indices: 16 indices in 14 classes, 
> >>> minus POSITION0, PSIZE0, COLOR0, COLOR1 and FOG0 which are the only ones 
> >>> that wouldn't be mapped to GENERIC.
> >>> However, Gallium drivers that don't benefit from having specific 
> >>> contraints (like svga and r600) are supposed to support 256 indices, and 
> >>> my nv30/nv40 work does that.
> >>>
> >>> The expected implementation, if no hardware support exists, is to build a 
> >>> list of relocations to apply to either the fragment or the vertex shader, 
> >>> and patch one of them at validation time to match the other.
> >>> Data structures are provided in gallium/auxiliary to ease this, and try 
> >>> to minimize the number of times where this needs to be performed.
> >>>
> >>> Let's now proceed to the discussion and detailed rationale, mostly 
> >>> constructed by copy&pasting older messages.
> >>> ...



------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to