diff options
author | Ben Skeggs <[email protected]> | 2014-05-09 15:55:44 +1000 |
---|---|---|
committer | Ben Skeggs <[email protected]> | 2014-05-15 09:53:56 +1000 |
commit | 737477dac33d68b00b34019258d663945fbfeb56 (patch) | |
tree | 93690a4ca3e6374369ea8f94ea5a8571fa7f4871 /src/gallium/drivers/nouveau/nvc0/mme | |
parent | e48054d0364cfc4c92120ea90b6f526c3527230a (diff) |
nvc0: properly distribute macros in source form
Signed-off-by: Ben Skeggs <[email protected]>
Reviewed-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau/nvc0/mme')
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/mme/Makefile | 7 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/mme/com9097.mme | 225 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/mme/com9097.mme.h | 125 |
3 files changed, 357 insertions, 0 deletions
diff --git a/src/gallium/drivers/nouveau/nvc0/mme/Makefile b/src/gallium/drivers/nouveau/nvc0/mme/Makefile new file mode 100644 index 00000000000..1c0f5835973 --- /dev/null +++ b/src/gallium/drivers/nouveau/nvc0/mme/Makefile @@ -0,0 +1,7 @@ +ENVYAS?=envyas +TARGETS=com9097.mme.h + +all: $(TARGETS) + +$(TARGETS): %.mme.h: %.mme + $(ENVYAS) -a -w -mmacro $< -o $@ diff --git a/src/gallium/drivers/nouveau/nvc0/mme/com9097.mme b/src/gallium/drivers/nouveau/nvc0/mme/com9097.mme new file mode 100644 index 00000000000..da9975b5eb1 --- /dev/null +++ b/src/gallium/drivers/nouveau/nvc0/mme/com9097.mme @@ -0,0 +1,225 @@ +/* extrinsrt r1, r2, src, size, dst: replace bits [dst:dst+size) in r1 + * with bits [src:src+size) in r2 + * + * bra(n)z annul: no delay slot + */ + +/* Bitfield version of NVC0_3D_VERTEX_ARRAY_PER_INSTANCE[]. + * Args: size, bitfield + */ +.section #mme9097_per_instance_bf + parm $r3 + mov $r2 0x0 + maddr 0x1620 +loop: + mov $r1 (add $r1 -1) + send (extrshl $r3 $r2 0x1 0x0) + exit branz $r1 #loop + mov $r2 (add $r2 0x1) + +/* The comments above the macros describe what they *should* be doing, + * but we use less functionality for now. + */ + +/* + * for (i = 0; i < 8; ++i) + * [NVC0_3D_BLEND_ENABLE(i)] = BIT(i of arg); + * + * [3428] = arg; + * + * if (arg == 0 || [NVC0_3D_MULTISAMPLE_ENABLE] == 0) + * [0d9c] = 0; + * else + * [0d9c] = [342c]; + */ +.section #mme9097_blend_enables + maddr 0x14d8 + send (extrinsrt 0x0 $r1 0x0 0x1 0x0) + send (extrinsrt 0x0 $r1 0x1 0x1 0x0) + send (extrinsrt 0x0 $r1 0x2 0x1 0x0) + send (extrinsrt 0x0 $r1 0x3 0x1 0x0) + send (extrinsrt 0x0 $r1 0x4 0x1 0x0) + send (extrinsrt 0x0 $r1 0x5 0x1 0x0) + exit send (extrinsrt 0x0 $r1 0x6 0x1 0x0) + send (extrinsrt 0x0 $r1 0x7 0x1 0x0) + +/* + * uint64 limit = (parm(0) << 32) | parm(1); + * uint64 start = (parm(2) << 32); + * + * if (limit) { + * start |= parm(3); + * --limit; + * } else { + * start |= 1; + * } + * + * [0x1c04 + (arg & 0xf) * 16 + 0] = (start >> 32) & 0xff; + * [0x1c04 + (arg & 0xf) * 16 + 4] = start & 0xffffffff; + * [0x1f00 + (arg & 0xf) * 8 + 0] = (limit >> 32) & 0xff; + * [0x1f00 + (arg & 0xf) * 8 + 4] = limit & 0xffffffff; + */ +.section #mme9097_vertex_array_select + parm $r2 + parm $r3 + parm $r4 + parm $r5 + mov $r6 (extrinsrt 0x0 $r1 0x0 0x4 0x2) + mov $r7 (extrinsrt 0x0 $r1 0x0 0x4 0x1) + maddr $r6 (add $r6 0x1701) + send $r4 + send $r5 + maddr $r7 (add $r7 0x17c0) + exit send $r2 + send $r3 + +/* + * [GL_POLYGON_MODE_FRONT] = arg; + * + * if (BIT(31 of [0x3410])) + * [1a24] = 0x7353; + * + * if ([NVC0_3D_SP_SELECT(3)] == 0x31 || [NVC0_3D_SP_SELECT(4)] == 0x41) + * [02ec] = 0; + * else + * if ([GL_POLYGON_MODE_BACK] == GL_LINE || arg == GL_LINE) + * [02ec] = BYTE(1 of [0x3410]) << 4; + * else + * [02ec] = BYTE(0 of [0x3410]) << 4; + */ +.section #mme9097_poly_mode_front + read $r2 0x36c + read $r3 0x830 + mov $r7 (or $r1 $r2) + read $r4 0x840 + mov $r2 0x1 + mov $r6 0x60 + mov $r7 (and $r7 $r2) + braz $r7 #locn_0a_pmf + maddr 0x36b + mov $r6 0x200 +locn_0a_pmf: + mov $r7 (or $r3 $r4) + mov $r7 (and $r7 $r2) + braz $r7 #locn_0f_pmf + send $r1 + mov $r6 0x0 +locn_0f_pmf: + exit maddr 0xbb + send $r6 + +/* + * [GL_POLYGON_MODE_BACK] = arg; + * + * if (BIT(31 of [0x3410])) + * [1a24] = 0x7353; + * + * if ([NVC0_3D_SP_SELECT(3)] == 0x31 || [NVC0_3D_SP_SELECT(4)] == 0x41) + * [02ec] = 0; + * else + * if ([GL_POLYGON_MODE_FRONT] == GL_LINE || arg == GL_LINE) + * [02ec] = BYTE(1 of [0x3410]) << 4; + * else + * [02ec] = BYTE(0 of [0x3410]) << 4; + */ +/* NOTE: 0x3410 = 0x80002006 by default, + * POLYGON_MODE == GL_LINE check replaced by (MODE & 1) + * SP_SELECT(i) == (i << 4) | 1 check replaced by SP_SELECT(i) & 1 + */ +.section #mme9097_poly_mode_back + read $r2 0x36b + read $r3 0x830 + mov $r7 (or $r1 $r2) + read $r4 0x840 + mov $r2 0x1 + mov $r6 0x60 + mov $r7 (and $r7 $r2) + braz $r7 #locn_0a_pmb + maddr 0x36c + mov $r6 0x200 +locn_0a_pmb: + mov $r7 (or $r3 $r4) + mov $r7 (and $r7 $r2) + braz $r7 #locn_0f_pmb + send $r1 + mov $r6 0x0 +locn_0f_pmb: + exit maddr 0xbb + send $r6 + +/* + * [NVC0_3D_SP_SELECT(4)] = arg + * + * if BIT(31 of [0x3410]) == 0 + * [1a24] = 0x7353; + * + * if ([NVC0_3D_SP_SELECT(3)] == 0x31 || arg == 0x41) + * [02ec] = 0 + * else + * if (any POLYGON MODE == LINE) + * [02ec] = BYTE(1 of [3410]) << 4; + * else + * [02ec] = BYTE(0 of [3410]) << 4; // 02ec valid bits are 0xff1 + */ +.section #mme9097_gp_select + read $r2 0x36b + read $r3 0x36c + mov $r7 (or $r2 $r3) + read $r4 0x830 + mov $r2 0x1 + mov $r6 0x60 + mov $r7 (and $r7 $r2) + braz $r7 #locn_0a_gs + maddr 0x840 + mov $r6 0x200 +locn_0a_gs: + mov $r7 (or $r1 $r4) + mov $r7 (and $r7 $r2) + braz $r7 #locn_0f_gs + send $r1 + mov $r6 0x0 +locn_0f_gs: + exit maddr 0xbb + send $r6 + +/* + * [NVC0_3D_SP_SELECT(3)] = arg + * + * if BIT(31 of [0x3410]) == 0 + * [1a24] = 0x7353; + * + * if (arg == 0x31) { + * if (BIT(2 of [0x3430])) { + * int i = 15; do { --i; } while(i); + * [0x1a2c] = 0; + * } + * } + * + * if ([NVC0_3D_SP_SELECT(4)] == 0x41 || arg == 0x31) + * [02ec] = 0 + * else + * if ([any POLYGON_MODE] == GL_LINE) + * [02ec] = BYTE(1 of [3410]) << 4; + * else + * [02ec] = BYTE(0 of [3410]) << 4; + */ +.section #mme9097_tep_select + read $r2 0x36b + read $r3 0x36c + mov $r7 (or $r2 $r3) + read $r4 0x840 + mov $r2 0x1 + mov $r6 0x60 + mov $r7 (and $r7 $r2) + braz $r7 #locn_0a_ts + maddr 0x830 + mov $r6 0x200 +locn_0a_ts: + mov $r7 (or $r1 $r4) + mov $r7 (and $r7 $r2) + braz $r7 #locn_0f_ts + send $r1 + mov $r6 0x0 +locn_0f_ts: + exit maddr 0xbb + send $r6 diff --git a/src/gallium/drivers/nouveau/nvc0/mme/com9097.mme.h b/src/gallium/drivers/nouveau/nvc0/mme/com9097.mme.h new file mode 100644 index 00000000000..fd81a2f130e --- /dev/null +++ b/src/gallium/drivers/nouveau/nvc0/mme/com9097.mme.h @@ -0,0 +1,125 @@ +uint32_t mme9097_per_instance_bf[] = { +/* 0x0003: loop */ + 0x00000301, + 0x00000211, + 0x05880021, + 0xffffc911, + 0x0040d043, + 0xffff8897, + 0x00005211, +}; + +uint32_t mme9097_blend_enables[] = { + 0x05360021, + 0x00404042, + 0x00424042, + 0x00444042, + 0x00464042, + 0x00484042, + 0x004a4042, + 0x004c40c2, + 0x004e4042, +}; + +uint32_t mme9097_vertex_array_select[] = { + 0x00000201, + 0x00000301, + 0x00000401, + 0x00000501, + 0x11004612, + 0x09004712, + 0x05c07621, + 0x00002041, + 0x00002841, + 0x05f03f21, + 0x000010c1, + 0x00001841, +}; + +uint32_t mme9097_poly_mode_front[] = { + 0x00db0215, + 0x020c0315, +/* 0x000a: locn_0a_pmf */ + 0x00128f10, +/* 0x000f: locn_0f_pmf */ + 0x02100415, + 0x00004211, + 0x00180611, + 0x0014bf10, + 0x0000f807, + 0x00dac021, + 0x00800611, + 0x00131f10, + 0x0014bf10, + 0x0000f807, + 0x00000841, + 0x00000611, + 0x002ec0a1, + 0x00003041, +}; + +uint32_t mme9097_poly_mode_back[] = { + 0x00dac215, + 0x020c0315, +/* 0x000a: locn_0a_pmb */ + 0x00128f10, +/* 0x000f: locn_0f_pmb */ + 0x02100415, + 0x00004211, + 0x00180611, + 0x0014bf10, + 0x0000f807, + 0x00db0021, + 0x00800611, + 0x00131f10, + 0x0014bf10, + 0x0000f807, + 0x00000841, + 0x00000611, + 0x002ec0a1, + 0x00003041, +}; + +uint32_t mme9097_gp_select[] = { + 0x00dac215, + 0x00db0315, +/* 0x000a: locn_0a_gs */ + 0x0012d710, +/* 0x000f: locn_0f_gs */ + 0x020c0415, + 0x00004211, + 0x00180611, + 0x0014bf10, + 0x0000f807, + 0x02100021, + 0x00800611, + 0x00130f10, + 0x0014bf10, + 0x0000f807, + 0x00000841, + 0x00000611, + 0x002ec0a1, + 0x00003041, +}; + +uint32_t mme9097_tep_select[] = { + 0x00dac215, + 0x00db0315, +/* 0x000a: locn_0a_ts */ + 0x0012d710, +/* 0x000f: locn_0f_ts */ + 0x02100415, + 0x00004211, + 0x00180611, + 0x0014bf10, + 0x0000f807, + 0x020c0021, + 0x00800611, + 0x00130f10, + 0x0014bf10, + 0x0000f807, + 0x00000841, + 0x00000611, + 0x002ec0a1, + 0x00003041, +}; |