summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrice Mandin <pmandin@caramail.com>2008-08-27 18:49:03 +0200
committerPatrice Mandin <pmandin@caramail.com>2008-08-27 18:49:03 +0200
commit3d4cdc4311ea5170d2ad9d90674fcd9e31098de2 (patch)
treedc7dd4faf440ef9912f006cd41f99efa2ebf0a11
parent341a7aa72743d486cce1d4431f029bbebc633654 (diff)
Add image pattern and raster op
-rw-r--r--Makefile4
-rw-r--r--image_pattern.c35
-rw-r--r--image_pattern.h6
-rw-r--r--imageblit.c10
-rw-r--r--main.c4
-rw-r--r--raster_op.c24
-rw-r--r--raster_op.h6
7 files changed, 81 insertions, 8 deletions
diff --git a/Makefile b/Makefile
index 49dd367..1017182 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,9 @@
SOURCES = main.c screen.c fifo.c object.c test_nops.c \
tcl_init.c tcl_triangle.c imageblit.c context_surface_2d.c \
- clip_rectangle.c
+ clip_rectangle.c image_pattern.c raster_op.c
HEADERS = screen.h fifo.h object.h test_nops.h \
tcl_init.h tcl_triangle.h imageblit.h context_surface_2d.h \
- clip_rectangle.h nv30_fpinst.h
+ clip_rectangle.h image_pattern.h raster_op.h nv30_fpinst.h
OBJECTS = $(SOURCES:%.c=%.o)
diff --git a/image_pattern.c b/image_pattern.c
new file mode 100644
index 0000000..ce59639
--- /dev/null
+++ b/image_pattern.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+
+#include "screen.h"
+#include "object.h"
+#include "fifo.h"
+#include "nouveau_class.h"
+
+void image_pattern_init(void)
+{
+ printf("-- Image pattern, init\n");
+
+ SetSubchannel(NvSubImagePattern, NvImagePattern);
+
+ BEGIN_RING(NvSubImagePattern, NV04_IMAGE_PATTERN_DMA_NOTIFY, 1);
+ OUT_RING(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(NvSubImagePattern, NV04_IMAGE_PATTERN_COLOR_FORMAT, 1);
+ OUT_RING( (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);
+
+ FIRE_RING();
+}
diff --git a/image_pattern.h b/image_pattern.h
new file mode 100644
index 0000000..4e054da
--- /dev/null
+++ b/image_pattern.h
@@ -0,0 +1,6 @@
+#ifndef IMAGE_PATTERN_H
+#define IMAGE_PATTERN_H
+
+void image_pattern_init(void);
+
+#endif
diff --git a/imageblit.c b/imageblit.c
index a393e37..020d3ab 100644
--- a/imageblit.c
+++ b/imageblit.c
@@ -11,18 +11,18 @@ void imageblit_init(void)
SetSubchannel(NvSubImageBlit, NvImageBlit);
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_NOTIFY, 1);
+ BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_DMA_NOTIFY, 1);
OUT_RING(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);
+ BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_PATTERN, 1);
OUT_RING(NvImagePattern);
BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_ROP, 1);
OUT_RING(NvRasterOp);
- BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_OPERATION, 1);
+ /*BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_OPERATION, 1);
OUT_RING(NV04_IMAGE_BLIT_OPERATION_SRCCOPY);*/
FIRE_RING();
@@ -34,8 +34,8 @@ void imageblit_copy(int sx,int sy, int dx,int dy, int w,int h)
SetSubchannel(NvSubImageBlit, NvImageBlit);
- /*BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_SURFACE, 1);
- OUT_RING (NvCtxSurf2D);*/
+ BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_SURFACE, 1);
+ OUT_RING (NvCtxSurf2D);
BEGIN_RING(NvSubImageBlit, NV04_IMAGE_BLIT_OPERATION, 1);
OUT_RING (NV04_IMAGE_BLIT_OPERATION_SRCCOPY);
diff --git a/main.c b/main.c
index 42284f2..cc82ebb 100644
--- a/main.c
+++ b/main.c
@@ -34,9 +34,11 @@ int main(int argc, char **argv)
}
/*test_nops();*/
+
clip_rectangle_init();
context_surface_2d_init();
-
+ image_pattern_init();
+ raster_op_init();
imageblit_init();
/* FIXME: this does not work */
diff --git a/raster_op.c b/raster_op.c
new file mode 100644
index 0000000..2d0b10b
--- /dev/null
+++ b/raster_op.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+
+#include "screen.h"
+#include "object.h"
+#include "fifo.h"
+#include "nouveau_class.h"
+
+void raster_op_init(void)
+{
+ printf("-- Raster operation, init\n");
+
+ SetSubchannel(NvSubRasterOp, NvRasterOp);
+
+ BEGIN_RING(NvSubRasterOp, NV03_CONTEXT_ROP_DMA_NOTIFY, 1);
+ OUT_RING (NvSyncNotify);
+
+ BEGIN_RING(NvSubRasterOp, NV03_CONTEXT_ROP_ROP, 1);
+ OUT_RING (
+ NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_OR |
+ NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_OR
+ );
+
+ FIRE_RING();
+}
diff --git a/raster_op.h b/raster_op.h
new file mode 100644
index 0000000..9c3b27f
--- /dev/null
+++ b/raster_op.h
@@ -0,0 +1,6 @@
+#ifndef RASTER_OP_H
+#define RASTER_OP_H
+
+void raster_op_init(void);
+
+#endif