#include #include #include "nouveau_class.h" #include #include #include "screen.h" #include "object.h" #include "fifo.h" void imageblit_init(void) { struct nouveau_grobj *subchImageBlit = grobj[NvSubImageBlit]; printf("-- ImageBlit, init\n"); BEGIN_RING(chan, subchImageBlit, NV01_IMAGE_BLIT_DMA_NOTIFY, 1); OUT_RING (chan, notifier->handle); BEGIN_RING(chan, subchImageBlit, NV01_IMAGE_BLIT_SURFACE, 1); OUT_RING (chan, grobj[NvSubCtxSurf2D]->handle); BEGIN_RING(chan, subchImageBlit, NV01_IMAGE_BLIT_CLIP_RECTANGLE, 1); OUT_RING (chan, grobj[NvSubClipRect]->handle); BEGIN_RING(chan, subchImageBlit, NV01_IMAGE_BLIT_PATTERN, 1); OUT_RING (chan, grobj[NvSubImagePattern]->handle); BEGIN_RING(chan, subchImageBlit, NV04_IMAGE_BLIT_ROP, 1); OUT_RING (chan, grobj[NvSubRasterOp]->handle); FIRE_RING(chan); } void imageblit_copy(int sx,int sy, int dx,int dy, int w,int h) { struct nouveau_grobj *subchImageBlit = grobj[NvSubImageBlit]; printf("-- ImageBlit, copy\n"); BEGIN_RING(chan, subchImageBlit, NV01_IMAGE_BLIT_OPERATION, 1); OUT_RING (chan, NV01_IMAGE_BLIT_OPERATION_SRCCOPY); 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(chan); }