summaryrefslogtreecommitdiff
path: root/tcl_triangle.c
diff options
context:
space:
mode:
Diffstat (limited to 'tcl_triangle.c')
-rw-r--r--tcl_triangle.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/tcl_triangle.c b/tcl_triangle.c
index ac0cde8..32b8f1a 100644
--- a/tcl_triangle.c
+++ b/tcl_triangle.c
@@ -9,16 +9,17 @@
static void tcl_fp_tx0(void)
{
- volatile unsigned int *fragprog_map;
- uint64_t fragprog_offset;
+ uint32_t *map;
+ struct nouveau_bo *bo;
struct nouveau_grobj *subch3D = grobj[NvSub3D];
- fragprog_map = screen_allocmem(0, 0x1000, &fragprog_offset);
- if (!fragprog_map) {
+ bo = screen_allocmem(0x1000);
+ if (!bo) {
return;
}
- printf("fragprog alloc'd at 0x%lx mapped at %p\n",
- fragprog_offset, fragprog_map);
+ map = bo->map;
+
+ printf("fragprog mapped at %p\n", map);
/*
# 0x18009e82 0x1c9dc901 0x0001c900 0x0001c900
@@ -26,22 +27,28 @@ static void tcl_fp_tx0(void)
# 0x02803e81 0x1c9dc904 0x0001c901 0x0001c900
# INST 1: MULX R0 (TR0.xyzw), R1, attrib.color + END
*/
- fragprog_map[0] = 0x18009e82;
- fragprog_map[1] = 0x1c9dc901;
- fragprog_map[2] = 0x0001c900;
- fragprog_map[3] = 0x0001c900;
+ map[0] = 0x18009e82;
+ map[1] = 0x1c9dc901;
+ map[2] = 0x0001c900;
+ map[3] = 0x0001c900;
+
+ map[4] = 0x02803e81;
+ map[5] = 0x1c9dc904;
+ map[6] = 0x0001c901;
+ map[7] = 0x0001c900;
- fragprog_map[4] = 0x02803e81;
- fragprog_map[5] = 0x1c9dc904;
- fragprog_map[6] = 0x0001c901;
- fragprog_map[7] = 0x0001c900;
+ nouveau_bo_unmap(bo);
BEGIN_RING(chan, subch3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
- OUT_RING (chan, (uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
+ OUT_RELOCd(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_GART |
+ NOUVEAU_BO_RD | NOUVEAU_BO_LOW,
+ NV34TCL_FP_ACTIVE_PROGRAM_DMA0, 0);
BEGIN_RING(chan, subch3D, NV34TCL_FP_CONTROL, 1);
OUT_RING (chan, 0);
BEGIN_RING(chan, subch3D, NV34TCL_FP_REG_CONTROL, 1);
OUT_RING (chan, (1<<16)|4);
+
+ nouveau_bo_ref(NULL, &bo);
}
void tcl_triangle_fixed(void)