void rpipe_swap_bottom_half() { unsigned short *b; unsigned int oldmask; /* Swap texture buffers */ b = tex_backbuffer; tex_backbuffer = tex_frontbuffer; tex_frontbuffer = b; /* Update display */ vga_swap_buffers(); /* Update statistics */ oldmask = irq_getmask(); irq_setmask(oldmask & ~(IRQ_TIMER0)); frames++; irq_setmask(oldmask); /* Ready to process the next frame ! */ queue[consume]->callback(queue[consume]); consume = (consume + 1) & RPIPE_FRAMEQ_MASK; level--; if(level > 0) rpipe_start(queue[consume]); else cts = 1; }
int rpipe_input(struct rpipe_frame *frame) { if(level >= RPIPE_FRAMEQ_SIZE) { printf("RPI: taskq overflow\n"); return 0; } queue[produce] = frame; produce = (produce + 1) & RPIPE_FRAMEQ_MASK; level++; if(cts) { rpipe_start(frame); cts = 0; } return 1; }