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_ARB_fp (yyextra->mode == ARB_fragment)
#define require_shadow (yyextra->option.Shadow) #define require_shadow (yyextra->option.Shadow)
#define require_rect (yyextra->option.TexRect) #define require_rect (yyextra->option.TexRect)
#define require_texarray (yyextra->option.TexArray)
#define return_token_or_IDENTIFIER(condition, token) \ #define return_token_or_IDENTIFIER(condition, token) \
do { \ 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); } SHADOW1D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
SHADOW2D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); } 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); } 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$]* { [_a-zA-Z$][_a-zA-Z0-9$]* {
yylval->string = strdup(yytext); yylval->string = strdup(yytext);

File diff suppressed because it is too large Load Diff

View File

@@ -127,17 +127,21 @@
TEX_SHADOW1D = 343, TEX_SHADOW1D = 343,
TEX_SHADOW2D = 344, TEX_SHADOW2D = 344,
TEX_SHADOWRECT = 345, TEX_SHADOWRECT = 345,
VERTEX = 346, TEX_ARRAY1D = 346,
VTXATTRIB = 347, TEX_ARRAY2D = 347,
WEIGHT = 348, TEX_ARRAYSHADOW1D = 348,
IDENTIFIER = 349, TEX_ARRAYSHADOW2D = 349,
MASK4 = 350, VERTEX = 350,
MASK3 = 351, VTXATTRIB = 351,
MASK2 = 352, WEIGHT = 352,
MASK1 = 353, IDENTIFIER = 353,
SWIZZLE = 354, MASK4 = 354,
DOT_DOT = 355, MASK3 = 355,
DOT = 356 MASK2 = 356,
MASK1 = 357,
SWIZZLE = 358,
DOT_DOT = 359,
DOT = 360
}; };
#endif #endif
@@ -170,7 +174,7 @@ typedef union YYSTYPE
/* Line 1676 of yacc.c */ /* Line 1676 of yacc.c */
#line 174 "program_parse.tab.h" #line 178 "program_parse.tab.h"
} YYSTYPE; } YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # 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 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 TEXTURE_UNIT TEX_1D TEX_2D TEX_3D TEX_CUBE TEX_RECT
%token TEX_SHADOW1D TEX_SHADOW2D TEX_SHADOWRECT %token TEX_SHADOW1D TEX_SHADOW2D TEX_SHADOWRECT
%token TEX_ARRAY1D TEX_ARRAY2D TEX_ARRAYSHADOW1D TEX_ARRAYSHADOW2D
%token VERTEX VTXATTRIB %token VERTEX VTXATTRIB
%token WEIGHT %token WEIGHT
@@ -450,6 +451,10 @@ texTarget: TEX_1D { $$ = TEXTURE_1D_INDEX; }
| TEX_SHADOW1D { $$ = -TEXTURE_1D_INDEX; } | TEX_SHADOW1D { $$ = -TEXTURE_1D_INDEX; }
| TEX_SHADOW2D { $$ = -TEXTURE_2D_INDEX; } | TEX_SHADOW2D { $$ = -TEXTURE_2D_INDEX; }
| TEX_SHADOWRECT { $$ = -TEXTURE_RECT_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 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; 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; return 0;

View File

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