summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrice Mandin <patmandin@gmail.com>2009-11-28 23:10:49 +0100
committerPatrice Mandin <patmandin@gmail.com>2009-11-28 23:10:49 +0100
commit5442962d2bd3344035ab3b27716eaf02e9468f3b (patch)
tree6bc3f4cf34b97e860952ab93237acb4275513623
parentd530595cd82eae088667655f49affc771a572ca5 (diff)
Start adapting nv30_demo to libdrm nouveau
-rw-r--r--Makefile12
-rw-r--r--clip_rectangle.c21
-rw-r--r--context_surface_2d.c28
-rw-r--r--fifo.c109
-rw-r--r--fifo.h10
-rw-r--r--image_pattern.c36
-rw-r--r--imageblit.c48
-rw-r--r--main.c47
-rw-r--r--object.c67
-rw-r--r--object.h10
-rw-r--r--raster_op.c18
-rw-r--r--screen.c55
-rw-r--r--screen.h9
-rw-r--r--tcl_init.c572
-rw-r--r--tcl_triangle.c277
-rw-r--r--test_nops.c18
-rw-r--r--test_nops.h6
17 files changed, 633 insertions, 710 deletions
diff --git a/Makefile b/Makefile
index 466a5a3..b3a0193 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,14 @@
-SOURCES = main.c screen.c fifo.c object.c test_nops.c \
- tcl_init.c tcl_triangle.c imageblit.c context_surface_2d.c \
+SOURCES = main.c screen.c fifo.c object.c context_surface_2d.c \
+ tcl_init.c tcl_triangle.c imageblit.c \
clip_rectangle.c image_pattern.c raster_op.c
-HEADERS = screen.h fifo.h object.h test_nops.h \
+HEADERS = screen.h fifo.h object.h \
tcl_init.h tcl_triangle.h imageblit.h context_surface_2d.h \
clip_rectangle.h image_pattern.h raster_op.h nv30_fpinst.h
OBJECTS = $(SOURCES:%.c=%.o)
-LIBDRM_CFLAGS = $(shell pkg-config --cflags libdrm)
-LIBDRM_LIBS = $(shell pkg-config --libs libdrm)
+LIBDRM_CFLAGS = $(shell pkg-config --cflags libdrm_nouveau)
+LIBDRM_LIBS = $(shell pkg-config --libs libdrm_nouveau)
CFLAGS = -Wall $(LIBDRM_CFLAGS)
LDFLAGS = $(LIBDRM_LIBS)
@@ -19,7 +19,7 @@ DEPEND_FILE = .depend
all: $(PROGRAM)
clean:
- rm $(PROGRAM) $(OBJECTS) $(DEPEND_FILE)
+ rm -f $(PROGRAM) $(OBJECTS) $(DEPEND_FILE)
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
diff --git a/clip_rectangle.c b/clip_rectangle.c
index 0671ce5..0c51ced 100644
--- a/clip_rectangle.c
+++ b/clip_rectangle.c
@@ -1,22 +1,25 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_device.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
void clip_rectangle_init(void)
{
- printf("-- Clip rectangle, init\n");
+ struct nouveau_grobj *subchClipRect = grobj[NvSubClipRect];
- SetSubchannel(NvSubClipRect, NvClipRect);
+ printf("-- Clip rectangle, init\n");
- BEGIN_RING(NvSubClipRect, NV01_CONTEXT_CLIP_RECTANGLE_DMA_NOTIFY, 1);
- OUT_RING(NvSyncNotify);
+ BEGIN_RING(chan, subchClipRect, NV01_CONTEXT_CLIP_RECTANGLE_DMA_NOTIFY, 1);
+ OUT_RING (chan, NvSyncNotify);
- BEGIN_RING(NvSubClipRect, NV01_CONTEXT_CLIP_RECTANGLE_POINT, 2);
- OUT_RING ((viewport_y<<16) | viewport_x);
- OUT_RING ((viewport_h<<16) | viewport_w);
+ BEGIN_RING(chan, subchClipRect, NV01_CONTEXT_CLIP_RECTANGLE_POINT, 2);
+ OUT_RING (chan, (viewport_y<<16) | viewport_x);
+ OUT_RING (chan, (viewport_h<<16) | viewport_w);
- FIRE_RING();
+ FIRE_RING(chan);
}
diff --git a/context_surface_2d.c b/context_surface_2d.c
index accc6f1..2689ee5 100644
--- a/context_surface_2d.c
+++ b/context_surface_2d.c
@@ -1,31 +1,31 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
void context_surface_2d_init(void)
{
printf("-- Context surface 2D, init\n");
- SetSubchannel(NvSubCtxSurf2D, NvCtxSurf2D);
+ BEGIN_RING(chan, grobj[NvSubCtxSurf2D], NV04_CONTEXT_SURFACES_2D_DMA_NOTIFY, 1);
+ OUT_RING (chan, NvSyncNotify);
- BEGIN_RING(NvSubCtxSurf2D, NV04_CONTEXT_SURFACES_2D_DMA_NOTIFY, 1);
- OUT_RING (NvSyncNotify);
+ BEGIN_RING(chan, grobj[NvSubCtxSurf2D], NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_SOURCE, 2);
+ OUT_RING (chan, NvDmaFB);
+ OUT_RING (chan, NvDmaFB);
- BEGIN_RING(NvSubCtxSurf2D, NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_SOURCE, 2);
- OUT_RING (NvDmaFB);
- OUT_RING (NvDmaFB);
-
- BEGIN_RING(NvSubCtxSurf2D, NV04_CONTEXT_SURFACES_2D_FORMAT, 4);
- OUT_RING( (screen_bpp==32)
+ BEGIN_RING(chan, grobj[NvSubCtxSurf2D], NV04_CONTEXT_SURFACES_2D_FORMAT, 4);
+ OUT_RING (chan, (screen_bpp==32)
? NV04_CONTEXT_SURFACES_2D_FORMAT_A8R8G8B8
: NV04_CONTEXT_SURFACES_2D_FORMAT_R5G6B5
);
- OUT_RING ((screen_pitch<<16)|screen_pitch);
- OUT_RING (screen_offset); /* src */
- OUT_RING (screen_offset); /* dst */
+ OUT_RING (chan, (screen_pitch<<16)|screen_pitch);
+ OUT_RING (chan, screen_offset); /* src */
+ OUT_RING (chan, screen_offset); /* dst */
- FIRE_RING();
+ FIRE_RING(chan);
}
diff --git a/fifo.c b/fifo.c
index c7541c1..5cc2c0a 100644
--- a/fifo.c
+++ b/fifo.c
@@ -4,122 +4,25 @@
#include <stdint.h>
#include <xf86drm.h>
#include <nouveau_drm.h>
+#include <nouveau_channel.h>
#include "screen.h"
#include "object.h"
-#define DEBUG 0
-
/* Global variables */
-struct drm_nouveau_channel_alloc init;
-
-/* Local variables */
-
-static uint32_t *fifo = NULL;
-static uint32_t *fifo_regs = NULL;
-static uint32_t *notifier_block = NULL;
-
-static uint32_t fifo_current, fifo_free;
+struct nouveau_channel *chan = NULL;
/* Functions */
int fifo_open(void)
{
- int ret;
-
- init.fb_ctxdma_handle = NvDmaFB;
- init.tt_ctxdma_handle = NvDmaTT;
- ret = drmCommandWriteRead(drm_fd, DRM_NOUVEAU_CHANNEL_ALLOC, &init, sizeof(init));
- if (ret) {
- fprintf(stderr,"Failed to create GPU channel: %d\n", ret);
- return 1;
- }
-
- printf("Fifo %d: cb_handle=0x%08x, cb_size=0x%08x\n",
- init.channel, init.cmdbuf, init.cmdbuf_size);
-
- ret = drmMap(drm_fd, init.cmdbuf, init.cmdbuf_size, (void*)&fifo);
- if (ret) {
- fprintf(stderr, "Mapping DMA push buffer returned %d\n", ret);
- return 1;
- }
-
- ret = drmMap(drm_fd, init.ctrl, init.ctrl_size, (void*)&fifo_regs);
- if (ret) {
- fprintf(stderr, "Mapping FIFO regs returned %d\n", ret);
- return 1;
- }
-
- ret = drmMap(drm_fd, init.notifier, init.notifier_size, (void*)&notifier_block);
- if (ret) {
- fprintf(stderr, "Mapping notifier block returned %d\n", ret);
- return 1;
- }
-
- printf("FIFO:\t%p (0x%08x)\n", fifo, init.cmdbuf);
- printf("FIFO regs:\t%p (0x%08x)\n", fifo_regs, init.ctrl);
- printf("Notifiers:\t%p (0x%08x)\n", notifier_block, init.notifier);
- printf("PUT base:\t0x%08x\n", init.put_base);
-
- fifo_current = 0;
- fifo_free = (init.cmdbuf_size>>2) - 1;
- printf("FIFO current:\t0x%x free=0x%x\n", fifo_current, fifo_free);
- return 0;
-}
-
-void fifo_print_getput(void)
-{
- printf("FIFO put=0x%08x, get=0x%08x, current=0x%08x\n",
- fifo_regs[0x40/4],
- fifo_regs[0x44/4],
- fifo_current
- );
-}
-
-void OUT_RING(uint32_t data)
-{
-#if DEBUG
- printf("out_ring(0x%08x)\n", data);
-#else
- fifo[fifo_current++] = data;
-#endif
+ return nouveau_channel_alloc(dev, NvDmaFB, NvDmaTT, &chan);
}
-void OUT_RINGf(float data)
+void fifo_close(void)
{
- uint32_t v = *(uint32_t*) &data;
-#if DEBUG
- printf("out_ringf(0x%08x) = %f\n", v, data);
-#else
- fifo[fifo_current++] = v;
-#endif
-}
-
-void FIRE_RING(void)
-{
-#if DEBUG
- printf("fire_ring()\n");
-#else
- fifo_regs[0x40/4] = (fifo_current<<2) + init.put_base;
-#endif
-}
-
-void BEGIN_RING(int subchannel, int method, int size)
-{
- size &= (1<<11)-1;
- subchannel &= (1<<3)-1;
- method &= 0x40001ffc;
- if (fifo_free<=size) {
- fprintf(stderr,"FIFO full\n");
- return;
+ if (chan) {
+ nouveau_channel_free(&chan);
}
- OUT_RING(method|(size<<18)|(subchannel<<13));
- fifo_free -= size;
-}
-
-void SetSubchannel(int subchannel, int obj)
-{
- BEGIN_RING(subchannel, 0, 1);
- OUT_RING(obj);
}
diff --git a/fifo.h b/fifo.h
index 08f7e37..95b9a4c 100644
--- a/fifo.h
+++ b/fifo.h
@@ -11,17 +11,11 @@
/* Global variables */
-struct drm_nouveau_channel_alloc init;
+extern struct nouveau_channel *chan;
/* Functions */
int fifo_open(void);
-void fifo_print_getput(void);
-
-void OUT_RING(uint32_t data);
-void OUT_RINGf(float data);
-void FIRE_RING(void);
-void BEGIN_RING(int subchannel, int method, int size);
-void SetSubchannel(int subchannel, int obj);
+void fifo_close(void);
#endif
diff --git a/image_pattern.c b/image_pattern.c
index ce59639..a98f7a2 100644
--- a/image_pattern.c
+++ b/image_pattern.c
@@ -1,35 +1,37 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
void image_pattern_init(void)
{
- printf("-- Image pattern, init\n");
+ struct nouveau_grobj *subchImagePattern = grobj[NvSubImagePattern];
- SetSubchannel(NvSubImagePattern, NvImagePattern);
+ printf("-- Image pattern, init\n");
- BEGIN_RING(NvSubImagePattern, NV04_IMAGE_PATTERN_DMA_NOTIFY, 1);
- OUT_RING(NvSyncNotify);
+ BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_DMA_NOTIFY, 1);
+ OUT_RING (chan, NvSyncNotify);
- BEGIN_RING(NvSubImagePattern, NV04_IMAGE_PATTERN_MONOCHROME_FORMAT, 3);
- OUT_RING(NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_CGA6);
- OUT_RING(NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_8X8);
- OUT_RING(NV04_IMAGE_PATTERN_PATTERN_SELECT_MONO);
+ BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_MONOCHROME_FORMAT, 3);
+ OUT_RING (chan, NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_CGA6);
+ OUT_RING (chan, NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_8X8);
+ OUT_RING (chan, NV04_IMAGE_PATTERN_PATTERN_SELECT_MONO);
- BEGIN_RING(NvSubImagePattern, NV04_IMAGE_PATTERN_COLOR_FORMAT, 1);
- OUT_RING( (screen_bpp == 32)
+ BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_COLOR_FORMAT, 1);
+ OUT_RING (chan, (screen_bpp == 32)
? NV04_IMAGE_PATTERN_COLOR_FORMAT_A8R8G8B8
: NV04_IMAGE_PATTERN_COLOR_FORMAT_A16R5G6B5
);
- BEGIN_RING(NvSubImagePattern, NV04_IMAGE_PATTERN_MONOCHROME_COLOR0, 4);
- OUT_RING(0x5a6b7d8d); /* color for bit=0 */
- OUT_RING(0xf9e8d7c6); /* color for bit=1 */
- OUT_RING(0x5a5a5a5a); /* pattern */
- OUT_RING(0xaa55aa55);
+ BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_MONOCHROME_COLOR0, 4);
+ OUT_RING (chan, 0x5a6b7d8d); /* color for bit=0 */
+ OUT_RING (chan, 0xf9e8d7c6); /* color for bit=1 */
+ OUT_RING (chan, 0x5a5a5a5a); /* pattern */
+ OUT_RING (chan, 0xaa55aa55);
- FIRE_RING();
+ FIRE_RING(chan);
}
diff --git a/imageblit.c b/imageblit.c
index 8537d8a..bb0fbb3 100644
--- a/imageblit.c
+++ b/imageblit.c
@@ -1,44 +1,46 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
void imageblit_init(void)
{
- printf("-- ImageBlit, init\n");
+ struct nouveau_grobj *subchImageBlit = grobj[NvSubImageBlit];
- SetSubchannel(NvSubImageBlit, NvImageBlit);
+ printf("-- ImageBlit, init\n");
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_DMA_NOTIFY, 1);
- OUT_RING(NvSyncNotify);
+ BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_DMA_NOTIFY, 1);
+ OUT_RING (chan, NvSyncNotify);
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_SURFACE, 1);
- OUT_RING(NvCtxSurf2D);
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_CLIP_RECTANGLE, 1);
- OUT_RING(NvClipRect);
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_PATTERN, 1);
- OUT_RING(NvImagePattern);
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_ROP, 1);
- OUT_RING(NvRasterOp);
+ BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_SURFACE, 1);
+ OUT_RING (chan, NvCtxSurf2D);
+ BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_CLIP_RECTANGLE, 1);
+ OUT_RING (chan, NvClipRect);
+ BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_PATTERN, 1);
+ OUT_RING (chan, NvImagePattern);
+ BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_ROP, 1);
+ OUT_RING (chan, NvRasterOp);
- FIRE_RING();
+ FIRE_RING(chan);
}
void imageblit_copy(int sx,int sy, int dx,int dy, int w,int h)
{
- printf("-- ImageBlit, copy\n");
+ struct nouveau_grobj *subchImageBlit = grobj[NvSubImageBlit];
- SetSubchannel(NvSubImageBlit, NvImageBlit);
+ printf("-- ImageBlit, copy\n");
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_OPERATION, 1);
- OUT_RING (NV04_IMAGE_BLIT_OPERATION_SRCCOPY);
+ BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_OPERATION, 1);
+ OUT_RING (chan, NV04_IMAGE_BLIT_OPERATION_SRCCOPY);
- BEGIN_RING(NvSubImageBlit, NV01_IMAGE_BLIT_POINT_IN, 3);
- OUT_RING ((sy<<16)|sx);
- OUT_RING ((dy<<16)|dx);
- OUT_RING ((h<<16)|w);
+ BEGIN_RING(chan, subchImageBlit, NV01_IMAGE_BLIT_POINT_IN, 3);
+ OUT_RING (chan, (sy<<16)|sx);
+ OUT_RING (chan, (dy<<16)|dx);
+ OUT_RING (chan, (h<<16)|w);
- FIRE_RING();
+ FIRE_RING(chan);
}
diff --git a/main.c b/main.c
index f373f3d..888c82f 100644
--- a/main.c
+++ b/main.c
@@ -1,12 +1,13 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_notifier.h>
+#include <nouveau_device.h>
#include "screen.h"
#include "fifo.h"
#include "object.h"
-#include "nouveau_class.h"
-
-#include "test_nops.h"
#include "context_surface_2d.h"
#include "imageblit.h"
#include "image_pattern.h"
@@ -15,29 +16,52 @@
#include "tcl_init.h"
#include "tcl_triangle.h"
-/* Choose your NV3X TCL engine */
-#define CLASS_3D NV30TCL
-/*#define CLASS_3D NV34TCL
-#define CLASS_3D NV35TCL*/
+#define NV30TCL_CHIPSET_3X_MASK 0x00000003
+#define NV34TCL_CHIPSET_3X_MASK 0x00000010
+#define NV35TCL_CHIPSET_3X_MASK 0x000001e0
int main(int argc, char **argv)
{
+ unsigned int rankine_class = 0;
+
if (screen_open(2960, 1050, 32)!=0) {
return -1;
}
- /*screen_offset = 0; */
+
+ switch (dev->chipset & 0xf0) {
+ case 0x30:
+ if (NV30TCL_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f)))
+ rankine_class = NV30TCL;
+ else
+ if (NV34TCL_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f)))
+ rankine_class = NV34TCL;
+ else
+ if (NV35TCL_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f)))
+ rankine_class = NV35TCL;
+ break;
+ default:
+ break;
+ }
+
+ if (rankine_class == 0) {
+ printf("Unsupported chipset NV%02x\n", dev->chipset & 0xff);
+ screen_close();
+ return -1;
+ }
if (fifo_open()!=0) {
screen_close();
return -1;
}
- if (object_list_create(CLASS_3D)!=0) {
+ if (object_list_create(rankine_class)!=0) {
+ fifo_close();
screen_close();
return -1;
}
- /*test_nops();*/
+#if 0
+ /*screen_offset = 0; */
context_surface_2d_init();
image_pattern_init();
@@ -59,7 +83,10 @@ int main(int argc, char **argv)
tcl_triangle_tx0();
printf("coincoin\n");
+#endif
+ object_list_close();
+ fifo_close();
screen_close();
return 0;
}
diff --git a/object.c b/object.c
index abe2bc4..2d20f79 100644
--- a/object.c
+++ b/object.c
@@ -1,67 +1,60 @@
#include <stdio.h>
#include <xf86drm.h>
#include <nouveau_drm.h>
+#include <nouveau_class.h>
+#include <nouveau_notifier.h>
+#include <nouveau_grobj.h>
#include "screen.h"
#include "fifo.h"
#include "object.h"
-#include "nouveau_class.h"
-struct drm_nouveau_notifierobj_alloc o_nvsyncnotify;
+struct nouveau_notifier *notifier = NULL;
-static int object_create(int handle, int num_class)
-{
- int ret;
- struct drm_nouveau_grobj_alloc o_ctx;
-
- o_ctx.channel = init.channel;
- o_ctx.handle = handle;
- o_ctx.class = num_class;
- ret = drmCommandWrite(drm_fd, DRM_NOUVEAU_GROBJ_ALLOC, &o_ctx, sizeof(o_ctx));
- if (ret) {
- fprintf(stderr, "Failed to create object, handle 0x%08x, class 0x%08x\n", handle, num_class);
- }
- return ret;
-}
-
-static int notifier_obj_create(struct drm_nouveau_notifierobj_alloc *o_ctx, int handle, int count)
-{
- int ret;
-
- o_ctx->channel = init.channel;
- o_ctx->handle = handle;
- o_ctx->count = count;
- ret = drmCommandWriteRead(drm_fd, DRM_NOUVEAU_NOTIFIEROBJ_ALLOC, o_ctx, sizeof(*o_ctx));
- if (ret) {
- fprintf(stderr, "failed to create handle=0x%08x, class 0x%08x\n", handle, count);
- }
- return ret;
-}
+struct nouveau_grobj *grobj[6]={
+ NULL, NULL, NULL,
+ NULL, NULL, NULL
+};
int object_list_create(int class_3d)
{
- if (object_create(Nv3D, class_3d)!=0) {
+ if (nouveau_grobj_alloc(chan, Nv3D, class_3d, &grobj[NvSub3D])) {
return 1;
}
- if (object_create(NvCtxSurf2D, NV30_CONTEXT_SURFACES_2D)!=0) {
+ if (nouveau_grobj_alloc(chan, NvCtxSurf2D, NV04_CONTEXT_SURFACES_2D, &grobj[NvSubCtxSurf2D])) {
return 1;
}
- if (object_create(NvImageBlit, NV12_IMAGE_BLIT)!=0) {
+ if (nouveau_grobj_alloc(chan, NvImageBlit, NV12_IMAGE_BLIT, &grobj[NvSubImageBlit])) {
return 1;
}
- if (object_create(NvImagePattern, NV04_IMAGE_PATTERN)!=0) {
+ if (nouveau_grobj_alloc(chan, NvImagePattern, NV04_IMAGE_PATTERN, &grobj[NvSubImagePattern])) {
return 1;
}
- if (object_create(NvRasterOp, NV03_CONTEXT_ROP)!=0) {
+ if (nouveau_grobj_alloc(chan, NvRasterOp, NV03_CONTEXT_ROP, &grobj[NvSubRasterOp])) {
return 1;
}
- if (object_create(NvClipRect, NV01_CONTEXT_CLIP_RECTANGLE)!=0) {
+ if (nouveau_grobj_alloc(chan, NvClipRect, NV01_CONTEXT_CLIP_RECTANGLE, &grobj[NvSubClipRect])) {
return 1;
}
- if (notifier_obj_create(&o_nvsyncnotify, NvSyncNotify, 1)!=0) {
+ if (nouveau_notifier_alloc(chan, NvSyncNotify, 1, &notifier)!=0) {
return 1;
}
return 0;
}
+
+void object_list_close(void)
+{
+ int i;
+
+ for (i=0; i<6; i++) {
+ if (grobj[i]) {
+ nouveau_grobj_free(&grobj[i]);
+ }
+ }
+
+ if (notifier) {
+ nouveau_notifier_free(&notifier);
+ }
+}
diff --git a/object.h b/object.h
index d87065a..e140e76 100644
--- a/object.h
+++ b/object.h
@@ -5,8 +5,8 @@
enum Objects {
NvSyncNotify = 0xD0000001,
- NvDmaFB = 0xD0FB0001,
- NvDmaTT = 0xD0AA0001,
+ NvDmaFB = 0xbeef0201,
+ NvDmaTT = 0xbeef0202,
Nv3D = 0x80970001,
NvImageBlit = 0x809F0001,
NvCtxSurf2D = 0x80620001,
@@ -24,8 +24,14 @@ enum Subchannels {
NvSubImagePattern
};
+/* Variables */
+
+extern struct nouveau_notifier *notifier;
+extern struct nouveau_grobj *grobj[6];
+
/* Functions */
int object_list_create(int class_3d);
+void object_list_close(void);
#endif
diff --git a/raster_op.c b/raster_op.c
index 2d0b10b..1170f24 100644
--- a/raster_op.c
+++ b/raster_op.c
@@ -1,24 +1,26 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
void raster_op_init(void)
{
- printf("-- Raster operation, init\n");
+ struct nouveau_grobj *subchRasterOp = grobj[NvSubRasterOp];
- SetSubchannel(NvSubRasterOp, NvRasterOp);
+ printf("-- Raster operation, init\n");
- BEGIN_RING(NvSubRasterOp, NV03_CONTEXT_ROP_DMA_NOTIFY, 1);
- OUT_RING (NvSyncNotify);
+ BEGIN_RING(chan, subchRasterOp, NV03_CONTEXT_ROP_DMA_NOTIFY, 1);
+ OUT_RING (chan, NvSyncNotify);
- BEGIN_RING(NvSubRasterOp, NV03_CONTEXT_ROP_ROP, 1);
- OUT_RING (
+ BEGIN_RING(chan, subchRasterOp, NV03_CONTEXT_ROP_ROP, 1);
+ OUT_RING (chan,
NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_OR |
NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_OR
);
- FIRE_RING();
+ FIRE_RING(chan);
}
diff --git a/screen.c b/screen.c
index 73e7ca5..23d2549 100644
--- a/screen.c
+++ b/screen.c
@@ -3,12 +3,16 @@
#include <stdio.h>
#include <stdint.h>
#include <xf86drm.h>
+
#include <nouveau_drm.h>
+#include <nouveau_drmif.h>
+
+#include "object.h"
/* Global variables */
int screen_width;
-int screen_height;
+int screen_height;
int screen_bpp;
int screen_offset;
@@ -17,21 +21,13 @@ int screen_pitch;
int viewport_x=32, viewport_y=32;
int viewport_w=512, viewport_h=512;
-uint32_t vram_base_phys = 0;
-uint32_t vram_size = 0;
-uint32_t tt_base_phys = 0;
-uint32_t tt_size = 0;
-
int drm_fd = -1;
+struct nouveau_device *dev = NULL;
/* Local variables */
static int drm_ready = 0;
-static drm_context_t drm_context;
-
-/* Local functions */
-
-static uint64_t get_param(unsigned int param);
+/*static drm_context_t drm_context;*/
/* Functions */
@@ -46,6 +42,25 @@ int screen_open(int width, int height, int bpp)
return 1;
}
+ ret = nouveau_device_open_existing(&dev, 0, drm_fd, 0);
+ if (ret)
+ return 1;
+
+ printf("screen: chipset: 0x%08x\n", dev->chipset);
+ printf("screen: vm_vram_base: 0x%lx\n", dev->vm_vram_base);
+ printf("screen: vm_vram_size: %d MB\n", (int) (dev->vm_vram_size >> 20));
+ printf("screen: vm_gart_size: %d MB\n", (int) (dev->vm_gart_size >> 20));
+
+#if 0
+ int ret;
+
+ drm_fd = drmOpen("nouveau", 0);
+ if (drm_fd < 0) {
+ drmError(drm_fd, __func__);
+ fprintf(stderr, "failed to open drm\n");
+ return 1;
+ }
+
ret=drmCreateContext(drm_fd, &drm_context);
if (ret) {
drmError(ret, __func__);
@@ -74,32 +89,25 @@ int screen_open(int width, int height, int bpp)
tt_base_phys = (uint32_t) get_param(NOUVEAU_GETPARAM_AGP_PHYSICAL);
tt_size = (uint32_t) get_param(NOUVEAU_GETPARAM_AGP_SIZE);
printf("TT:\t%p 0x%08x\n", tt_base_phys, tt_size);
-
+#endif
drm_ready=1;
return 0;
}
void screen_close(void)
{
- if (drm_ready) {
- drmDestroyContext(drm_fd, drm_context);
+ if (dev) {
+ nouveau_device_close(&dev);
}
if (drm_fd>=0) {
drmClose(drm_fd);
}
}
-static uint64_t get_param(unsigned int param)
-{
- struct drm_nouveau_getparam getp;
-
- getp.param = param;
- drmCommandWriteRead(drm_fd, DRM_NOUVEAU_GETPARAM, &getp, sizeof(getp));
- return getp.value;
-}
-
void *screen_allocmem(int agp, int size, uint64_t *ofs)
{
+ return NULL;
+#if 0
struct drm_nouveau_mem_alloc mema;
void *map;
int ret;
@@ -123,4 +131,5 @@ void *screen_allocmem(int agp, int size, uint64_t *ofs)
}
return map;
+#endif
}
diff --git a/screen.h b/screen.h
index 9e01afc..1524dde 100644
--- a/screen.h
+++ b/screen.h
@@ -3,10 +3,8 @@
#ifndef SCREEN_H
#define SCREEN_H
-#include <stdint.h>
-
extern int screen_width;
-extern int screen_height;
+extern int screen_height;
extern int screen_bpp;
extern int screen_offset;
@@ -15,12 +13,13 @@ extern int screen_pitch;
extern int viewport_x, viewport_y;
extern int viewport_w, viewport_h;
-extern uint32_t vram_base_phys;
+/*extern uint32_t vram_base_phys;
extern uint32_t vram_size;
extern uint32_t tt_base_phys;
-extern uint32_t tt_size;
+extern uint32_t tt_size;*/
extern int drm_fd;
+extern struct nouveau_device *dev;
/* Open DRM device, setup using given dimensions */
int screen_open(int width, int height, int bpp);
diff --git a/tcl_init.c b/tcl_init.c
index 361a490..9dac19b 100644
--- a/tcl_init.c
+++ b/tcl_init.c
@@ -1,9 +1,12 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
+
#include "nv30_fpinst.h"
static void tcl_fp_color(void)
@@ -12,13 +15,14 @@ static void tcl_fp_color(void)
000428e4 size 1, subchannel 1 (0xbeef3097),offset 0x08e4,increment
# NV30_TCL_PRIMITIVE_3D_ACTIVE_PROGRAM = 0x07bfef01
# -- program at 0x0xad7e3000 - 0x20D000
-# 0x01803e81 0x1c9dc901 0x0001c900 0x0001c900
+# 0x01803e81 0x1c9dc901 0x0001c900 0x0001c900
# INST 0: MOVX R0 (TR0.xyzw), attrib.color + END
07bfef01 NV30TCL.FP_ACTIVE_PROGRAM = DMA0=TRUE | DMA1=FALSE | OFFSET=0x07bfef00
#endif
volatile unsigned int *fragprog_map;
uint64_t fragprog_offset;
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
fragprog_map = screen_allocmem(0, 0x1000, &fragprog_offset);
if (!fragprog_map) {
@@ -42,12 +46,12 @@ static void tcl_fp_color(void)
NV30FP_LAST_INST;
*/
- BEGIN_RING(NvSub3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
- OUT_RING ((uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
- BEGIN_RING(NvSub3D, NV34TCL_FP_CONTROL, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_FP_REG_CONTROL, 1);
- OUT_RING((1<<16)|4);
+ BEGIN_RING(chan, subch3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
+ OUT_RING (chan, (uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
+ 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);
}
static void tcl_fp_nop(void)
@@ -56,13 +60,14 @@ static void tcl_fp_nop(void)
000428e4 size 1, subchannel 1 (0xbeef3097),offset 0x08e4,increment
# NV30_TCL_PRIMITIVE_3D_ACTIVE_PROGRAM = 0x07bfef41
# -- program at 0x0xad7e3010 - 0x20D010
-# 0x00000001 0x00000000 0x00000000 0x00000000
+# 0x00000001 0x00000000 0x00000000 0x00000000
# INST 0: NOP (FL0.xxxx) + END
07bfef41 NV30TCL.FP_ACTIVE_PROGRAM = DMA0=TRUE | DMA1=FALSE | OFFSET=0x07bfef40
#endif
volatile unsigned int *fragprog_map;
uint64_t fragprog_offset;
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
fragprog_map = screen_allocmem(0, 0x1000, &fragprog_offset);
if (!fragprog_map) {
@@ -74,312 +79,311 @@ static void tcl_fp_nop(void)
* NOP
*/
fragprog_map[0] = 1;
- fragprog_map[1] =
+ fragprog_map[1] =
fragprog_map[2] =
fragprog_map[3] = 0;
- BEGIN_RING(NvSub3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
- OUT_RING ((uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
- BEGIN_RING(NvSub3D, NV34TCL_FP_CONTROL, 1);
- OUT_RING(0x40);
- BEGIN_RING(NvSub3D, NV34TCL_FP_REG_CONTROL, 1);
- OUT_RING((1<<16)|4);
+ BEGIN_RING(chan, subch3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
+ OUT_RING (chan, (uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
+ BEGIN_RING(chan, subch3D, NV34TCL_FP_CONTROL, 1);
+ OUT_RING (chan, 0x40);
+ BEGIN_RING(chan, subch3D, NV34TCL_FP_REG_CONTROL, 1);
+ OUT_RING (chan, (1<<16)|4);
}
void tcl_init(void)
{
int i;
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
+ struct nouveau_grobj *subchImageBlit = grobj[NvSubImageBlit];
printf("-- TCL init\n");
- SetSubchannel(NvSubImageBlit, NvImageBlit);
- SetSubchannel(NvSub3D, Nv3D);
-
- BEGIN_RING(NvSub3D, NV34TCL_DMA_NOTIFY, 1);
- OUT_RING(NvSyncNotify);
-
- BEGIN_RING(NvSub3D, NV34TCL_DMA_TEXTURE0, 3);
- OUT_RING(NvDmaFB); /* beef0201 184 texture0 */
- OUT_RING(NvDmaTT); /* beef0202 188 texture1 */
- OUT_RING(NvDmaFB); /* beef0201 18c color1 */
- BEGIN_RING(NvSub3D, NV34TCL_DMA_COLOR0, 2);
- OUT_RING(NvDmaFB); /* beef0201 194 color0 */
- OUT_RING(NvDmaFB); /* beef0201 198 zeta */
- BEGIN_RING(NvSub3D, NV34TCL_DMA_IN_MEMORY7, 2);
- OUT_RING(NvDmaFB); /* beef0201 1ac */
- OUT_RING(NvDmaFB); /* beef0201 1b0 */
+ BEGIN_RING(chan, subch3D, NV34TCL_DMA_NOTIFY, 1);
+ OUT_RING (chan, NvSyncNotify);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_DMA_TEXTURE0, 3);
+ OUT_RING (chan, NvDmaFB); /* beef0201 184 texture0 */
+ OUT_RING (chan, NvDmaTT); /* beef0202 188 texture1 */
+ OUT_RING (chan, NvDmaFB); /* beef0201 18c color1 */
+ BEGIN_RING(chan, subch3D, NV34TCL_DMA_COLOR0, 2);
+ OUT_RING (chan, NvDmaFB); /* beef0201 194 color0 */
+ OUT_RING (chan, NvDmaFB); /* beef0201 198 zeta */
+ BEGIN_RING(chan, subch3D, NV34TCL_DMA_IN_MEMORY7, 2);
+ OUT_RING (chan, NvDmaFB); /* beef0201 1ac */
+ OUT_RING (chan, NvDmaFB); /* beef0201 1b0 */
#if 0
000421a4 size 1, subchannel 1 (0xbeef3097),offset 0x01a4,increment
beef1e00 NV30TCL.DMA_FENCE = NV01_MEMORY_LOCAL_BANKED
000421a8 size 1, subchannel 1 (0xbeef3097),offset 0x01a8,increment
beef0351 NV30TCL.DMA_QUERY = NV01_MEMORY_LOCAL_BANKED
#endif
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_TX_ORIGIN, 1);
- OUT_RING(0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_TX_ORIGIN, 1);
+ OUT_RING (chan, 0);
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_CLIP_HORIZ(0), 1);
- OUT_RING((viewport_w-1)<<16);
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_CLIP_VERT(0), 1);
- OUT_RING((viewport_h-1)<<16);
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_CLIP_HORIZ(0), 1);
+ OUT_RING (chan, (viewport_w-1)<<16);
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_CLIP_VERT(0), 1);
+ OUT_RING (chan, (viewport_h-1)<<16);
for (i=1; i<8; i++) {
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_CLIP_HORIZ(i), 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_CLIP_VERT(i), 1);
- OUT_RING(0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_CLIP_HORIZ(i), 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_CLIP_VERT(i), 1);
+ OUT_RING (chan, 0);
}
- BEGIN_RING(NvSub3D, 0x2bc /* NV34TCL_VIEWPORT_CLIP_MODE */, 1);
- OUT_RING(0);
-
- BEGIN_RING(NvSub3D, 0x3b0, 1);
- OUT_RING(0x10<<16);
- BEGIN_RING(NvSub3D, 0x1454, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, 0x1d80, 1);
- OUT_RING(3);
-
- BEGIN_RING(NvSub3D, 0x1e98, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, 0x17e0, 3);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
-
- BEGIN_RING(NvSub3D, 0x1f80, 16);
+ BEGIN_RING(chan, subch3D, 0x2bc /* NV34TCL_VIEWPORT_CLIP_MODE */, 1);
+ OUT_RING (chan, 0);
+
+ BEGIN_RING(chan, subch3D, 0x3b0, 1);
+ OUT_RING (chan, 0x10<<16);
+ BEGIN_RING(chan, subch3D, 0x1454, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, 0x1d80, 1);
+ OUT_RING (chan, 3);
+
+ BEGIN_RING(chan, subch3D, 0x1e98, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, 0x17e0, 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+
+ BEGIN_RING(chan, subch3D, 0x1f80, 16);
for (i=0; i<16; i++) {
- OUT_RING((i==8) ? 0xffff : 0);
+ OUT_RING(chan, (i==8) ? 0xffff : 0);
}
- BEGIN_RING(NvSub3D, 0x120, 3);
- OUT_RING(0);
- OUT_RING(1);
- OUT_RING(2);
-
- BEGIN_RING(NvSubImageBlit, 0x120, 3);
- OUT_RING(0);
- OUT_RING(1);
- OUT_RING(2);
-
- BEGIN_RING(NvSub3D, 0x1d88, 1);
- OUT_RING(0x1200);
-
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_HORIZ, 2);
- OUT_RING(viewport_w<<16);
- OUT_RING(viewport_h<<16);
- BEGIN_RING(NvSub3D, NV34TCL_SCISSOR_HORIZ, 2);
- OUT_RING(viewport_w<<16);
- OUT_RING(viewport_h<<16);
- BEGIN_RING(NvSub3D, NV34TCL_RT_HORIZ, 2);
- OUT_RING(viewport_w<<16);
- OUT_RING(viewport_h<<16);
-
- BEGIN_RING(NvSub3D, NV34TCL_RT_FORMAT, 1);
- OUT_RING(NV34TCL_RT_FORMAT_TYPE_LINEAR | NV34TCL_RT_FORMAT_ZETA_Z24S8 | NV34TCL_RT_FORMAT_COLOR_X8R8G8B8);
- BEGIN_RING(NvSub3D, NV34TCL_RT_ENABLE, 1);
- OUT_RING(NV34TCL_RT_ENABLE_COLOR0);
-
- BEGIN_RING(NvSub3D, 0x1da4, 1);
- OUT_RING(0);
-
- BEGIN_RING(NvSub3D, NV34TCL_COLOR0_PITCH, 5);
- OUT_RING((screen_pitch<<16)|screen_pitch); /* zeta_pitch, color0_pitch */
- OUT_RING(screen_offset); /* color0_offset */
- OUT_RING(screen_offset + viewport_w*(screen_bpp/8)); /* zeta_offset, on the right of color buffer */
- OUT_RING(screen_offset); /* color1_offset */
- OUT_RING(screen_pitch); /* color1_pitch */
-
- BEGIN_RING(NvSub3D, NV34TCL_LMA_DEPTH_PITCH, 2);
- OUT_RING(screen_pitch);
- OUT_RING(screen_offset + viewport_h * screen_pitch); /* lma below color buffer */
-
- BEGIN_RING(NvSub3D, 0x234, 1);
- OUT_RING(3);
-
- BEGIN_RING(NvSub3D, NV34TCL_ALPHA_FUNC_ENABLE, 3);
- OUT_RING(0);
- OUT_RING(0x207);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_RC_ENABLE, 1);
- OUT_RING(0);
+ BEGIN_RING(chan, subch3D, 0x120, 3);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 1);
+ OUT_RING (chan, 2);
+
+ BEGIN_RING(chan, subchImageBlit, 0x120, 3);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 1);
+ OUT_RING (chan, 2);
+
+ BEGIN_RING(chan, subch3D, 0x1d88, 1);
+ OUT_RING (chan, 0x1200);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_HORIZ, 2);
+ OUT_RING (chan, viewport_w<<16);
+ OUT_RING (chan, viewport_h<<16);
+ BEGIN_RING(chan, subch3D, NV34TCL_SCISSOR_HORIZ, 2);
+ OUT_RING (chan, viewport_w<<16);
+ OUT_RING (chan, viewport_h<<16);
+ BEGIN_RING(chan, subch3D, NV34TCL_RT_HORIZ, 2);
+ OUT_RING (chan, viewport_w<<16);
+ OUT_RING (chan, viewport_h<<16);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_RT_FORMAT, 1);
+ OUT_RING (chan, NV34TCL_RT_FORMAT_TYPE_LINEAR | NV34TCL_RT_FORMAT_ZETA_Z24S8 | NV34TCL_RT_FORMAT_COLOR_X8R8G8B8);
+ BEGIN_RING(chan, subch3D, NV34TCL_RT_ENABLE, 1);
+ OUT_RING (chan, NV34TCL_RT_ENABLE_COLOR0);
+
+ BEGIN_RING(chan, subch3D, 0x1da4, 1);
+ OUT_RING (chan, 0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_COLOR0_PITCH, 5);
+ OUT_RING (chan, (screen_pitch<<16)|screen_pitch); /* zeta_pitch, color0_pitch */
+ OUT_RING (chan, screen_offset); /* color0_offset */
+ OUT_RING (chan, screen_offset + viewport_w*(screen_bpp/8)); /* zeta_offset, on the right of color buffer */
+ OUT_RING (chan, screen_offset); /* color1_offset */
+ OUT_RING (chan, screen_pitch); /* color1_pitch */
+
+ BEGIN_RING(chan, subch3D, NV34TCL_LMA_DEPTH_PITCH, 2);
+ OUT_RING (chan, screen_pitch);
+ OUT_RING (chan, screen_offset + viewport_h * screen_pitch); /* lma below color buffer */
+
+ BEGIN_RING(chan, subch3D, 0x234, 1);
+ OUT_RING (chan, 3);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_ALPHA_FUNC_ENABLE, 3);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0x207);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_RC_ENABLE, 1);
+ OUT_RING (chan, 0);
for (i=0; i<4; i++) {
- BEGIN_RING(NvSub3D, NV34TCL_TX_ENABLE(i), 1);
- OUT_RING(0);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_ENABLE(i), 1);
+ OUT_RING (chan, 0);
}
- BEGIN_RING(NvSub3D, NV34TCL_MULTISAMPLE_CONTROL, 1);
- OUT_RING(0xffff<<16);
-
- BEGIN_RING(NvSub3D, NV34TCL_BLEND_FUNC_ENABLE, 5);
- OUT_RING(0);
- OUT_RING((1<<16)|1);
- OUT_RING(0);
- OUT_RING(0);
- OUT_RING(0x8006);
- BEGIN_RING(NvSub3D, NV34TCL_STENCIL_BACK_ENABLE, 17);
- OUT_RING(0);
- OUT_RING(0xff);
- OUT_RING(0x207);
- OUT_RING(0);
- OUT_RING(0xff);
- OUT_RING(0x1e00);
- OUT_RING(0x1e00);
- OUT_RING(0x1e00);
- OUT_RING(1);
- OUT_RING(0xff);
- OUT_RING(0x207);
- OUT_RING(0);
- OUT_RING(0xff);
- OUT_RING(0x1e00);
- OUT_RING(0x1e00);
- OUT_RING(0x1e00);
- OUT_RING(0x1d01);
- BEGIN_RING(NvSub3D, NV34TCL_COLOR_LOGIC_OP_ENABLE, 2);
- OUT_RING(0);
- OUT_RING(0x1503);
- BEGIN_RING(NvSub3D, NV34TCL_DITHER_ENABLE, 1);
- OUT_RING(1);
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_STIPPLE_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_LINE_STIPPLE_ENABLE, 2);
- OUT_RING(0);
- OUT_RING(0xffff<<16);
- BEGIN_RING(NvSub3D, 0x1d84, 1);
- OUT_RING(1);
- BEGIN_RING(NvSub3D, 0x17cc, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_STIPPLE_PATTERN(0), 32);
+ BEGIN_RING(chan, subch3D, NV34TCL_MULTISAMPLE_CONTROL, 1);
+ OUT_RING (chan, 0xffff<<16);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_BLEND_FUNC_ENABLE, 5);
+ OUT_RING (chan, 0);
+ OUT_RING( chan, (1<<16)|1);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0x8006);
+ BEGIN_RING(chan, subch3D, NV34TCL_STENCIL_BACK_ENABLE, 17);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0xff);
+ OUT_RING (chan, 0x207);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0xff);
+ OUT_RING (chan, 0x1e00);
+ OUT_RING (chan, 0x1e00);
+ OUT_RING (chan, 0x1e00);
+ OUT_RING (chan, 1);
+ OUT_RING (chan, 0xff);
+ OUT_RING (chan, 0x207);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0xff);
+ OUT_RING (chan, 0x1e00);
+ OUT_RING (chan, 0x1e00);
+ OUT_RING (chan, 0x1e00);
+ OUT_RING (chan, 0x1d01);
+ BEGIN_RING(chan, subch3D, NV34TCL_COLOR_LOGIC_OP_ENABLE, 2);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0x1503);
+ BEGIN_RING(chan, subch3D, NV34TCL_DITHER_ENABLE, 1);
+ OUT_RING (chan, 1);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_STIPPLE_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_LINE_STIPPLE_ENABLE, 2);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0xffff<<16);
+ BEGIN_RING(chan, subch3D, 0x1d84, 1);
+ OUT_RING (chan, 1);
+ BEGIN_RING(chan, subch3D, 0x17cc, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_STIPPLE_PATTERN(0), 32);
for (i=0; i<32; i++) {
- OUT_RING(0xffffffff);
+ OUT_RING (chan, 0xffffffff);
}
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
- OUT_RING(0);
- OUT_RING(0);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_DEPTH_FUNC, 1);
- OUT_RING(0x201);
- BEGIN_RING(NvSub3D, NV34TCL_DEPTH_WRITE_ENABLE, 1);
- OUT_RING(1);
- BEGIN_RING(NvSub3D, NV34TCL_DEPTH_TEST_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_OFFSET_FACTOR, 2);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, 0x1d78, 1);
- OUT_RING(1);
- BEGIN_RING(NvSub3D, NV34TCL_LINE_WIDTH, 2);
- OUT_RING(8);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_LINE_STIPPLE_ENABLE, 2);
- OUT_RING(0);
- OUT_RING(0xffff<<16);
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_MODE_FRONT, 2);
- OUT_RING(0x1b02);
- OUT_RING(0x1b02);
- BEGIN_RING(NvSub3D, NV34TCL_CULL_FACE, 2);
- OUT_RING(0x405);
- OUT_RING(0x901);
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_SMOOTH_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_CULL_FACE_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_SHADE_MODEL, 1);
- OUT_RING(0x1d01);
- BEGIN_RING(NvSub3D, NV34TCL_POLYGON_STIPPLE_ENABLE, 1);
- OUT_RING(0);
-
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_4F_X(1), 60);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
-
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- OUT_RINGf(1.0);
-
- OUT_RINGf(1.0);
- OUT_RINGf(1.0);
- OUT_RINGf(1.0);
- OUT_RINGf(1.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_DEPTH_FUNC, 1);
+ OUT_RING (chan, 0x201);
+ BEGIN_RING(chan, subch3D, NV34TCL_DEPTH_WRITE_ENABLE, 1);
+ OUT_RING (chan, 1);
+ BEGIN_RING(chan, subch3D, NV34TCL_DEPTH_TEST_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_OFFSET_FACTOR, 2);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, 0x1d78, 1);
+ OUT_RING (chan, 1);
+ BEGIN_RING(chan, subch3D, NV34TCL_LINE_WIDTH, 2);
+ OUT_RING (chan, 8);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_LINE_STIPPLE_ENABLE, 2);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0xffff<<16);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_MODE_FRONT, 2);
+ OUT_RING (chan, 0x1b02);
+ OUT_RING (chan, 0x1b02);
+ BEGIN_RING(chan, subch3D, NV34TCL_CULL_FACE, 2);
+ OUT_RING (chan, 0x405);
+ OUT_RING (chan, 0x901);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_SMOOTH_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_CULL_FACE_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_SHADE_MODEL, 1);
+ OUT_RING (chan, 0x1d01);
+ BEGIN_RING(chan, subch3D, NV34TCL_POLYGON_STIPPLE_ENABLE, 1);
+ OUT_RING (chan, 0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_4F_X(1), 60);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 1.0);
+
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 1.0);
for (i=4; i<16; i++) {
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
}
- BEGIN_RING(NvSub3D, 0x145c, 1);
- OUT_RING(1);
- BEGIN_RING(NvSub3D, NV34TCL_COLOR_MASK, 1);
- OUT_RING(0x01010101);
- BEGIN_RING(NvSub3D, 0x1458, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, 0x1424, 3);
- OUT_RING(2<<16);
- OUT_RING(0);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_ENABLED_LIGHTS, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_NORMALIZE_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_POINT_SIZE, 3);
- OUT_RINGf(1.0);
- OUT_RING(0);
- OUT_RING(0);
-
- BEGIN_RING(NvSub3D, NV34TCL_TX_GEN_S(0), 32);
+ BEGIN_RING(chan, subch3D, 0x145c, 1);
+ OUT_RING (chan, 1);
+ BEGIN_RING(chan, subch3D, NV34TCL_COLOR_MASK, 1);
+ OUT_RING (chan, 0x01010101);
+ BEGIN_RING(chan, subch3D, 0x1458, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, 0x1424, 3);
+ OUT_RING (chan, 2<<16);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_ENABLED_LIGHTS, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_NORMALIZE_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_POINT_SIZE, 3);
+ OUT_RINGf (chan, 1.0);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_GEN_S(0), 32);
for (i=0; i<32; i++) {
- OUT_RING(0);
+ OUT_RING (chan, 0);
}
- BEGIN_RING(NvSub3D, NV34TCL_FOG_MODE, 1);
- OUT_RING(0x802);
- BEGIN_RING(NvSub3D, NV34TCL_FOG_EQUATION_CONSTANT, 3);
- OUT_RINGf(1.5);
- OUT_RINGf(-0.090168);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_FOG_COORD_DIST, 1);
- OUT_RING(2);
- BEGIN_RING(NvSub3D, NV34TCL_FOG_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_FOG_COLOR, 1);
- OUT_RING(0);
-
- BEGIN_RING(NvSub3D, NV34TCL_ENGINE, 1);
- OUT_RING(NV34TCL_ENGINE_FIXED);
-
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_TRANSLATE_X, 4);
- OUT_RINGf(viewport_w * 0.5);
- OUT_RINGf(viewport_h * 0.5);
- OUT_RINGf(0.5);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VIEWPORT_SCALE_X, 4);
- OUT_RINGf(viewport_w * 0.5);
- OUT_RINGf(viewport_h * -0.5);
- OUT_RINGf(0.5);
- OUT_RINGf(0.0);
-
- BEGIN_RING(NvSub3D, NV34TCL_VP_CLIP_PLANES_ENABLE, 1);
- OUT_RING(0);
-
- BEGIN_RING(NvSub3D, NV34TCL_PROJECTION_MATRIX(0), 16);
+ BEGIN_RING(chan, subch3D, NV34TCL_FOG_MODE, 1);
+ OUT_RING (chan, 0x802);
+ BEGIN_RING(chan, subch3D, NV34TCL_FOG_EQUATION_CONSTANT, 3);
+ OUT_RINGf (chan, 1.5);
+ OUT_RINGf (chan, -0.090168);
+ OUT_RINGf(chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_FOG_COORD_DIST, 1);
+ OUT_RING (chan, 2);
+ BEGIN_RING(chan, subch3D, NV34TCL_FOG_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_FOG_COLOR, 1);
+ OUT_RING (chan, 0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_ENGINE, 1);
+ OUT_RING (chan, NV34TCL_ENGINE_FIXED);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_TRANSLATE_X, 4);
+ OUT_RINGf (chan, viewport_w * 0.5);
+ OUT_RINGf (chan, viewport_h * 0.5);
+ OUT_RINGf (chan, 0.5);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VIEWPORT_SCALE_X, 4);
+ OUT_RINGf (chan, viewport_w * 0.5);
+ OUT_RINGf (chan, viewport_h * -0.5);
+ OUT_RINGf (chan, 0.5);
+ OUT_RINGf (chan, 0.0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VP_CLIP_PLANES_ENABLE, 1);
+ OUT_RING (chan, 0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_PROJECTION_MATRIX(0), 16);
for (i=0; i<16; i++) {
if ((i==0) || (i==5) || (i==10) || (i==15)) {
- OUT_RINGf(1.0);
+ OUT_RINGf (chan, 1.0);
} else {
- OUT_RING(0);
+ OUT_RING (chan, 0);
}
}
- BEGIN_RING(NvSub3D, NV34TCL_DEPTH_RANGE_NEAR, 2);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_DEPTH_RANGE_NEAR, 2);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
- BEGIN_RING(NvSub3D, NV34TCL_TX_UNITS_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_TX_MATRIX_ENABLE(0), 8);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_UNITS_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_MATRIX_ENABLE(0), 8);
for (i=0; i<8; i++) {
- OUT_RING(0);
+ OUT_RING (chan, 0);
}
tcl_fp_color();
@@ -406,22 +410,22 @@ beef0351 NV30TCL.DMA_QUERY = NV01_MEMORY_LOCAL_BANKED
BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
OUT_RING(NV34TCL_VERTEX_BEGIN_END_STOP);*/
- FIRE_RING();
+ FIRE_RING(chan);
}
void tcl_clear(void)
{
- printf("-- TCL clear buffers\n");
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
- SetSubchannel(NvSub3D, Nv3D);
+ printf("-- TCL clear buffers\n");
- BEGIN_RING(NvSub3D, NV34TCL_CLEAR_DEPTH_VALUE, 2);
- OUT_RING(0);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_IDXBUF_ADDRESS, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_CLEAR_BUFFERS, 1);
- OUT_RING(0xf0);
+ BEGIN_RING(chan, subch3D, NV34TCL_CLEAR_DEPTH_VALUE, 2);
+ OUT_RING (chan, 0);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_IDXBUF_ADDRESS, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_CLEAR_BUFFERS, 1);
+ OUT_RING (chan, 0xf0);
- FIRE_RING();
+ FIRE_RING(chan);
}
diff --git a/tcl_triangle.c b/tcl_triangle.c
index 7f96ee5..ac0cde8 100644
--- a/tcl_triangle.c
+++ b/tcl_triangle.c
@@ -1,14 +1,17 @@
#include <stdio.h>
+#include <stdint.h>
+#include <nouveau_class.h>
+#include <nouveau_pushbuf.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
-#include "nouveau_class.h"
static void tcl_fp_tx0(void)
{
volatile unsigned int *fragprog_map;
uint64_t fragprog_offset;
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
fragprog_map = screen_allocmem(0, 0x1000, &fragprog_offset);
if (!fragprog_map) {
@@ -18,9 +21,9 @@ static void tcl_fp_tx0(void)
fragprog_offset, fragprog_map);
/*
-# 0x18009e82 0x1c9dc901 0x0001c900 0x0001c900
+# 0x18009e82 0x1c9dc901 0x0001c900 0x0001c900
# INST 0: TXPR R1 (TR0.xyzw), attrib.texcoord[0], abs(texture[0])
-# 0x02803e81 0x1c9dc904 0x0001c901 0x0001c900
+# 0x02803e81 0x1c9dc904 0x0001c901 0x0001c900
# INST 1: MULX R0 (TR0.xyzw), R1, attrib.color + END
*/
fragprog_map[0] = 0x18009e82;
@@ -33,102 +36,102 @@ static void tcl_fp_tx0(void)
fragprog_map[6] = 0x0001c901;
fragprog_map[7] = 0x0001c900;
- BEGIN_RING(NvSub3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
- OUT_RING ((uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
- BEGIN_RING(NvSub3D, NV34TCL_FP_CONTROL, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_FP_REG_CONTROL, 1);
- OUT_RING((1<<16)|4);
+ BEGIN_RING(chan, subch3D, NV34TCL_FP_ACTIVE_PROGRAM, 1);
+ OUT_RING (chan, (uint32_t)fragprog_offset| NV34TCL_FP_ACTIVE_PROGRAM_DMA0);
+ 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);
}
void tcl_triangle_fixed(void)
{
- printf("-- TCL triangle, fixed pipe\n");
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
- SetSubchannel(NvSub3D, Nv3D);
+ printf("-- TCL triangle, fixed pipe\n");
/*
3 for pos
4 for color0
*/
- BEGIN_RING(NvSub3D, NV34TCL_VTXFMT(0), 4);
- OUT_RING((3<<NV34TCL_VTXFMT_SIZE_SHIFT)|NV34TCL_VTXFMT_TYPE_FLOAT);
- OUT_RING(NV34TCL_VTXFMT_TYPE_FLOAT);
- OUT_RING(NV34TCL_VTXFMT_TYPE_FLOAT);
- OUT_RING((4<<NV34TCL_VTXFMT_SIZE_SHIFT)|NV34TCL_VTXFMT_TYPE_FLOAT);
-
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
- OUT_RING(NV34TCL_VERTEX_BEGIN_END_TRIANGLES);
-
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_DATA|METHOD_CONSTANT, 3*(4+3));
- OUT_RINGf(1.0); OUT_RINGf(1.0); OUT_RINGf(0.0); OUT_RINGf(0.0);
- OUT_RINGf(1.0); OUT_RINGf(0.0); OUT_RINGf(0.0);
- OUT_RINGf(1.0); OUT_RINGf(1.0); OUT_RINGf(1.0); OUT_RINGf(0.0);
- OUT_RINGf(0.0); OUT_RINGf(1.0); OUT_RINGf(0.0);
- OUT_RINGf(1.0); OUT_RINGf(0.0); OUT_RINGf(0.0); OUT_RINGf(1.0);
- OUT_RINGf(0.0); OUT_RINGf(0.0); OUT_RINGf(1.0);
-
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
- OUT_RING(NV34TCL_VERTEX_BEGIN_END_STOP);
-
- FIRE_RING();
+ BEGIN_RING(chan, subch3D, NV34TCL_VTXFMT(0), 4);
+ OUT_RING (chan, (3<<NV34TCL_VTXFMT_SIZE_SHIFT)|NV34TCL_VTXFMT_TYPE_FLOAT);
+ OUT_RING (chan, NV34TCL_VTXFMT_TYPE_FLOAT);
+ OUT_RING (chan, NV34TCL_VTXFMT_TYPE_FLOAT);
+ OUT_RING (chan, (4<<NV34TCL_VTXFMT_SIZE_SHIFT)|NV34TCL_VTXFMT_TYPE_FLOAT);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_BEGIN_END, 1);
+ OUT_RING (chan, NV34TCL_VERTEX_BEGIN_END_TRIANGLES);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_DATA|METHOD_CONSTANT, 3*(4+3));
+ OUT_RINGf (chan, 1.0); OUT_RINGf(chan, 1.0); OUT_RINGf(chan, 0.0); OUT_RINGf(chan, 0.0);
+ OUT_RINGf (chan, 1.0); OUT_RINGf(chan, 0.0); OUT_RINGf(chan, 0.0);
+ OUT_RINGf (chan, 1.0); OUT_RINGf(chan, 1.0); OUT_RINGf(chan, 1.0); OUT_RINGf(chan, 0.0);
+ OUT_RINGf (chan, 0.0); OUT_RINGf(chan, 1.0); OUT_RINGf(chan, 0.0);
+ OUT_RINGf (chan, 1.0); OUT_RINGf(chan, 0.0); OUT_RINGf(chan, 0.0); OUT_RINGf(chan, 1.0);
+ OUT_RINGf (chan, 0.0); OUT_RINGf(chan, 0.0); OUT_RINGf(chan, 1.0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_BEGIN_END, 1);
+ OUT_RING (chan, NV34TCL_VERTEX_BEGIN_END_STOP);
+
+ FIRE_RING(chan);
}
void tcl_triangle_vtxattr(void)
{
- printf("-- TCL triangle, vertex attribs\n");
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
- SetSubchannel(NvSub3D, Nv3D);
+ printf("-- TCL triangle, vertex attribs\n");
/* set color, then pos */
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
- OUT_RING(NV34TCL_VERTEX_BEGIN_END_TRIANGLES);
-
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(3), 3);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(3), 3);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(3), 3);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
-
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
- OUT_RING(NV34TCL_VERTEX_BEGIN_END_STOP);
-
- FIRE_RING();
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_BEGIN_END, 1);
+ OUT_RING (chan, NV34TCL_VERTEX_BEGIN_END_TRIANGLES);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(3), 3);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf( chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(3), 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(3), 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_BEGIN_END, 1);
+ OUT_RING (chan, NV34TCL_VERTEX_BEGIN_END_STOP);
+
+ FIRE_RING(chan);
}
void tcl_triangle_tx0(void)
{
- printf("-- TCL triangle, textured\n");
+ struct nouveau_grobj *subch3D = grobj[NvSub3D];
- SetSubchannel(NvSub3D, Nv3D);
+ printf("-- TCL triangle, textured\n");
- BEGIN_RING(NvSub3D, NV34TCL_TX_UNITS_ENABLE, 1);
- OUT_RING(NV34TCL_TX_UNITS_ENABLE_TX0);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_UNITS_ENABLE, 1);
+ OUT_RING (chan, NV34TCL_TX_UNITS_ENABLE_TX0);
tcl_fp_tx0();
- BEGIN_RING(NvSub3D, NV34TCL_TX_OFFSET(0), 7);
- OUT_RING(screen_offset);
- OUT_RING(NV34TCL_TX_FORMAT_DMA0
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_OFFSET(0), 7);
+ OUT_RING (chan, screen_offset);
+ OUT_RING (chan, NV34TCL_TX_FORMAT_DMA0
| NV34TCL_TX_FORMAT_NO_BORDER
| NV34TCL_TX_FORMAT_DIMS_2D
| NV34TCL_TX_FORMAT_FORMAT_A8R8G8B8
@@ -136,78 +139,78 @@ void tcl_triangle_tx0(void)
| (8<<NV34TCL_TX_FORMAT_BASE_SIZE_V_SHIFT)
| 0x10000
);
- OUT_RING(NV34TCL_TX_WRAP_S_REPEAT
+ OUT_RING (chan, NV34TCL_TX_WRAP_S_REPEAT
| NV34TCL_TX_WRAP_T_REPEAT
| NV34TCL_TX_WRAP_R_REPEAT
);
- OUT_RING(NV34TCL_TX_ENABLE_ENABLE
+ OUT_RING (chan, NV34TCL_TX_ENABLE_ENABLE
| 0x800
);
- OUT_RING((screen_pitch<<16)|0xaae4); /* swizzle */
- OUT_RING(NV34TCL_TX_FILTER_MINIFY_NEAREST
+ OUT_RING (chan, (screen_pitch<<16)|0xaae4); /* swizzle */
+ OUT_RING (chan, NV34TCL_TX_FILTER_MINIFY_NEAREST
| NV34TCL_TX_FILTER_MAGNIFY_NEAREST
| 0x2000
);
- OUT_RING((256<<16)|256); /* rect size */
-
- BEGIN_RING(NvSub3D, NV34TCL_TX_MATRIX_ENABLE(0), 1);
- OUT_RING(1);
- BEGIN_RING(NvSub3D, NV34TCL_TX0_MATRIX(0), 16);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
-
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
-
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
-
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
+ OUT_RING (chan, (256<<16)|256); /* rect size */
+
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_MATRIX_ENABLE(0), 1);
+ OUT_RING (chan, 1);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX0_MATRIX(0), 16);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
/* set color, then pos */
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
- OUT_RING(NV34TCL_VERTEX_BEGIN_END_TRIANGLES);
-
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_2F_X(8), 2);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_2F_X(8), 2);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_2F_X(8), 2);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- BEGIN_RING(NvSub3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
- OUT_RINGf(0.0);
- OUT_RINGf(0.0);
- OUT_RINGf(1.0);
-
- BEGIN_RING(NvSub3D, NV34TCL_VERTEX_BEGIN_END, 1);
- OUT_RING(NV34TCL_VERTEX_BEGIN_END_STOP);
-
- BEGIN_RING(NvSub3D, NV34TCL_TX_UNITS_ENABLE, 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_TX_MATRIX_ENABLE(0), 1);
- OUT_RING(0);
- BEGIN_RING(NvSub3D, NV34TCL_TX_ENABLE(0), 1);
- OUT_RING(0);
-
- FIRE_RING();
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_BEGIN_END, 1);
+ OUT_RING (chan, NV34TCL_VERTEX_BEGIN_END_TRIANGLES);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_2F_X(8), 2);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_2F_X(8), 2);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_2F_X(8), 2);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ BEGIN_RING(chan, subch3D, NV34TCL_VTX_ATTR_3F_X(0), 3);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 0.0);
+ OUT_RINGf (chan, 1.0);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_VERTEX_BEGIN_END, 1);
+ OUT_RING (chan, NV34TCL_VERTEX_BEGIN_END_STOP);
+
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_UNITS_ENABLE, 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_MATRIX_ENABLE(0), 1);
+ OUT_RING (chan, 0);
+ BEGIN_RING(chan, subch3D, NV34TCL_TX_ENABLE(0), 1);
+ OUT_RING (chan, 0);
+
+ FIRE_RING(chan);
}
diff --git a/test_nops.c b/test_nops.c
deleted file mode 100644
index d7d4ab7..0000000
--- a/test_nops.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-
-#include "fifo.h"
-
-test_nops(void)
-{
- int i;
-
- printf("--Test nops\n");
-
- for (i=0; i<0x300; i++) {
- OUT_RING(0);
- }
-
- fifo_print_getput();
- FIRE_RING();
- fifo_print_getput();
-}
diff --git a/test_nops.h b/test_nops.h
deleted file mode 100644
index 7e14fb7..0000000
--- a/test_nops.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TEST_NOPS_H
-#define TEST_NOPS_H
-
-void test_nops(void);
-
-#endif