ARB prog parser: Add support for GL_MESA_texture_array

This isn't really tested yet as no drivers actually support this extension.
This commit is contained in:
Ian Romanick
2009-07-27 17:22:21 -07:00
parent 41d5696628
commit aafd576259
7 changed files with 1813 additions and 1717 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -31,6 +31,7 @@
#define require_ARB_fp (yyextra->mode == ARB_fragment)
#define require_shadow (yyextra->option.Shadow)
#define require_rect (yyextra->option.TexRect)
#define require_texarray (yyextra->option.TexArray)
#define return_token_or_IDENTIFIER(condition, token) \
do { \
@@ -299,6 +300,10 @@ RECT { return_token_or_IDENTIFIER(require_ARB_fp && require
SHADOW1D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
SHADOW2D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
SHADOWRECT { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
ARRAY1D { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
ARRAY2D { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
ARRAYSHADOW1D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
ARRAYSHADOW2D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
[_a-zA-Z$][_a-zA-Z0-9$]* {
yylval->string = strdup(yytext);

File diff suppressed because it is too large Load Diff

View File

@@ -127,17 +127,21 @@
TEX_SHADOW1D = 343,
TEX_SHADOW2D = 344,
TEX_SHADOWRECT = 345,
VERTEX = 346,
VTXATTRIB = 347,
WEIGHT = 348,
IDENTIFIER = 349,
MASK4 = 350,
MASK3 = 351,
MASK2 = 352,
MASK1 = 353,
SWIZZLE = 354,
DOT_DOT = 355,
DOT = 356
TEX_ARRAY1D = 346,
TEX_ARRAY2D = 347,
TEX_ARRAYSHADOW1D = 348,
TEX_ARRAYSHADOW2D = 349,
VERTEX = 350,
VTXATTRIB = 351,
WEIGHT = 352,
IDENTIFIER = 353,
MASK4 = 354,
MASK3 = 355,
MASK2 = 356,
MASK1 = 357,
SWIZZLE = 358,
DOT_DOT = 359,
DOT = 360
};
#endif
@@ -170,7 +174,7 @@ typedef union YYSTYPE
/* Line 1676 of yacc.c */
#line 174 "program_parse.tab.h"
#line 178 "program_parse.tab.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */

View File

@@ -158,6 +158,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
%token TEXCOORD TEXENV TEXGEN TEXGEN_Q TEXGEN_R TEXGEN_S TEXGEN_T TEXTURE TRANSPOSE
%token TEXTURE_UNIT TEX_1D TEX_2D TEX_3D TEX_CUBE TEX_RECT
%token TEX_SHADOW1D TEX_SHADOW2D TEX_SHADOWRECT
%token TEX_ARRAY1D TEX_ARRAY2D TEX_ARRAYSHADOW1D TEX_ARRAYSHADOW2D
%token VERTEX VTXATTRIB
%token WEIGHT
@@ -450,6 +451,10 @@ texTarget: TEX_1D { $$ = TEXTURE_1D_INDEX; }
| TEX_SHADOW1D { $$ = -TEXTURE_1D_INDEX; }
| TEX_SHADOW2D { $$ = -TEXTURE_2D_INDEX; }
| TEX_SHADOWRECT { $$ = -TEXTURE_RECT_INDEX; }
| TEX_ARRAY1D { $$ = TEXTURE_1D_ARRAY_INDEX; }
| TEX_ARRAY2D { $$ = TEXTURE_2D_ARRAY_INDEX; }
| TEX_ARRAYSHADOW1D { $$ = -TEXTURE_1D_ARRAY_INDEX; }
| TEX_ARRAYSHADOW2D { $$ = -TEXTURE_2D_ARRAY_INDEX; }
;
SWZ_instruction: SWZ maskedDstReg ',' srcReg ',' extendedSwizzle

View File

@@ -102,6 +102,15 @@ _mesa_ARBfp_parse_option(struct asm_parser_state *state, const char *option)
return 1;
}
}
} else if (strncmp(option, "MESA_", 5) == 0) {
option += 5;
if (strcmp(option, "texture_array") == 0) {
if (state->ctx->Extensions.MESA_texture_array) {
state->option.TexArray = 1;
return 1;
}
}
}
return 0;

View File

@@ -201,6 +201,7 @@ struct asm_parser_state {
unsigned DrawBuffers:1;
unsigned Shadow:1;
unsigned TexRect:1;
unsigned TexArray:1;
} option;
struct {