[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