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:
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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 */
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user