[Mesa-dev] [PATCH 06/10] i965: Reduce maximum GL_ARB_fragment_program instruction count to 1024.

Roland Scheidegger sroland at vmware.com
Mon Sep 24 13:04:02 PDT 2012


Am 24.09.2012 21:06, schrieb Kenneth Graunke:
> On 09/22/2012 02:04 PM, Eric Anholt wrote:
>> I don't know of any programs that would need more than this.  The larger
>> programs I've seen have neared 100 instructions.  This prevent excessive
>> runtimes of automatic tests that attempt to test up to the exposed maximums
>> (like fp-long-alu).
>> ---
>>  src/mesa/drivers/dri/i965/brw_context.c |    8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
>> index 1083e28..a7d61bd 100644
>> --- a/src/mesa/drivers/dri/i965/brw_context.c
>> +++ b/src/mesa/drivers/dri/i965/brw_context.c
>> @@ -250,10 +250,10 @@ brwCreateContext(int api,
>>        MIN2(ctx->Const.VertexProgram.MaxNativeParameters,
>>  	   ctx->Const.VertexProgram.MaxEnvParams);
>>  
>> -   ctx->Const.FragmentProgram.MaxNativeInstructions = (16 * 1024);
>> -   ctx->Const.FragmentProgram.MaxNativeAluInstructions = (16 * 1024);
>> -   ctx->Const.FragmentProgram.MaxNativeTexInstructions = (16 * 1024);
>> -   ctx->Const.FragmentProgram.MaxNativeTexIndirections = (16 * 1024);
>> +   ctx->Const.FragmentProgram.MaxNativeInstructions = (1 * 1024);
>> +   ctx->Const.FragmentProgram.MaxNativeAluInstructions = (1 * 1024);
>> +   ctx->Const.FragmentProgram.MaxNativeTexInstructions = (1 * 1024);
>> +   ctx->Const.FragmentProgram.MaxNativeTexIndirections = (1 * 1024);
>>     ctx->Const.FragmentProgram.MaxNativeAttribs = 12;
>>     ctx->Const.FragmentProgram.MaxNativeTemps = 256;
>>     ctx->Const.FragmentProgram.MaxNativeAddressRegs = 0;
> 
> I've definitely seen 600 instruction shaders generated by Cg.  (Some
> Crystal Space based games use shaders written in Cg, which translates to
> stellar ARBfp code...)  I'm afraid there may be even bigger ones.

I'm not sure there are really larger ones out in the wild.
I would guess that the arbfp1 target was mostly used for targetting
ati cards (since geforce cards had their own target profile), and these were
limited to 512 (hw) instructions (for r4xx, much less for r3xx).
I guess the stellar arbfp code is mostly due to the necessary loop unrolling,
and if you were targetting cards which actually could do loops you'd be
using the glsl target of cg (of course you could use glsl target for those
older cards too but arbfp1 target is probably older?).
And I bet you could cut down the MaxNativeTexInstructions and especially
the number of MaxNativeTexIndirections a lot more without hurting any
real apps.
But of course I don't actually know for sure if there isn't some stupid
app out there trying to compile some nice small simple cg shader but with loops
into some arb_fp mess even if it should really use glsl target.

Roland



More information about the mesa-dev mailing list