completed acc engine funtion move for acc speedup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16060 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -12,40 +12,4 @@
|
|||||||
|
|
||||||
#include "acc_std.h"
|
#include "acc_std.h"
|
||||||
|
|
||||||
void INVERT_RECTANGLE(engine_token *et, fill_rect_params *list, uint32 count) {
|
/* file nolonger needed */
|
||||||
int i;
|
|
||||||
|
|
||||||
/*draw each rectangle*/
|
|
||||||
i=0;
|
|
||||||
while (count--)
|
|
||||||
{
|
|
||||||
gx00_acc_rectangle_invert
|
|
||||||
(
|
|
||||||
list[i].left,
|
|
||||||
(list[i].right)+1,
|
|
||||||
list[i].top,
|
|
||||||
(list[i].bottom-list[i].top)+1,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FILL_SPAN(engine_token *et, uint32 colorIndex, uint16 *list, uint32 count) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/*draw each span*/
|
|
||||||
i=0;
|
|
||||||
while (count--)
|
|
||||||
{
|
|
||||||
gx00_acc_rectangle
|
|
||||||
(
|
|
||||||
list[i+1],
|
|
||||||
list[i+2]+1,
|
|
||||||
list[i],
|
|
||||||
1,
|
|
||||||
colorIndex
|
|
||||||
);
|
|
||||||
i+=3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -45,9 +45,6 @@ void WAIT_ENGINE_IDLE(void);
|
|||||||
status_t GET_SYNC_TOKEN(engine_token *et, sync_token *st);
|
status_t GET_SYNC_TOKEN(engine_token *et, sync_token *st);
|
||||||
status_t SYNC_TO_TOKEN(sync_token *st);
|
status_t SYNC_TO_TOKEN(sync_token *st);
|
||||||
|
|
||||||
void INVERT_RECTANGLE(engine_token *et, fill_rect_params *list, uint32 count);
|
|
||||||
void FILL_SPAN(engine_token *et, uint32 color, uint16 *list, uint32 count);
|
|
||||||
|
|
||||||
/* video_overlay */
|
/* video_overlay */
|
||||||
uint32 OVERLAY_COUNT(const display_mode *dm);
|
uint32 OVERLAY_COUNT(const display_mode *dm);
|
||||||
const uint32 *OVERLAY_SUPPORTED_SPACES(const display_mode *dm);
|
const uint32 *OVERLAY_SUPPORTED_SPACES(const display_mode *dm);
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ void FILL_RECTANGLE(engine_token *et, uint32 colorIndex, fill_rect_params *list,
|
|||||||
//acc fixme: checkout blockmode constraints for G100+ (mil: nc?): also add blockmode
|
//acc fixme: checkout blockmode constraints for G100+ (mil: nc?): also add blockmode
|
||||||
// for other functions, and use fastblt on MIL1/2 if possible...
|
// for other functions, and use fastblt on MIL1/2 if possible...
|
||||||
//or is CMAP8 contraint a non-blockmode contraint? (linearisation problem maybe?)
|
//or is CMAP8 contraint a non-blockmode contraint? (linearisation problem maybe?)
|
||||||
if (si->dm.space==B_CMAP8 || si->ps.sdram)
|
if ((si->dm.space == B_CMAP8) || si->ps.sdram)
|
||||||
{
|
{
|
||||||
ACCGO(DWGCTL, 0x400c7814); // atype RSTR
|
ACCGO(DWGCTL, 0x400c7814); // atype RSTR
|
||||||
}
|
}
|
||||||
@@ -401,10 +401,10 @@ void FILL_RECTANGLE(engine_token *et, uint32 colorIndex, fill_rect_params *list,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* rectangle fill.
|
/* horizontal span fill.
|
||||||
* Engine function rectangle_fill: paragraph 4.5.5.2 */
|
* Engine function rectangle_fill: paragraph 4.5.5.2 */
|
||||||
/*colorIndex,fill_rect_params,count*/
|
//(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint32 col)
|
||||||
status_t gx00_acc_rectangle(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint32 col)
|
void FILL_SPAN(engine_token *et, uint32 colorIndex, uint16 *list, uint32 count)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
FXBNDRY - left and right coordinates a
|
FXBNDRY - left and right coordinates a
|
||||||
@@ -413,33 +413,34 @@ status_t gx00_acc_rectangle(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint32 col)
|
|||||||
DWGCTL - atype must be RSTR or BLK a
|
DWGCTL - atype must be RSTR or BLK a
|
||||||
FCOL - foreground colour a
|
FCOL - foreground colour a
|
||||||
*/
|
*/
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
ACCW(FXBNDRY,(xe<<16)|xs); /*set x start and end*/
|
while (count--)
|
||||||
ACCW_YDSTLEN(ys,yl); /*set y start and length*/
|
{
|
||||||
ACCW(FCOL,col); /*set colour*/
|
ACCW(FXBNDRY, ((list[i + 2] + 1) << 16)| list[i + 1]);
|
||||||
|
ACCW_YDSTLEN(list[i], 1);
|
||||||
|
ACCW(FCOL, colorIndex);
|
||||||
|
|
||||||
|
/* start the fill */
|
||||||
//acc fixme: checkout blockmode constraints for G100+ (mil: nc?): also add blockmode
|
//acc fixme: checkout blockmode constraints for G100+ (mil: nc?): also add blockmode
|
||||||
// for other functions, and use fastblt on MIL1/2 if possible...
|
// for other functions, and use fastblt on MIL1/2 if possible...
|
||||||
//or is CMAP8 contraint a non-blockmode contraint? (linearisation problem maybe?)
|
//or is CMAP8 contraint a non-blockmode contraint? (linearisation problem maybe?)
|
||||||
if (si->dm.space==B_CMAP8 || si->ps.sdram)
|
if ((si->dm.space == B_CMAP8) || si->ps.sdram)
|
||||||
{
|
{
|
||||||
ACCGO(DWGCTL,0x400C7814); // atype RSTR
|
ACCGO(DWGCTL, 0x400c7814); // atype RSTR
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ACCGO(DWGCTL, 0x400c7844); // atype BLK
|
||||||
|
}
|
||||||
|
i += 3;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
ACCGO(DWGCTL,0x400C7844); // atype BLK
|
|
||||||
}
|
|
||||||
return B_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* rectangle invert.
|
/* rectangle invert.
|
||||||
* Engine function rectangle_fill: paragraph 4.5.5.2 */
|
* Engine function rectangle_fill: paragraph 4.5.5.2 */
|
||||||
/*colorIndex,fill_rect_params,count*/
|
void INVERT_RECTANGLE(engine_token *et, fill_rect_params *list, uint32 count)
|
||||||
status_t gx00_acc_rectangle_invert(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint32 col)
|
|
||||||
{
|
{
|
||||||
// int i;
|
|
||||||
// uint32 * dma;
|
|
||||||
// uint32 pci;
|
|
||||||
/*
|
/*
|
||||||
FXBNDRY - left and right coordinates a
|
FXBNDRY - left and right coordinates a
|
||||||
YDSTLEN - y start and no of lines a
|
YDSTLEN - y start and no of lines a
|
||||||
@@ -447,42 +448,48 @@ status_t gx00_acc_rectangle_invert(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint3
|
|||||||
DWGCTL - atype must be RSTR or BLK a
|
DWGCTL - atype must be RSTR or BLK a
|
||||||
FCOL - foreground colour a
|
FCOL - foreground colour a
|
||||||
*/
|
*/
|
||||||
|
int i = 0;
|
||||||
|
// uint32 * dma;
|
||||||
|
// uint32 pci;
|
||||||
|
|
||||||
ACCW(FXBNDRY,(xe<<16)|xs); /*set x start and end*/
|
while (count--)
|
||||||
ACCW_YDSTLEN(ys,yl); /*set y start and length*/
|
{
|
||||||
ACCW(FCOL,col); /*set colour*/
|
ACCW(FXBNDRY, (((list[i].right) + 1) << 16) | list[i].left);
|
||||||
|
ACCW_YDSTLEN(list[i].top, ((list[i].bottom - list[i].top) + 1));
|
||||||
/*draw it! top nibble is c is clipping enabled*/
|
ACCW(FCOL, 0); /* color */
|
||||||
ACCGO(DWGCTL,0x40057814); // atype RSTR
|
|
||||||
|
|
||||||
/*pseudo_dma version!*/
|
/* start the invert (top nibble is c is clipping enabled) */
|
||||||
//MGAACC_DWGCTL =0x1C00,
|
ACCGO(DWGCTL, 0x40057814); // atype RSTR
|
||||||
//MGAACC_FCOL =0x1C24,
|
|
||||||
//MGAACC_FXBNDRY =0x1C84,
|
/* pseudo_dma version! */
|
||||||
//MGAACC_YDSTLEN =0x1C88,
|
// MGAACC_DWGCTL =0x1c00,
|
||||||
|
// MGAACC_FCOL =0x1c24,
|
||||||
|
// MGAACC_FXBNDRY =0x1c84,
|
||||||
|
// MGAACC_YDSTLEN =0x1c88,
|
||||||
//
|
//
|
||||||
//40,09,21,22 (ordered as registers)
|
// 40,09,21,22 (ordered as registers)
|
||||||
|
|
||||||
// dma = (uint32 *)si->pseudo_dma;
|
// dma = (uint32 *)si->pseudo_dma;
|
||||||
// *dma++=0x40092221;
|
// *dma++= 0x40092221;
|
||||||
// *dma++=(xe<<16)|xs;
|
// *dma++= (((list[i].right) + 1) << 16) | list[i].left;
|
||||||
// *dma++=(ys<<16)|yl;
|
// *dma++= (list[i].top << 16) | ((list[i].bottom - list[i].top) + 1);
|
||||||
// *dma++=col;
|
// *dma++= 0; /* color */
|
||||||
// *dma++=0x40057814;
|
// *dma++= 0x40057814;
|
||||||
|
|
||||||
/*real dma version!*/
|
/* real dma version! */
|
||||||
// dma = (vuint32 *)si->dma_buffer;
|
// dma = (vuint32 *)si->dma_buffer;
|
||||||
// *dma++=0x40092221;/*indices*/
|
// *dma++= 0x40092221; /* indices */
|
||||||
// *dma++=(xe<<16)|xs;
|
// *dma++= (((list[i].right) + 1) << 16) | list[i].left;
|
||||||
// *dma++=(ys<<16)|yl;
|
// *dma++= (list[i].top << 16) | ((list[i].bottom - list[i].top) + 1);
|
||||||
// *dma++=col;
|
// *dma++= 0; /* color */
|
||||||
// *dma++=0x40057814;
|
// *dma++= 0x40057814;
|
||||||
|
|
||||||
// pci = si->dma_buffer_pci;
|
// pci = si->dma_buffer_pci;
|
||||||
// ACCW(PRIMADDRESS,(pci));
|
// ACCW(PRIMADDRESS, (pci));
|
||||||
// ACCW(PRIMEND,(20+pci));
|
// ACCW(PRIMEND, (20 + pci));
|
||||||
|
|
||||||
// delay(100);
|
// delay(100);
|
||||||
|
|
||||||
return B_OK;
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,8 +111,8 @@ void SCREEN_TO_SCREEN_BLIT(engine_token *et, blit_params *list, uint32 count);
|
|||||||
void SCREEN_TO_SCREEN_TRANSPARENT_BLIT(engine_token *et, uint32 transparent_colour, blit_params *list, uint32 count);
|
void SCREEN_TO_SCREEN_TRANSPARENT_BLIT(engine_token *et, uint32 transparent_colour, blit_params *list, uint32 count);
|
||||||
void SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT(engine_token *et, scaled_blit_params *list, uint32 count);
|
void SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT(engine_token *et, scaled_blit_params *list, uint32 count);
|
||||||
void FILL_RECTANGLE(engine_token *et, uint32 color, fill_rect_params *list, uint32 count);
|
void FILL_RECTANGLE(engine_token *et, uint32 color, fill_rect_params *list, uint32 count);
|
||||||
status_t gx00_acc_rectangle(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint32 col);
|
void FILL_SPAN(engine_token *et, uint32 color, uint16 *list, uint32 count);
|
||||||
status_t gx00_acc_rectangle_invert(uint32 xs,uint32 xe,uint32 ys,uint32 yl,uint32 col);
|
void INVERT_RECTANGLE(engine_token *et, fill_rect_params *list, uint32 count);
|
||||||
|
|
||||||
/*backend scaler functions*/
|
/*backend scaler functions*/
|
||||||
status_t check_overlay_capability(uint32 feature);
|
status_t check_overlay_capability(uint32 feature);
|
||||||
|
|||||||
Reference in New Issue
Block a user