From a78f295f7ca0a93fdaeda559668fda013c2a03b0 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 7 Aug 2008 10:26:35 -0600 Subject: mesa: glsl: finish up support for precision qualifiers --- src/mesa/shader/slang/slang_compile.c | 21 +++++++++++++++++---- src/mesa/shader/slang/slang_compile_variable.h | 10 ++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) (limited to 'src/mesa/shader') diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c index 2a1af39ee0..64c0dad611 100644 --- a/src/mesa/shader/slang/slang_compile.c +++ b/src/mesa/shader/slang/slang_compile.c @@ -707,20 +707,33 @@ parse_fully_specified_type(slang_parse_ctx * C, slang_output_ctx * O, precision = *C->I++; if (!parse_type_specifier(C, O, &type->specifier)) return 0; + switch (precision) { case PRECISION_DEFAULT: - /* TODO: Grab the default precision for the given type specifier. - */ + assert(type->specifier.type < TYPE_SPECIFIER_COUNT); + if (type->specifier.type < TYPE_SPECIFIER_COUNT) + type->precision = O->default_precision[type->specifier.type]; break; case PRECISION_LOW: + type->precision = SLANG_PREC_LOW; + break; case PRECISION_MEDIUM: + type->precision = SLANG_PREC_MEDIUM; + break; case PRECISION_HIGH: - /* TODO: Translate to mesa representation. - */ + type->precision = SLANG_PREC_HIGH; break; default: return 0; } + +#if !FEATURE_es2_glsl + if (precision != PRECISION_DEFAULT) { + slang_info_log_error(C->L, "precision qualifiers not allowed"); + return 0; + } +#endif + return 1; } diff --git a/src/mesa/shader/slang/slang_compile_variable.h b/src/mesa/shader/slang/slang_compile_variable.h index 9b0f85859a..d81a3d2869 100644 --- a/src/mesa/shader/slang/slang_compile_variable.h +++ b/src/mesa/shader/slang/slang_compile_variable.h @@ -51,10 +51,20 @@ slang_type_specifier_type_to_string(slang_type_specifier_type); +typedef enum slang_type_precision_ +{ + SLANG_PREC_DEFAULT, + SLANG_PREC_LOW, + SLANG_PREC_MEDIUM, + SLANG_PREC_HIGH +} slang_type_precision; + + typedef struct slang_fully_specified_type_ { slang_type_qualifier qualifier; slang_type_specifier specifier; + slang_type_precision precision; } slang_fully_specified_type; extern int -- cgit v1.2.3