[Mesa-dev] [RFC PATCH] ARB_vp/ARB_fp: accept duplicate precision options

Chris Forbes chrisf at ijw.co.nz
Tue May 21 19:27:16 PDT 2013


OK, I'll add the spec quote and fixup the two piglits which are
asserting the old behavior, and push it all tonight.

-- Chris

On Wed, May 22, 2013 at 9:33 AM, Ian Romanick <idr at freedesktop.org> wrote:
> On 05/18/2013 11:18 PM, Chris Forbes wrote:
>>
>> Relaxes the validation of
>>
>>     OPTION ARB_precision_hint_{nicest,fastest};
>>
>> to allow duplicate options. The spec says that both /nicest/ and
>> /fastest/ cannot be specified together, but could be interpreted
>> either way for respecification of the same option.
>>
>> Other drivers (NVIDIA etc) accept this, and at least one Unity3D game
>> expects it to succeed (Kerbal Space Program).
>
>
> NOTE: This is a candidate for stable release branches.
>
>
>> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
>> ---
>>   src/mesa/program/program_parse_extra.c | 16 +++++++---------
>>   1 file changed, 7 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/mesa/program/program_parse_extra.c
>> b/src/mesa/program/program_parse_extra.c
>> index 4d92848..eb1fccc 100644
>> --- a/src/mesa/program/program_parse_extra.c
>> +++ b/src/mesa/program/program_parse_extra.c
>> @@ -194,15 +194,13 @@ _mesa_ARBfp_parse_option(struct asm_parser_state
>> *state, const char *option)
>>         } else if (strncmp(option, "precision_hint_", 15) == 0) {
>>          option += 15;
>>
>> -        if (state->option.PrecisionHint == OPTION_NONE) {
>> -           if (strcmp(option, "nicest") == 0) {
>> -              state->option.PrecisionHint = OPTION_NICEST;
>> -              return 1;
>> -           } else if (strcmp(option, "fastest") == 0) {
>> -              state->option.PrecisionHint = OPTION_FASTEST;
>> -              return 1;
>> -           }
>> -        }
>
>
> I think it's worth quoting the bit of spec that Eric mentioned in a comment
> here.  With or without that change, this patch is
>
> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
>
>
>> +         if (strcmp(option, "nicest") == 0 && state->option.PrecisionHint
>> != OPTION_FASTEST) {
>> +            state->option.PrecisionHint = OPTION_NICEST;
>> +            return 1;
>> +         } else if (strcmp(option, "fastest") == 0 &&
>> state->option.PrecisionHint != OPTION_NICEST) {
>> +            state->option.PrecisionHint = OPTION_FASTEST;
>> +            return 1;
>> +         }
>>
>>          return 0;
>>         } else if (strcmp(option, "draw_buffers") == 0) {
>>
>


More information about the mesa-dev mailing list