[Mesa-dev] Mesa (master): nv30: report 8 maximum inputs
Ilia Mirkin
imirkin at alum.mit.edu
Mon Feb 10 18:16:08 PST 2014
On Mon, Feb 10, 2014 at 7:12 PM, Ian Romanick <idr at freedesktop.org> wrote:
> On 02/10/2014 02:04 PM, Ilia Mirkin wrote:
>> On Mon, Feb 10, 2014 at 4:43 PM, Ian Romanick <idr at freedesktop.org> wrote:
>>> On 02/08/2014 04:18 PM, Ilia Mirkin wrote:
>>>> Module: Mesa
>>>> Branch: master
>>>> Commit: 356aff3a5c08be055d6befff99a72f5551b3ac2d
>>>> URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=356aff3a5c08be055d6befff99a72f5551b3ac2d
>>>>
>>>> Author: Ilia Mirkin <imirkin at alum.mit.edu>
>>>> Date: Wed Jan 29 12:36:13 2014 -0500
>>>>
>>>> nv30: report 8 maximum inputs
>>>>
>>>> nvfx_fragprog_assign_generic only allows for up to 10/8 texcoords for
>>>> nv40/nv30. This fixes compilation of the varying-packing tests.
>>>> Furthermore it appears that the last 2 inputs on nv4x don't seem to
>>>> work in those tests, so just report 8 everywhere for now.
>>>
>>> Is it possible that the last two inputs are supposed to be used for
>>> gl_Color and gl_SecondaryColor? In that case, they may have clamping
>>> enabled by default (or always enabled, if the hardware cannot disable
>>> GL_CLAMP_VERTEX_COLOR). Does that match the behavior that you saw?
>>
>> I'm definitely out of my depth here. What I saw were piglit tests
>> failing and hard-to-understand code with little additional
>> documentation.
>>
>> There's a mask that enables passing of outputs from VP -> FP. This
>> mask has separate entries for colors, fog, psize, and clipping. The
>> texcoord's, as they are called, are in a different part of the mask.
>> The last 2 are in a different-yet part of the mask from the first 8.
>
> Hm... that does sound like something different.
>
>> This of course does not preclude them getting clamped/modified in some
>> way. Ideally those varying-packing tests would be rewritten in a way
>> that better exposes what actually went wrong, but I realize it's not
>> easy to add printf("interesting values: %f %f") into a shader.
>
> Can that hardware render to floating point? You could try rendering to
> a fp FBO, doing glReadPixels, the printf the data. It's messy, but it
> works.
The hardware? Yes. But it's disabled in the software. I asked Ben why,
and he gave me a reasonable explanation. However that explanation has
since escaped my memory, but it's in the irc logs if it's really
important.
For those specific tests, assuming a reasonable number of varyings
(i.e. < 255), one could just set the color results to e.g.
varying_index/255 -- that way we'd know which varying was the first
bad one. But in general, it's hard :( Shader debugging does seem like
a prime target for some extension though -- nv30 will never get
support for it, but at least future hardware driver writers may be
spared...
>
>> It's also entirely possible that the issue is that the way you address
>> those last 2 texcoord's in the FP has to be done in some different way
>> than the first 8. Ideally I (or someone) would trace the blob and
>> analyze the bytecode/engine setup to see what the difference is. I
>> haven't gotten around to that (and unfortunately envydis doesn't
>> support the nv30/nv40 shader ISA).
>>
>> However I was trying to make a dent in the nv4x failures and crashes.
>> This is the latest state, btw:
>> http://people.freedesktop.org/~imirkin/nv40-comparison/problems.html
>> -- I think actually a bunch of the test failures are due to incorrect
>> piglit tests (e.g. "shader uses too many input components (48 > 32)"),
>
> Is that just the variable indexing tests? Hm... in at least
At least those, yes. I forget if there were others.
> vs-varying-array-mat4-col-rd.shader_test, it looks like the varying
> array is too big. OpenGL 2.1 only requires 32 varying components, and
> that test clearly uses 16*3+4 = 52. It seems like the linker should
> chop off the last element, but that still only reduces the usage to 36.
> A few of those tests could be made to work with 32 varying floats by
> reducing the array size from 3 to 2.
Also interestingly, some of those tests used to pass before I threw in
the restriction down to 32. So I guess something can work with those
last 2 texcoords, or perhaps it was just coincidence... (Compare nv42
vs nv44 -- the nv42 run had the limit down to 8, the nv44 run didn't.)
>
> There are a couple that can't be fixed that way because you'd have to
> reduce the array size to 1. For those tests, you'll have to add a
> MAX_VARYING_COMPONENTS requirement that behaves like the existing
> MAX_FRAGMENT_UNIFORM_VECTORS requirement.
Sounds reasonable, I'll look into it. I'm less interested in making
piglit tests run on nv30 than I am at making them not fail :)
-ilia
More information about the mesa-dev
mailing list