Christoph,

I don't see a patch for the st/mesa program translation code to check 
that we don't exceed the limit.  Were you doing to take care of that too?

I guess we're assuming that the max number of generic inputs == max 
number of generic outputs.  I think that's OK until a counter case 
appears.

-Brian


On 12/17/2010 05:28 AM, Keith Whitwell wrote:
> 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
> .
>


------------------------------------------------------------------------------
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