Re: GLSL: brw_eu.h assertion setting uniform variable

Brian Paul <[email protected]>
Newsgroups gmane.comp.video.mesa3d.user
Organization VMware, Inc.
Message-ID <[email protected]>
On 05/23/2011 04:09 PM, Jason Tiller wrote:
> Hi, Brian, :)
>
> On Fri, 13 May 2011, Brian Paul wrote:
>> On 05/11/2011 04:48 PM, Jason Tiller wrote:
>
>>> When trying to use a uniform value in a simple GLSL vertex shader, I
>>> am getting the following abort:
>>>
>>> brw_eu.h:177: brw_reg: Assertion `nr < 128' failed.
>>> Aborted
>>>
>>> I've tried this using raw GLUT (glGetUniformLocation/getUniform1i) as
>>> well as implementing this in Qt 4.7 (setUniformValue). The shader
>>> does dead simple Gouraud shading. I link it along with a super-simple
>>> passthrough fragment shader. I'm using the uniform variable to pass
>>> in the number of lights in the scene. I declare the variable at the
>>> top of my shader:
>>>
>>> uniform int numlights;
>>>
>>> If I turn the variable into a const:
>>>
>>> const int numlights = 2;
>>>
>>> then it works perfectly. Of course, I need to pass uniforms into my
>>> shader...
>>>
>>> Any ideas? I'm running:
>>>
>>> Kubuntu 11.04 (turned off all effects in KWin)
>>> KDE 4.6.3
>>> Qt 4.7.2
>>> Intel i5 430M w/i915 embedded graphics
>>> OpenGL 2.1, Mesa 7.10.2
>>> Xorg 1.10.1-1ubuntu1
>>>
>>> I'm desperate! This makes no sense at all to me, and I have no idea
>>> where to go from here.
>>>
>>> Thank you!
>>>
>>> ---Jason
>>>
>>> P.S. - I've tried fiddling with MESA_GLSL=... and can see my shaders
>>> getting compiled, the program being used, and the uniform variable
>>> being set... but still the abort. HELP!
>
>> You should file a bug for this. Or, try the latest Mesa code from
>> git.
>
> I've determined the problem - I was attempting to use a feature in my
> shader that isn't supported by my graphics chipset. Specifically, I
> was using non-constant conditions in my for loop, which isn't
> implemented in any of these extensions:
>
> GL_ARB_fragment program
> GL_ARB_fragment shader
> GL_ARB_fragment_program_shadow
> GL_ARB_vertex_program
> GL_ARB_shader_objects
> GL_ARB_vertex_shader
> GL_ARB_shading_language_100
> GL_EXT_gpu_program_parameters
> GL_EXT_separate_shader_objects
> GL_NV_vertex_program1_1
> GL_NV_vertex_program
>
> I should have realized that was the problem, but I'm *really* new to
> shaders, and I didn't understand how wildly varied all the chipsets
> are in what they support.
>
> However, I really wish that Mesa had given me a better error
> diagnostic. "brw_eu.h:177: brw_reg: Assertion `nr < 128' failed" was
> completely useless.
>
> I ended up switching over to using Cg, which worked fine. There were
> three things that sold me on using Cg for my class project:
>
> 1. The Cg compiler told me *immediately* what my problem was:
>
> "error C5013: profile does not support 'for' statements and 'for'
> could not be unrolled."
>
> In other words, the loop has to have a constant test for it to be
> unrolled.
>
> 2. The Cg runtime comes with an *excellent* set of example shaders
> and runtime examples that run with GLUT (lowest common
> denominator). All but two of the examples ran out of the box for
> me.
>
> 3. The Cg Tutorial. There's nothing like this book for GLSL. The
> SuperBible, Orange Book, etc.... none of these approach shading
> programming in the simple and straightforward way that The Cg
> Tutorial does.
>
> So, while the actual failure was pilot error in this case, Mesa
> certainly didn't help me narrow down the possibilities.
>
> Thanks for the suggestion, Brian! I'm still interested in trying
> GLSL, but I think I may wait until I have a laptop with a *real* GPU.
> For now, Cg/Qt is enough for my feeble investigations.

I haven't worked on the i965 driver in well over a year.  You should 
file a bug report for this so the i965 developers can address it.

Were you still working with an i965 GPU when you switched to Cg?

-Brian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.