1bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs#ifndef __NOUVEAU_GLDEFS_H__
2bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs#define __NOUVEAU_GLDEFS_H__
32f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
42f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
52f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_blend_func(unsigned factor)
62f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs{
72f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (factor) {
8bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLENDFACTOR_ZERO:
9bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0000;
102f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_ONE:
11bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0001;
122f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_SRC_COLOR:
13bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0300;
14bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLENDFACTOR_INV_SRC_COLOR:
15bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0301;
162f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_SRC_ALPHA:
17bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0302;
18bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
19bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0303;
202f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_DST_ALPHA:
21bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0304;
22bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLENDFACTOR_INV_DST_ALPHA:
23bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0305;
242f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_DST_COLOR:
25bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0306;
26bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLENDFACTOR_INV_DST_COLOR:
27bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0307;
282f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE:
29bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0308;
302f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_CONST_COLOR:
31bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8001;
322f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_INV_CONST_COLOR:
33bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8002;
34bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLENDFACTOR_CONST_ALPHA:
35bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8003;
362f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
37bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8004;
382f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
390feec292ddc279998a1e25c10ea70d211f7b4b62Ben Skeggs		return 0x0000;
402f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
412f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
422f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
432f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
442f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_blend_eqn(unsigned func)
452f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs{
462f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (func) {
472f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLEND_ADD:
48bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8006;
492f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLEND_MIN:
50bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8007;
512f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_BLEND_MAX:
52bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8008;
53bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLEND_SUBTRACT:
54bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x800a;
55bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_BLEND_REVERSE_SUBTRACT:
56bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x800b;
572f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
580feec292ddc279998a1e25c10ea70d211f7b4b62Ben Skeggs		return 0x8006;
592f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
602f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
612f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
622f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
632f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_logicop_func(unsigned func)
642f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs{
652f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (func) {
662f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_CLEAR:
67bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1500;
682f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_NOR:
69bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1508;
702f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_AND_INVERTED:
71bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1504;
722f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_COPY_INVERTED:
73bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150c;
742f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_AND_REVERSE:
75bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1502;
762f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_INVERT:
77bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150a;
782f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_XOR:
79bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1506;
802f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_NAND:
81bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150e;
822f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_AND:
83bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1501;
842f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_EQUIV:
85bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1509;
862f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_NOOP:
87bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1505;
882f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_OR_INVERTED:
89bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150d;
902f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_COPY:
91bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1503;
922f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_OR_REVERSE:
93bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150b;
942f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_OR:
95bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1507;
962f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_LOGICOP_SET:
97bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150f;
982f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
990feec292ddc279998a1e25c10ea70d211f7b4b62Ben Skeggs		return 0x1505;
1002f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
1012f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
1022f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
1032f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
1042f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_comparison_op(unsigned op)
1052f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs{
1062f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (op) {
1072f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_NEVER:
108bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0200;
1092f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_LESS:
110bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0201;
1112f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_EQUAL:
112bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0202;
1132f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_LEQUAL:
114bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0203;
1152f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_GREATER:
116bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0204;
1172f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_NOTEQUAL:
118bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0205;
1192f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_GEQUAL:
120bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0206;
1212f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_FUNC_ALWAYS:
122bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0207;
1232f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
1240feec292ddc279998a1e25c10ea70d211f7b4b62Ben Skeggs		return 0x0207;
1252f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
1262f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
1272f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
1282f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
1292f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_polygon_mode(unsigned mode)
1302f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs{
1312f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (mode) {
1322f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_POLYGON_MODE_POINT:
133bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1b00;
134bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_POLYGON_MODE_LINE:
135bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1b01;
136bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_POLYGON_MODE_FILL:
137bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1b02;
1382f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
1390feec292ddc279998a1e25c10ea70d211f7b4b62Ben Skeggs		return 0x1b02;
1402f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
1412f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
1422f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
1432f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
1442f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_stencil_op(unsigned op)
1452f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs{
1462f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (op) {
1472f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_STENCIL_OP_ZERO:
148bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0000;
149bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_STENCIL_OP_INVERT:
150bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x150a;
151bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs	case PIPE_STENCIL_OP_KEEP:
152bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1e00;
1532f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_STENCIL_OP_REPLACE:
154bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1e01;
1552f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_STENCIL_OP_INCR:
156bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1e02;
1572f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_STENCIL_OP_DECR:
158bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x1e03;
1592f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_STENCIL_OP_INCR_WRAP:
160bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8507;
1612f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_STENCIL_OP_DECR_WRAP:
162bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x8508;
1632f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
1640feec292ddc279998a1e25c10ea70d211f7b4b62Ben Skeggs		return 0x1e00;
1652f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
1662f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
1672f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
1682f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsstatic INLINE unsigned
1692f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggsnvgl_primitive(unsigned prim) {
1702f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	switch (prim) {
1712f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_POINTS:
172bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0001;
1732f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_LINES:
174bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0002;
1752f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_LINE_LOOP:
176bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0003;
1772f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_LINE_STRIP:
178bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0004;
1792f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_TRIANGLES:
180bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0005;
1812f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_TRIANGLE_STRIP:
182bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0006;
1832f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_TRIANGLE_FAN:
184bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0007;
1852f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_QUADS:
186bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0008;
1872f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_QUAD_STRIP:
188bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x0009;
1892f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	case PIPE_PRIM_POLYGON:
190bc1ca3793d661de343b956d66ef70605d7de2dbbBen Skeggs		return 0x000a;
1912f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	default:
192bb29d066dc5c5188bafadf7b702d44ed571e855ePekka Paalanen		return 0;
1932f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs	}
1942f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs}
1952f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs
1962f33b5b56e9221f2613b34cd1a1a9d82d5ed4303Ben Skeggs#endif
197