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

Chris Forbes chrisf at ijw.co.nz
Sat May 18 23:18:59 PDT 2013


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).

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;
-	    }
-	 }
+         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) {
-- 
1.8.2.3



More information about the mesa-dev mailing list