[Mesa-dev] [PATCH 3/8] mesa: Pass number of samples as a program state variable

Anuj Phogat anuj.phogat at gmail.com
Wed Oct 16 19:37:51 CEST 2013


On Tue, Oct 15, 2013 at 1:54 PM, Ian Romanick <idr at freedesktop.org> wrote:
> On 10/15/2013 09:53 AM, Ian Romanick wrote:
>> On 10/14/2013 10:12 AM, Anuj Phogat wrote:
>>> @@ -852,6 +858,9 @@ append_token(char *dst, gl_state_index k)
>>>     case STATE_TEXENV_COLOR:
>>>        append(dst, "texenv");
>>>        break;
>>> +   case STATE_NUM_SAMPLES:
>>> +      append(dst, "num.samples");
>>> +      break;
>>
>> There is some really broken code in append_token and
>> _mesa_program_state_string... and, of course, none of it is ever
>> exercised. :(
>>
>> Here's how this works... In ARB_vertex_program and ARB_fragment_program
>> (the ARB assembly shader extensions), there was a big structure-like
>> thing called "state".  This is where all of the built-in variables that
>> represented things like gl_DepthRange.near or
>> gl_ModelViewProjectionMatrix lived.  They were accessed as
>> state.depth.range (and the x, y, z, and w fields had the data) or
>> state.matrix.modelview.
>>
>> The state[] tokens passed to _mesa_program_state_string represents a
>> dereference of the assembly program state structure.  Each element
>> (usually) represents one level of the dereference.  So, gl_DepthRange is
>> state.depth.range is { STATE_DEPTH_RANGE, 0, 0 } and
>> gl_ModelViewProjectionMatrix[1] is state.matrix.modelview[1] is {
>> STATE_MVP_MATRIX, 1, 0 }.
>>
>> _mesa_program_state_string converts the list of tokens back into an
>> assembly-style string.  When it gets { STATE_DEPTH_RANGE, 0, 0 }, it
>> should return "state.depth.range".  When it gets { STATE_NUM_SAMPLES, 0,
>> 0 }, it should return "state.numsamples" (or similar).  Right now each
>> of these queries returns... nothing.
>>
>> The "append(dst, ...)" should go in _mesa_program_state_string.
>
> Ignore this.  I missed the calls at the very top of
> _mesa_program_state_string:
>
>    append(str, "state.");
>    append_token(str, state[0]);
>
> Your code (other than maybe the name "num.samples") and the existing
> depth.range code is correct as-is.
>
Ian, thanks for explaining how it works. I wasn't very confident about this
code and there was no way I could test it.
As suggested, I'll change "state.num.samples" to "state.numsamples".


More information about the mesa-dev mailing list