st/glsl_to_tgsi: fix ir_assignment hack doing bad things for doubles
authorDave Airlie <airlied@redhat.com>
Fri, 20 Feb 2015 03:58:18 +0000 (13:58 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 8 May 2015 00:21:01 +0000 (10:21 +1000)
This hack for fixing gl_FragDepth apparantly caused a GLSL shader
outputting a single double to try and output a dvec4, but we hadn't
assigned outputs for the secondary bit.

This avoids going into the hack code for scalar doubles.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 93671ba9cc044f16c2943377ef804e681ba89ccb..08957dc2e1d9cb675c19e7eddcfaa15d2790ad49 100644 (file)
@@ -2611,6 +2611,7 @@ glsl_to_tgsi_visitor::visit(ir_assignment *ir)
       assert(!ir->lhs->type->is_scalar() && !ir->lhs->type->is_vector());
       l.writemask = WRITEMASK_XYZW;
    } else if (ir->lhs->type->is_scalar() &&
+              !ir->lhs->type->is_double() &&
               ir->lhs->variable_referenced()->data.mode == ir_var_shader_out) {
       /* FINISHME: This hack makes writing to gl_FragDepth, which lives in the
        * FINISHME: W component of fragment shader output zero, work correctly.