• Ian Romanick's avatar
    glsl2: Add ir_assignment::write_mask and associated methods · 5a7758ef
    Ian Romanick authored
    Replace swizzles on the LHS with additional swizzles on the RHS and a
    write mask in the assignment instruction.  As part of this add
    ir_assignment::set_lhs.  Ideally we'd make ir_assignment::lhs private
    to prevent erroneous writes, but that would require a lot of code
    butchery at this point.
    
    Add ir_assignment constructor that takes an explicit write mask.  This
    is required for ir_assignment::clone, but it can also be used in other
    places.  Without this, ir_assignment clones lose their write masks,
    and incorrect IR is generated in optimization passes.
    
    Add ir_assignment::whole_variable_written method.  This method gets
    the variable on the LHS if the whole variable is written or NULL
    otherwise.  This is different from
    ir->lhs->whole_variable_referenced() because the latter has no
    knowledge of the write mask stored in the ir_assignment.
    
    Gut all code from ir_to_mesa that handled swizzles on the LHS of
    assignments.  There is probably some other refactoring that could be
    done here, but that can be left for another day.
    5a7758ef
ir_constant_variable.cpp 5.59 KB