- shader_addline(arg->buffer, "%s.w = (%s.w > 0.0) ? %s.w : %s.w;\n", dst_reg, src0_reg, src1_reg, src2_reg);
- shader_glsl_add_dst(arg->dst, dst_reg, dst_mask, tmpLine);
- shader_addline(arg->buffer, "%smix(vec4(%s), vec4(%s), vec4(lessThan(vec4(%s), vec4(0.0)))))%s;\n",
tmpLine, src1_str, src2_str, src0_str, dst_mask);
}
To give an idea as to what this is doing, see the following translation, taken from the Hair demo:
Original Shader: cmp r1.rg, r0.r, abs(v0).brba, abs(v0).rbba
New code translates to: R1.xy = vec4(mix(vec4(abs(IN0.zxzw)), vec4(abs(IN0.xzzw)), vec4(lessThan(vec4(R0.x), vec4(0.0))))).xy;