Merge remote branch 'origin/7.8'
Conflicts: Makefile configs/default src/mesa/main/version.h
This commit is contained in:
@@ -744,6 +744,8 @@ blend_fallback(struct quad_stage *qs,
|
||||
|
||||
for (cbuf = 0; cbuf < softpipe->framebuffer.nr_cbufs; cbuf++)
|
||||
{
|
||||
/* which blend/mask state index to use: */
|
||||
const uint blend_buf = blend->independent_blend_enable ? cbuf : 0;
|
||||
float dest[4][QUAD_SIZE];
|
||||
struct softpipe_cached_tile *tile
|
||||
= sp_get_cached_tile(softpipe->cbuf_cache[cbuf],
|
||||
@@ -771,11 +773,11 @@ blend_fallback(struct quad_stage *qs,
|
||||
if (blend->logicop_enable) {
|
||||
logicop_quad( qs, quadColor, dest );
|
||||
}
|
||||
else if (blend->rt[cbuf].blend_enable) {
|
||||
else if (blend->rt[blend_buf].blend_enable) {
|
||||
blend_quad( qs, quadColor, dest, cbuf );
|
||||
}
|
||||
|
||||
if (blend->rt[cbuf].colormask != 0xf)
|
||||
if (blend->rt[blend_buf].colormask != 0xf)
|
||||
colormask_quad( blend->rt[cbuf].colormask, quadColor, dest);
|
||||
|
||||
/* Output color values
|
||||
|
||||
@@ -582,9 +582,6 @@ _mesa_update_state_locked( GLcontext *ctx )
|
||||
if (new_state & _DD_NEW_SEPARATE_SPECULAR)
|
||||
update_separate_specular( ctx );
|
||||
|
||||
if (new_state & (_NEW_ARRAY | _NEW_PROGRAM | _NEW_BUFFER_OBJECT))
|
||||
update_arrays( ctx );
|
||||
|
||||
if (new_state & (_NEW_BUFFERS | _NEW_VIEWPORT))
|
||||
update_viewport_matrix(ctx);
|
||||
|
||||
@@ -620,6 +617,8 @@ _mesa_update_state_locked( GLcontext *ctx )
|
||||
new_prog_state |= update_program( ctx );
|
||||
}
|
||||
|
||||
if (new_state & (_NEW_ARRAY | _NEW_PROGRAM | _NEW_BUFFER_OBJECT))
|
||||
update_arrays( ctx );
|
||||
|
||||
out:
|
||||
new_prog_state |= update_program_constants(ctx);
|
||||
|
||||
@@ -1415,6 +1415,7 @@ create_new_program(GLcontext *ctx, struct state_key *key,
|
||||
struct texenv_fragment_program p;
|
||||
GLuint unit;
|
||||
struct ureg cf, out;
|
||||
int i;
|
||||
|
||||
memset(&p, 0, sizeof(p));
|
||||
p.state = key;
|
||||
@@ -1436,7 +1437,13 @@ create_new_program(GLcontext *ctx, struct state_key *key,
|
||||
p.program->Base.NumAddressRegs = 0;
|
||||
p.program->Base.Parameters = _mesa_new_parameter_list();
|
||||
p.program->Base.InputsRead = 0x0;
|
||||
p.program->Base.OutputsWritten = 1 << FRAG_RESULT_COLOR;
|
||||
|
||||
if (ctx->DrawBuffer->_NumColorDrawBuffers == 1)
|
||||
p.program->Base.OutputsWritten = 1 << FRAG_RESULT_COLOR;
|
||||
else {
|
||||
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++)
|
||||
p.program->Base.OutputsWritten |= (1 << (FRAG_RESULT_DATA0 + i));
|
||||
}
|
||||
|
||||
for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
|
||||
p.src_texture[unit] = undef;
|
||||
@@ -1485,22 +1492,28 @@ create_new_program(GLcontext *ctx, struct state_key *key,
|
||||
}
|
||||
|
||||
cf = get_source( &p, SRC_PREVIOUS, 0 );
|
||||
out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_COLOR );
|
||||
|
||||
if (key->separate_specular) {
|
||||
/* Emit specular add.
|
||||
*/
|
||||
struct ureg s = register_input(&p, FRAG_ATTRIB_COL1);
|
||||
emit_arith( &p, OPCODE_ADD, out, WRITEMASK_XYZ, 0, cf, s, undef );
|
||||
emit_arith( &p, OPCODE_MOV, out, WRITEMASK_W, 0, cf, undef, undef );
|
||||
}
|
||||
else if (memcmp(&cf, &out, sizeof(cf)) != 0) {
|
||||
/* Will wind up in here if no texture enabled or a couple of
|
||||
* other scenarios (GL_REPLACE for instance).
|
||||
*/
|
||||
emit_arith( &p, OPCODE_MOV, out, WRITEMASK_XYZW, 0, cf, undef, undef );
|
||||
}
|
||||
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
|
||||
if (ctx->DrawBuffer->_NumColorDrawBuffers == 1)
|
||||
out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_COLOR );
|
||||
else {
|
||||
out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_DATA0 + i );
|
||||
}
|
||||
|
||||
if (key->separate_specular) {
|
||||
/* Emit specular add.
|
||||
*/
|
||||
struct ureg s = register_input(&p, FRAG_ATTRIB_COL1);
|
||||
emit_arith( &p, OPCODE_ADD, out, WRITEMASK_XYZ, 0, cf, s, undef );
|
||||
emit_arith( &p, OPCODE_MOV, out, WRITEMASK_W, 0, cf, undef, undef );
|
||||
}
|
||||
else if (memcmp(&cf, &out, sizeof(cf)) != 0) {
|
||||
/* Will wind up in here if no texture enabled or a couple of
|
||||
* other scenarios (GL_REPLACE for instance).
|
||||
*/
|
||||
emit_arith( &p, OPCODE_MOV, out, WRITEMASK_XYZW, 0, cf, undef, undef );
|
||||
}
|
||||
}
|
||||
/* Finish up:
|
||||
*/
|
||||
emit_arith( &p, OPCODE_END, undef, WRITEMASK_XYZW, 0, undef, undef, undef);
|
||||
|
||||
Reference in New Issue
Block a user