1#include "brw.h"
2
3bool brw_sf_kernel__nomask(struct brw_compile *p)
4{
5	struct brw_reg inv, v0, v1, v2, delta;
6
7	v0 = brw_vec4_grf(3, 0);
8	v1 = brw_vec4_grf(4, 0);
9	v2 = brw_vec4_grf(5, 0);
10	delta = brw_vec8_grf(7, 0);
11
12	inv = brw_vec4_grf(6, 0);
13	brw_math_invert(p, inv, brw_vec4_grf(1, 11));
14
15	brw_MOV(p, brw_message_reg(3), v0);
16
17	brw_ADD(p, delta, v1, brw_negate(v2));
18	brw_MUL(p, brw_message_reg(1), delta, brw_vec1_grf(6,0));
19
20	brw_ADD(p, delta, v2, brw_negate(v0));
21	brw_MUL(p, brw_message_reg(2), delta, brw_vec1_grf(6,2));
22
23	brw_urb_WRITE(p, brw_null_reg(), 0, brw_vec8_grf(0 ,0),
24		      false, true, 4, 0, true, true, 0,
25		      BRW_URB_SWIZZLE_TRANSPOSE);
26
27	return true;
28}
29
30bool brw_sf_kernel__mask(struct brw_compile *p)
31{
32	struct brw_reg inv, v0, v1, v2;
33
34	v0 = brw_vec8_grf(3, 0);
35	v1 = brw_vec8_grf(4, 0);
36	v2 = brw_vec8_grf(5, 0);
37
38	inv = brw_vec4_grf(6, 0);
39	brw_math_invert(p, inv, brw_vec4_grf(1, 11));
40
41	brw_MOV(p, brw_message_reg(3), v0);
42
43	brw_ADD(p, brw_vec8_grf(7, 0), v1, brw_negate(v2));
44	brw_MUL(p, brw_message_reg(1), brw_vec8_grf(7, 0), brw_vec1_grf(6,0));
45
46	brw_ADD(p, brw_vec8_grf(7, 0), v2, brw_negate(v0));
47	brw_MUL(p, brw_message_reg(2), brw_vec8_grf(7, 0), brw_vec1_grf(6,2));
48
49	brw_urb_WRITE(p, brw_null_reg(), 0, brw_vec8_grf(0 ,0),
50		      false, true, 4, 0, true, true, 0,
51		      BRW_URB_SWIZZLE_TRANSPOSE);
52
53	return true;
54}
55