diff options
author | Patrice Mandin <patmandin@gmail.com> | 2009-12-03 22:09:29 +0100 |
---|---|---|
committer | Patrice Mandin <patmandin@gmail.com> | 2009-12-03 22:09:29 +0100 |
commit | 0e27e1306a7012153242320a8726078188eed27c (patch) | |
tree | 1022fe4ac85c8b13efe983b8c62bb3d59a68d13f /tcl_triangle.c | |
parent | 2df05f83685e690d38352a26ae6adbf9d009c8c8 (diff) |
Use buffer objects for fragment programs
Diffstat (limited to 'tcl_triangle.c')
-rw-r--r-- | tcl_triangle.c | 37 |
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) |