mesa: Add support for the ARB_fragment_program part of ARB_draw_buffers.
Fixes fbo-drawbuffers-arbfp. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34321 Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -2064,6 +2064,34 @@ optResultFaceType:
|
|||||||
? VERT_RESULT_COL0
|
? VERT_RESULT_COL0
|
||||||
: FRAG_RESULT_COLOR;
|
: FRAG_RESULT_COLOR;
|
||||||
}
|
}
|
||||||
|
| '[' INTEGER ']'
|
||||||
|
{
|
||||||
|
if (state->mode == ARB_vertex) {
|
||||||
|
yyerror(& @1, state, "invalid program result name");
|
||||||
|
YYERROR;
|
||||||
|
} else {
|
||||||
|
if (!state->option.DrawBuffers) {
|
||||||
|
/* From the ARB_draw_buffers spec (same text exists
|
||||||
|
* for ATI_draw_buffers):
|
||||||
|
*
|
||||||
|
* If this option is not specified, a fragment
|
||||||
|
* program that attempts to bind
|
||||||
|
* "result.color[n]" will fail to load, and only
|
||||||
|
* "result.color" will be allowed.
|
||||||
|
*/
|
||||||
|
yyerror(& @1, state,
|
||||||
|
"result.color[] used without "
|
||||||
|
"`OPTION ARB_draw_buffers' or "
|
||||||
|
"`OPTION ATI_draw_buffers'");
|
||||||
|
YYERROR;
|
||||||
|
} else if ($2 >= state->MaxDrawBuffers) {
|
||||||
|
yyerror(& @1, state,
|
||||||
|
"result.color[] exceeds MAX_DRAW_BUFFERS_ARB");
|
||||||
|
YYERROR;
|
||||||
|
}
|
||||||
|
$$ = FRAG_RESULT_DATA0 + $2;
|
||||||
|
}
|
||||||
|
}
|
||||||
| FRONT
|
| FRONT
|
||||||
{
|
{
|
||||||
if (state->mode == ARB_vertex) {
|
if (state->mode == ARB_vertex) {
|
||||||
@@ -2681,6 +2709,7 @@ _mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *st
|
|||||||
state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
|
state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
|
||||||
state->MaxLights = ctx->Const.MaxLights;
|
state->MaxLights = ctx->Const.MaxLights;
|
||||||
state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
|
state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
|
||||||
|
state->MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
|
||||||
|
|
||||||
state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
|
state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
|
||||||
? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
|
? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
|
||||||
|
@@ -173,6 +173,7 @@ struct asm_parser_state {
|
|||||||
unsigned MaxClipPlanes;
|
unsigned MaxClipPlanes;
|
||||||
unsigned MaxLights;
|
unsigned MaxLights;
|
||||||
unsigned MaxProgramMatrices;
|
unsigned MaxProgramMatrices;
|
||||||
|
unsigned MaxDrawBuffers;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user