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
|
||||
: 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
|
||||
{
|
||||
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->MaxLights = ctx->Const.MaxLights;
|
||||
state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
|
||||
state->MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
|
||||
|
||||
state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
|
||||
? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
|
||||
|
Reference in New Issue
Block a user