diff options
author | Patrice Mandin <pmandin@caramail.com> | 2008-08-27 18:49:03 +0200 |
---|---|---|
committer | Patrice Mandin <pmandin@caramail.com> | 2008-08-27 18:49:03 +0200 |
commit | 3d4cdc4311ea5170d2ad9d90674fcd9e31098de2 (patch) | |
tree | dc7dd4faf440ef9912f006cd41f99efa2ebf0a11 | |
parent | 341a7aa72743d486cce1d4431f029bbebc633654 (diff) |
Add image pattern and raster op
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | image_pattern.c | 35 | ||||
-rw-r--r-- | image_pattern.h | 6 | ||||
-rw-r--r-- | imageblit.c | 10 | ||||
-rw-r--r-- | main.c | 4 | ||||
-rw-r--r-- | raster_op.c | 24 | ||||
-rw-r--r-- | raster_op.h | 6 |
7 files changed, 81 insertions, 8 deletions
@@ -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); @@ -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 |