mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
i965/gen6: Fix LogicOp handling for GL_COPY and/or floating-point RTs.
We were accidentally leaving blending enabled for LogicOp GL_COPY, which ARB_color_buffer_float/GL_RGBA32F-render (and friends) caught. Additionally, the GL spec says that no LogicOp should be done to floating-point targets, and the GPU gets really angry even if you say to LogicOp GL_COPY to float.
This commit is contained in:
parent
3032582d03
commit
6a02679f01
1 changed files with 13 additions and 5 deletions
|
|
@ -47,10 +47,17 @@ prepare_blend_state(struct brw_context *brw)
|
|||
|
||||
for (b = 0; b < nr_draw_buffers; b++) {
|
||||
/* _NEW_COLOR */
|
||||
if (ctx->Color._LogicOpEnabled && ctx->Color.LogicOp != GL_COPY) {
|
||||
blend[b].blend1.logic_op_enable = 1;
|
||||
blend[b].blend1.logic_op_func =
|
||||
intel_translate_logic_op(ctx->Color.LogicOp);
|
||||
if (ctx->Color._LogicOpEnabled) {
|
||||
struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[b];
|
||||
/* _NEW_BUFFERS */
|
||||
/* Floating point RTs should have no effect from LogicOp,
|
||||
* except for disabling of blending
|
||||
*/
|
||||
if (_mesa_get_format_datatype(rb->Format) != GL_FLOAT) {
|
||||
blend[b].blend1.logic_op_enable = 1;
|
||||
blend[b].blend1.logic_op_func =
|
||||
intel_translate_logic_op(ctx->Color.LogicOp);
|
||||
}
|
||||
} else if (ctx->Color.BlendEnabled & (1 << b)) {
|
||||
GLenum eqRGB = ctx->Color.Blend[0].EquationRGB;
|
||||
GLenum eqA = ctx->Color.Blend[0].EquationA;
|
||||
|
|
@ -108,7 +115,8 @@ prepare_blend_state(struct brw_context *brw)
|
|||
|
||||
const struct brw_tracked_state gen6_blend_state = {
|
||||
.dirty = {
|
||||
.mesa = _NEW_COLOR,
|
||||
.mesa = (_NEW_COLOR |
|
||||
_NEW_BUFFERS),
|
||||
.brw = BRW_NEW_BATCH,
|
||||
.cache = 0,
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue