mesa: glsl: finish up support for precision qualifiers

This commit is contained in:
Brian Paul 2008-08-07 10:26:35 -06:00
parent 1ffd6908d4
commit a78f295f7c
2 changed files with 27 additions and 4 deletions

View file

@ -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;
}

View file

@ -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