Third respin of the basic idea, with a complete-ish i965 backend now. Works, except for a few things:
- Varying packing interaction is pretty bogus. Currently we look inside the ir_swizzle that got generated, and don't correct for it, so this only works for varyings which get packed into the start of a vec4. - Nonconstant sample id is not supported. This should be done by a lowering pass which converts it to ir_binop_interpolate_at_offset + reference to a builtin uniform with the sample positions. V2 had a crude implementation of this at the GLSL builtins level, but I haven't ported it yet. - SIMD16 support is disabled in the backend due to the way the PI unit interleaves the barycentric coordinates. My plan from this point: - Add four new ir expression opcodes: - ir_collect_bary_centroid: () -> vec2 - ir_collect_bary_sample: int -> vec2 - ir_collect_bary_offset: vec2 -> vec2 - ir_interpolate_bary: vec* -> vec2 -> vec* - Add a lowering pass which splits ir_interpolate_at_* into the appropriate pair of the above. This will be used by at least i965, but might be useful to other drivers. - Add the missing lowering for nonconstant sample id. Again, this is something i965 will want; other drivers may or may not need it. - Rejig backend code to implement the new opcodes rather than ir_interpolate_* directly. ir_collect_* will need to avoid splitting like I'm currently doing for ir_interpolate_*; ir_interpolate_bary can be split normally [wrt its first operand; the second must remain as a vec2]. The swizzle/varying-packing interaction should just fall out when this is done. - Add CSE support for ir_collect_bary_* to avoid redundant messages. - Fix up and enable SIMD16, if we care. -- Chris _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev