/programs/develop/sdk/trunk/HDraw/hdraw.inc |
---|
File deleted |
/programs/develop/sdk/trunk/pixlib/pixlib.inc |
---|
0,0 → 1,260 |
REQ_DLL_VER = 1 |
DLL_ENTRY = 1 |
HS_HORIZONTAL = 0 |
HS_VERTICAL = 1 |
HS_FDIAGONAL = 2 |
HS_BDIAGONAL = 3 |
HS_CROSS = 4 |
HS_DIAGCROSS = 5 |
SCR_PIXMAP = -1 |
PX_MEM_SYSTEM = 0 |
PX_MEM_LOCAL = 1 |
PX_MEM_GART = 2 |
PX_MEM_MASK = 3 |
ARGB32 = ((32 shl 24) or (2 shl 16) or 0x8888) |
macro CreateHatch hatch, bkcolor, fcolor |
{ |
pushd fcolor |
pushd bkcolor |
pushd hatch |
call [imp_CreateHatch] |
add esp, 3*4 |
} |
macro DestroyBrush brush |
{ |
pushd brush |
call [imp_DestroyBrush] |
add esp, 4 |
} |
macro CreatePixmap width, height, format, flags |
{ |
pushd flags |
pushd format |
pushd height |
pushd width |
call [imp_CreatePixmap] |
add esp, 4*4 |
} |
macro DestroyPixmap pixmap |
{ |
pushd pixmap |
call [imp_DestroyPixmap] |
add esp, 4 |
}; |
macro LockPixmap pixmap |
{ |
pushd pixmap |
call [imp_LockPixmap] |
add esp, 4 |
} |
macro UnlockPixmap pixmap |
{ |
pushd pixmap |
call [imp_UnlockPixmap] |
add esp, 4 |
} |
macro ClearPixmap pixmap, color |
{ |
pushd color |
pushd pixmap |
call [imp_ClearPixmap] |
add esp, 2*4 |
} |
macro Line pixmap, x0,y0,x1,y1,color |
{ |
pushd color |
pushd y1 |
pushd x1 |
pushd y0 |
pushd x0 |
pushd pixmap |
call [imp_Line] |
add esp, 6*4 |
}; |
macro DrawRect pixmap,x,y,w,h,color,border |
{ |
pushd border |
pushd color |
pushd h |
pushd w |
pushd y |
pushd x |
pushd pixmap |
call [imp_DrawRect] |
add esp, 7*4 |
} |
macro FillRect pixmap,x,y,w,h,brush,border |
{ |
pushd border |
pushd brush |
pushd h |
pushd w |
pushd y |
pushd x |
pushd pixmap |
call [imp_FillRect] |
add esp, 7*4 |
} |
macro Blit dstpix, dstx, dsty, srcpix, srcx, srcy, w, h |
{ |
pushd h |
pushd w |
pushd srcy |
pushd srcx |
pushd srcpix |
pushd dsty |
pushd dstx |
pushd dstpix |
call [imp_Blit] |
add esp, 8*4 |
} |
macro TransparentBlit dstpix, dstx, dsty, srcpix, srcx, srcy, w, h, key |
{ |
pushd key |
pushd h |
pushd w |
pushd srcy |
pushd srcx |
pushd srcpix |
pushd dsty |
pushd dstx |
pushd dstpix |
call [imp_TransparentBlit] |
add esp, 9*4 |
} |
szPxlib db '/rd/1/lib/pixlib.obj',0 |
szStart db 'START',0 |
szVersion db 'version',0 |
szCreatePixmap db 'CreatePixmap',0 |
szDestroyPixmap db 'DestroyPixmap',0 |
szLockPixmap db 'LockPixmap',0 |
szUnlockPixmap db 'UnlockPixmap',0 |
szGetPixmapPitch db 'GetPixmapPitch',0 |
szCreateHatch db 'CreateHatch',0 |
szCreateMonoBrush db 'CreateMonoBrush',0 |
szDestroyBrush db 'DestroyBrush',0 |
szClearPixmap db 'ClearPixmap',0 |
szLine db 'Line',0 |
szDrawRect db 'DrawRect',0 |
szFillRect db 'FillRect',0 |
szBlit db 'Blit',0 |
szTransparentBlit db 'TransparentBlit',0 |
align 4 |
px_import: |
imp_start dd szStart |
imp_ver dd szVersion |
imp_CreatePixmap dd szCreatePixmap |
imp_DestroyPixmap dd szDestroyPixmap |
imp_LockPixmap dd szLockPixmap |
imp_UnlockPixmap dd szUnlockPixmap |
imp_GetPixmapPitch dd szGetPixmapPitch |
imp_CreateHatch dd szCreateHatch |
imp_CreateMonoBrush dd szCreateMonoBrush |
imp_DestroyBrush dd szDestroyBrush |
imp_ClearPixmap dd szClearPixmap |
imp_Line dd szLine |
imp_DrawRect dd szDrawRect |
imp_FillRect dd szFillRect |
imp_Blit dd szBlit |
imp_TransparentBlit dd szTransparentBlit |
dd 0 |
;szBlockClip db 'BlockClip',0 |
;szLineClip db 'LineClip',0 |
;imp_BlockClip dd szBlockClip |
;imp_LineClip dd szLineClip |
align 4 |
load_pxlib: |
mov eax, 68 |
mov ebx, 19 |
mov ecx, szPxlib |
int 0x40 |
test eax, eax |
jz .fail |
mov edx, eax |
mov esi, px_import |
.import_loop: |
lodsd |
test eax, eax |
jz .import_done |
push edx |
.import_find: |
mov ebx, [edx] |
test ebx, ebx |
jz .fail ;import_not_found |
push eax |
@@: |
mov cl, [eax] |
cmp cl, [ebx] |
jnz .import_find_next |
test cl, cl |
jz .import_found |
inc eax |
inc ebx |
jmp @b |
.import_find_next: |
pop eax |
add edx, 8 |
jmp .import_find |
.import_found: |
pop eax |
mov eax, [edx+4] |
mov [esi-4], eax |
pop edx |
jmp .import_loop |
.import_done: |
cmp word [imp_ver], REQ_DLL_VER |
jb .fail |
cmp word [imp_ver+2], REQ_DLL_VER |
ja .fail |
push DLL_ENTRY |
call [imp_start] |
test eax, eax |
jz .fail |
ret |
.fail: |
xor eax, eax |
ret |
/programs/develop/sdk/trunk/pixlib/readme.txt |
---|
0,0 → 1,224 |
typedef unsigned int u32_t; |
typedef unsignet int handle; |
typedef unsigned int color_t; |
handle CreateHatchBrush(int hatch, color_t bkcolor, color_t fcolor); |
Ñîçäàòü øòðèõîâàííóþ êèñòü ðàçìåðîì 8õ8 ïèêñåëåé |
hatch òèï øòðèõîâêè |
bkcolor öâåò "0" |
fcolor öâåò "1" |
Âîçâðàùàåìîå çíà÷åíèå: ëîãè÷åñêèé íîìåð êèñòè èëè 0 |
handle CreateMonoBrush(color_t bkcolor, color_t fcolor, |
u32_t bmp0, u32_t bmp1); |
Ñîçäàòü ìîíîõðîìíóþ êèñòü ðàçìåðîì 8õ8 ïèêñåëåé |
bkcolor öâåò "0" |
fcolor öâåò "1" |
bmp0 bmp1 ìîíîõðîìíûé áèòìàï 8õ8 ïèêñåëåé |
Âîçâðàùàåìîå çíà÷åíèå: ëîãè÷åñêèé íîìåð êèñòè èëè 0 |
void DestroyBrush(handle brush); |
Óíè÷òîæèòü êèñòü. |
brush ëîãè÷åñêèé íîìåð êèñòè. |
Êèñòü äîëæíà áûòü ñîçäàíà âûçîâîì CreateHatchBrush èëè CreateMonoBrush |
handle CreatePixmap(unsigned width, unsigned height, u32_t format, u32_t flags); |
Ñîçäàòü áèòìàï |
width øèðèíà â ïèêñåëÿõ. Ìàêñèìóì 2048 |
height âûñîòà â ïèêñåëÿõ. Ìàêñèìóì 2048 |
format ôîðìàò ïèêñåëåé. Ñåé÷àñ ïîääåðæèâàåòñÿ òîëüêî ARGB32 |
flags äîïîëíèòåëüíûå ôëàãè: |
PX_MEM_SYSTEM = 0 áèòìàï â ñèñòåìíîé ïàìÿòè |
PX_MEM_LOCAL = 1 áèòìàï â ëîêàëüíîé âèäåîïàìÿòè |
PX_MEM_GART = 2 çàðåçåðâèðîâàíî |
îñòàëüíûå áèòû çàðåçåðâèðîâàíû è äîëæíû áûòü 0 |
Âîçâðàùàåìîå çíà÷åíèå: ëîãè÷åñêèé íîìåð áèòìàïà â ñëó÷àå óñïåõà èëè 0 |
int DestroyPixmap( handle pixmap) |
Óíè÷òîæèòü áèòìàï. |
pixmap ëîãè÷åñêèé íîìåð áèòìàïà. |
Áèòìàï äîëæåí áûòü ñîçäàí CreatePixmap. |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
int ClearPixmap(handle pixmap, color_t color) |
Çàïîëíÿåò áèòìàï óêàçàííûì öâåòîì; |
pixmap ëîãè÷åñêèé íîìåð áèòìàïà. SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà. |
color öâåò â ôîðìàòå ARGB32 |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
int Line(handle pixmap, int x0, int y0, int x1, int y1, color_t color) |
Íàðèñîâàòü ñïëîøíóþ ëèíèþ óêàçàíîãî öâåòà òîëùèíîé â 1 ïèêñåëü. |
pixmap ëîãè÷åñêèé íîìåð áèòìàïà â êîòîðûé áóäåò ïðîèçâîäèòñÿ îòðèñîâêà. |
SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà |
x0,y0 x1,y1 êîîðäèíàòû íà÷àëüíîé è êîíå÷íîé òî÷åê ëèíèèè |
color öâåò â ôîðìàòå ARGB32 |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
int DrawRect(handle pixmap, int xorg, int yorg, |
int width, int height, |
color_t dst_color, color_t border) |
Íàðèñîâàòü ñïëîøíîé ïðÿìîóãëüíèê óêàçàíîãî öâåòà c îêàíòîâêîé. |
pixmap ëîãè÷åñêèé íîìåð áèòìàïà â êîòîðûé áóäåò ïðîèçâîäèòñÿ îòðèñîâêà. |
SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà |
xorg,yorg êîîðäèíàòû ëåâîãî âåðõíåãî óãëà ïðÿìîóãîëüíèêà â ïèêñåëÿõ |
width øèðèíà ïðÿìîóãîëüíèêà â ïèêñåëÿõ |
height âûñîòà ïðÿìîóãîëüíèêà â ïèêñåëÿõ |
color öâåò ïðÿìîóãîëüíèêà â ôîðìàòå ARGB32 |
border öâåò îêàíòîâêè â ôîðìàòå ARGB32. Òîëùèíà îêàíòîâêè 1 ïèêñåë. |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
int FillRect(handle pixmap, int xorg, int yorg, |
int width, int height, |
brush_t *brush, color_t border) |
Íàðèñîâàòü ïðÿìîóãîëüíèê èñïîëüçóÿ êèñòü |
pixmap ëîãè÷åñêèé íîìåð áèòìàïà â êîòîðûé áóäåò ïðîèçâîäèòñÿ îòðèñîâêà. |
SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà |
xorg,yorg êîîðäèíàòû ëåâîãî âåðõíåãî óãëà ïðÿìîóãîëüíèêà â ïèêñåëÿõ |
width øèðèíà ïðÿìîóãîëüíèêà â ïèêñåëÿõ |
height âûñîòà ïðÿìîóãîëüíèêà â ïèêñåëÿõ |
brush ìîíîõðîìíàÿ êèñòü ðàçìåðîì 8õ8 ïèêñåëåé |
border öâåò îêàíòîâêè â ôîðìàòå ARGB32. Òîëùèíà îêàíòîâêè 1 ïèêñåë. |
Îêàíòîâêà íå ðèñóåòñÿ åñëè àëüôà êîìïîíåí öâåòà ðàâåí 0. |
Êèñòü äîëæíà áûòü ñîçäàíà CreateHatch èëè CreateMonoBrush. |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
int Blit(handle dst_pixmap, int dst_x, int dst_y, |
handle src_pixmap, int src_x, int src_y, |
int width, int height) |
Ñêîïèðîâàòü ïðÿìîóãîëüíóþ îáëàñòü ïèêñåëåé. |
dst_pixmap ëîãè÷åñêèé íîìåð áèòìàïà â êîòîðûé áóäåò ïðîèçâîäèòñÿ |
êîïèðîâàíèå. SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà. |
dst_x, dst_y êîîðäèíàòû ëåâîãî âåðõíåãî óãëà îáëàñòè íàçíà÷åíèÿ |
src_pixmap ëîãè÷åñêèé íîìåð áèòìàïà - èñòî÷íèêà ïèêñåëåé. |
SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà. |
src_x,src_y êîîðäèíàòû ëåâîãî âåðõíåãî óãëà êîïèðóåìîé îáëàñòè |
width øèðèíà êîïèðóåìîé îáëàñòè |
height âûñîòà êîïèðóåìîé îáëàñòè |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
int TransparentBlit(handle dst_pixmap, int dst_x, int dst_y, |
handle src_pixmap, int src_x, int src_y, |
int width, int height, color_t key) |
Ñêîïèðîâàòü ïðÿìîóãîëüíóþ îáëàñòü ïèêñåëåé èñïîëüçóÿ ïðîçðà÷íûé öâåò. |
dst_pixmap ëîãè÷åñêèé íîìåð áèòìàïà â êîòîðûé áóäåò ïðîèçâîäèòñÿ |
êîïèðîâàíèå. SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà. |
dst_x, dst_y êîîðäèíàòû ëåâîãî âåðõíåãî óãëà îáëàñòè íàçíà÷åíèÿ |
src_pixmap ëîãè÷åñêèé íîìåð áèòìàïà - èñòî÷íèêà ïèêñåëåé. |
SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà. |
src_x,src_y êîîðäèíàòû ëåâîãî âåðõíåãî óãëà êîïèðóåìîé îáëàñòè |
width øèðèíà êîïèðóåìîé îáëàñòè |
height âûñîòà êîïèðóåìîé îáëàñòè |
key ïðîçðà÷íûé öâåò â ôîðìàòå ARGB32 |
Ôóíêöèÿ íå êîïèðóåò ïèêñåëè öâåò êîòîðûõ ñîâïàäàåò ñ key. |
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è. |
/programs/system/drivers/ati2d/accel_2d.h |
---|
1,15 → 1,14 |
#define PX_CREATE 1 |
#define PX_DESTROY 2 |
#define PX_DRAW_RECT 3 |
#define PX_FILL_RECT 4 |
#define PX_LINE 5 |
#define PX_BLIT 6 |
#define PX_BLIT_TRANSPARENT 7 |
#define PX_BLIT_ALPHA 8 |
#define PX_CLEAR 3 |
#define PX_DRAW_RECT 4 |
#define PX_FILL_RECT 5 |
#define PX_LINE 6 |
#define PX_BLIT 7 |
#define PX_BLIT_TRANSPARENT 8 |
#define PX_BLIT_ALPHA 9 |
//#define BLIT 4 |
//#define COMPIZ 5 |
typedef unsigned int color_t; |
65,10 → 64,6 |
void *local; |
}local_pixmap_t; |
//int CreatePixmap(userpixmap_t *io); |
//int DestroyPixmap(userpixmap_t *io); |
//int LockPixmap(userpixmap_t *io); |
//int UnlockPixmap(userpixmap_t *io); |
#define PX_LOCK 1 |
76,6 → 71,13 |
{ |
local_pixmap_t *dstpix; |
color_t color; |
}io_clear_t; |
typedef struct |
{ |
local_pixmap_t *dstpix; |
struct |
{ |
int x0; |
96,7 → 98,7 |
}; |
color_t color; |
color_t border; |
}draw_t; |
}io_draw_t; |
typedef struct |
{ |
112,20 → 114,11 |
u32_t bmp0; |
u32_t bmp1; |
}fill_t; |
color_t border; |
}io_fill_t; |
typedef struct |
{ |
int src_x; |
int src_y; |
int dst_x; |
int dst_y; |
int w; |
int h; |
}blit_t; |
typedef struct |
{ |
local_pixmap_t *dstpix; |
int dst_x; |
int dst_y; |
135,21 → 128,27 |
int src_y; |
int w; |
int h; |
}pixblit_t; |
color_t key; |
}io_blit_t; |
int Line2P(draw_t *draw); |
int DrawRect(draw_t * draw); |
int FillRect(fill_t * fill); |
int CreatePixmap(pixmap_t *io); |
int Blit(blit_t *blit); |
int DestroyPixmap(pixmap_t *io); |
int RadeonComposite( blit_t *blit); |
int ClearPixmap(io_clear_t *io); |
int Line(io_draw_t *draw); |
int PixBlit(pixblit_t* blit); |
int DrawRect(io_draw_t * draw); |
int FillRect(io_fill_t * fill); |
int Blit(io_blit_t* blit); |
int BlitTransparent(io_blit_t* blit); |
/programs/system/drivers/ati2d/accel_2d.inc |
---|
1,7 → 1,66 |
int Line(draw_t *draw) |
int ClearPixmap(io_clear_t *io) |
{ |
u32_t ifl; |
u32_t *ring, write; |
local_pixmap_t *dstpixmap; |
dstpixmap = (io->dstpix == (void*)-1) ? &scr_pixmap : io->dstpix ; |
ifl = safe_cli(); |
#if R300_PIO |
R5xxFIFOWait(6); |
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_SOLID_COLOR | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P |
); |
OUTREG(R5XX_DP_BRUSH_FRGD_CLR, io->color); |
OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM); |
OUTREG(R5XX_DST_PITCH_OFFSET, dstpixmap->pitch_offset); |
OUTREG(R5XX_DST_Y_X, 0); |
OUTREG(R5XX_DST_WIDTH_HEIGHT,(dstpixmap->width<<16)|dstpixmap->height); |
#else |
BEGIN_RING(); |
OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT_MULTI, 4)); |
OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_SOLID_COLOR | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P |
); |
OUT_RING(dstpixmap->pitch_offset); |
OUT_RING(io->color); |
OUT_RING( 0 ); |
OUT_RING((dstpixmap->width<<16)|dstpixmap->height); |
COMMIT_RING(); |
#endif |
safe_sti(ifl); |
return ERR_OK; |
} |
int Line(io_draw_t *draw) |
{ |
local_pixmap_t *dstpixmap; |
clip_t clip; |
int x0, y0, x1, y1; |
30,9 → 89,10 |
R5xxFIFOWait(6); |
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
rhd.gui_control | |
R5XX_GMC_BRUSH_SOLID_COLOR | |
R5XX_GMC_SRC_DATATYPE_COLOR | |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_SOLID_COLOR | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P |
68,7 → 128,7 |
return ERR_OK; |
} |
int DrawRect(draw_t* draw) |
int DrawRect(io_draw_t* draw) |
{ |
int x0, y0, x1, y1, xend, yend; |
108,12 → 168,13 |
R5xxFIFOWait(6); |
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
rhd.gui_control | |
R5XX_ROP3_P | |
R5XX_GMC_BRUSH_SOLID_COLOR | |
R5XX_GMC_SRC_DATATYPE_COLOR | |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_SOLID_COLOR | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P |
); |
OUTREG(R5XX_DP_BRUSH_FRGD_CLR, draw->color); |
182,11 → 243,11 |
return ERR_OK; |
} |
int FillRect(fill_t *fill) |
int FillRect(io_fill_t *fill) |
{ |
local_pixmap_t *dstpixmap; |
clip_t dst_clip; |
int x0, y0, x1, y1; |
int x0, y0, x1, y1, xend, yend; |
dstpixmap = (fill->dstpix == (void*)-1) ? &scr_pixmap : fill->dstpix ; |
193,8 → 254,8 |
x0 = fill->x; |
y0 = fill->y; |
x1 = x0+fill->w-1; |
y1 = y0+fill->h-1; |
xend = x1 = x0 + fill->w - 1; |
yend = y1 = y0 + fill->h - 1; |
dst_clip.xmin = 0; |
dst_clip.ymin = 0; |
237,11 → 298,14 |
OUTREG(R5XX_DST_Y_X,(y0<<16)|x0); |
OUTREG(R5XX_DST_HEIGHT_WIDTH,(h<<16)|w); |
#else |
BEGIN_RING(); |
OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7)); |
OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
R5XX_GMC_BRUSH_8X8_MONO_FG_BG | |
if( (fill->border & 0xFF000000) != 0) |
{ |
R5xxFIFOWait(2); |
OUTREG(R5XX_DP_GUI_MASTER_CNTL, |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_SOLID_COLOR | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
249,152 → 313,74 |
R5XX_ROP3_P |
); |
OUT_RING(dstpixmap->pitch_offset); |
OUT_RING(fill->bkcolor); |
OUT_RING(fill->fcolor); |
OUTREG(R5XX_DP_BRUSH_FRGD_CLR, fill->border); |
OUT_RING(fill->bmp0); |
OUT_RING(fill->bmp1); |
if( y0 == fill->y) |
{ |
R5xxFIFOWait(2); |
OUT_RING((y0<<16)|x0); |
OUT_RING((y1<<16)|x1); |
COMMIT_RING(); |
OUTREG(R5XX_DST_Y_X,(y0<<16)|x0); |
OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|1); |
y0++; |
h--; |
} |
if( y1 == yend ) |
{ |
R5xxFIFOWait(2); |
#endif |
safe_sti(ifl); |
}; |
return ERR_OK; |
}; |
#if 0 |
int Blit(blit_t *blit) |
OUTREG(R5XX_DST_Y_X,(y1<<16)|x0); |
OUTREG(R5XX_DST_WIDTH_HEIGHT,(w<<16)|1); |
h--; |
} |
if( x0 == fill->x) |
{ |
int x0, y0, x1, y1; |
R5xxFIFOWait(2); |
x0 = blit->src_x; |
y0 = blit->src_y; |
x1 = x0+blit->w-1; |
y1 = y0+blit->h-1; |
if( ! BlockClip(&clip, &x0, &y0, &x1, &y1)) |
OUTREG(R5XX_DST_Y_X,(y0<<16)|x0); |
OUTREG(R5XX_DST_WIDTH_HEIGHT,(1<<16)|h); |
} |
if( x1 == xend) |
{ |
u32 *ring, write; |
int w, h; |
u32 ifl; |
R5xxFIFOWait(2); |
w = x1-x0+1; |
h = y1-y0+1; |
OUTREG(R5XX_DST_Y_X,(y0<<16)|x1); |
OUTREG(R5XX_DST_WIDTH_HEIGHT,(1<<16)|h); |
} |
}; |
ifl = safe_cli(); |
#if R300_PIO |
#else |
BEGIN_RING(); |
OUT_RING(CP_PACKET3(RADEON_CNTL_BITBLT, 5)); |
OUT_RING(RADEON_GMC_SRC_PITCH_OFFSET_CNTL | |
RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
RADEON_GMC_BRUSH_NONE | |
OUT_RING(CP_PACKET3(RADEON_CNTL_PAINT, 7)); |
OUT_RING(RADEON_GMC_DST_PITCH_OFFSET_CNTL | |
R5XX_GMC_BRUSH_8X8_MONO_FG_BG | |
RADEON_GMC_DST_32BPP | |
RADEON_GMC_SRC_DATATYPE_COLOR | |
RADEON_DP_SRC_SOURCE_MEMORY | |
(1 << 28)+(1 << 30) | R5XX_ROP3_S); |
R5XX_GMC_CLR_CMP_CNTL_DIS | |
R5XX_GMC_WR_MSK_DIS | |
R5XX_ROP3_P |
); |
OUT_RING(rhd.dst_pitch_offset); |
OUT_RING(rhd.dst_pitch_offset); |
OUT_RING(dstpixmap->pitch_offset); |
OUT_RING(fill->bkcolor); |
OUT_RING(fill->fcolor); |
OUT_RING((x0<<16)|y0); |
OUT_RING((blit->dst_x<<16)|blit->dst_y); |
OUT_RING((w<<16)|h); |
OUT_RING(fill->bmp0); |
OUT_RING(fill->bmp1); |
OUT_RING((y0<<16)|x0); |
OUT_RING((y1<<16)|x1); |
COMMIT_RING(); |
#endif |
safe_sti(ifl); |
} ; |
return ERR_OK; |
} |
#endif |
#if 0 |
int LockPixmap(userpixmap_t *io) |
{ |
pixmap_t *pixmap; |
size_t size; |
void *usermap; |
dbgprintf("Lock pixmap %x\n", io->pixmap); |
if(io->pixmap == (pixmap_t*)-1) |
return ERR_PARAM; |
else |
pixmap = io->pixmap; |
if( (pixmap->flags & 1) == PX_LOCK ) |
return ERR_PARAM; |
size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
if (usermap = UserAlloc(size)) |
{ |
CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size); |
pixmap->flags |= PX_LOCK; |
pixmap->usermap = usermap; |
io->usermap = usermap; |
io->pitch = pixmap->pitch; |
dbgprintf("map at %x\n", io->usermap); |
return ERR_OK; |
} |
else |
return ERR_PARAM; |
}; |
int UnlockPixmap(userpixmap_t *io) |
{ |
pixmap_t *pixmap; |
size_t size; |
dbgprintf("Unlock pixmap %x\n", io->pixmap); |
if(io->pixmap == (pixmap_t*)-1) |
return ERR_PARAM; |
else |
pixmap = io->pixmap; |
if( (pixmap->flags & 1) != PX_LOCK ) |
return ERR_PARAM; |
/* Sanity checks */ |
if( (pixmap->usermap == 0)|| |
((u32_t)pixmap->usermap >= 0x80000000) || |
((u32_t)pixmap->usermap & 4095) |
) |
return ERR_PARAM; |
size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
UnmapPages(pixmap->usermap, size); |
UserFree(pixmap->usermap); |
pixmap->usermap = NULL; |
pixmap->flags &= ~PX_LOCK; |
io->usermap = NULL; |
io->pitch = 0; |
return ERR_OK; |
}; |
#endif |
int PixBlit(pixblit_t *blit) |
int Blit(io_blit_t *blit) |
{ |
clip_t src_clip, dst_clip; |
487,7 → 473,7 |
}; |
int TransBlit(pixblit_t *blit) |
int BlitTransparent(io_blit_t *blit) |
{ |
clip_t src_clip, dst_clip; |
586,3 → 572,74 |
return ERR_OK; |
} |
#if 0 |
int LockPixmap(userpixmap_t *io) |
{ |
pixmap_t *pixmap; |
size_t size; |
void *usermap; |
dbgprintf("Lock pixmap %x\n", io->pixmap); |
if(io->pixmap == (pixmap_t*)-1) |
return ERR_PARAM; |
else |
pixmap = io->pixmap; |
if( (pixmap->flags & 1) == PX_LOCK ) |
return ERR_PARAM; |
size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
if (usermap = UserAlloc(size)) |
{ |
CommitPages(usermap, ((u32_t)pixmap->raw+rhd.PhisBase)|7|(1<<9), size); |
pixmap->flags |= PX_LOCK; |
pixmap->usermap = usermap; |
io->usermap = usermap; |
io->pitch = pixmap->pitch; |
dbgprintf("map at %x\n", io->usermap); |
return ERR_OK; |
} |
else |
return ERR_PARAM; |
}; |
int UnlockPixmap(userpixmap_t *io) |
{ |
pixmap_t *pixmap; |
size_t size; |
dbgprintf("Unlock pixmap %x\n", io->pixmap); |
if(io->pixmap == (pixmap_t*)-1) |
return ERR_PARAM; |
else |
pixmap = io->pixmap; |
if( (pixmap->flags & 1) != PX_LOCK ) |
return ERR_PARAM; |
/* Sanity checks */ |
if( (pixmap->usermap == 0)|| |
((u32_t)pixmap->usermap >= 0x80000000) || |
((u32_t)pixmap->usermap & 4095) |
) |
return ERR_PARAM; |
size = (pixmap->pitch*pixmap->width+4095) & ~ 4095; |
UnmapPages(pixmap->usermap, size); |
UserFree(pixmap->usermap); |
pixmap->usermap = NULL; |
pixmap->flags &= ~PX_LOCK; |
io->usermap = NULL; |
io->pitch = 0; |
return ERR_OK; |
}; |
#endif |
/programs/system/drivers/ati2d/accel_3d.inc |
---|
1174,6 → 1174,7 |
#undef VTX_OUT |
#undef VTX_OUT_MASK |
#if 0 |
int RadeonComposite( blit_t *blit) |
{ |
1235,3 → 1236,4 |
#endif |
} |
#endif |
/programs/system/drivers/ati2d/ati2d.c |
---|
30,7 → 30,7 |
if(action != 1) |
return 0; |
if(!dbg_open("/hd0/2/ati2d.log")) |
if(!dbg_open("/rd/1/drivers/ati2d.log")) |
{ |
printf("Can't open /rd/1/drivers/ati2d.log\nExit\n"); |
return 0; |
37,7 → 37,7 |
} |
if( GetScreenBpp() != 32) |
{ |
printf("32 bpp dispaly mode required !\nExit\t"); |
dbgprintf("32 bpp dispaly mode required !\nExit\t"); |
return 0; |
} |
82,7 → 82,7 |
#define SRV_GETVERSION 0 |
int _stdcall srv_2d(ioctl_t *io) |
int __stdcall srv_2d(ioctl_t *io) |
{ |
u32_t *inp; |
u32_t *outp; |
110,36 → 110,37 |
return DestroyPixmap((pixmap_t*)inp); |
break; |
case PX_CLEAR: |
if(io->inp_size==2) |
return ClearPixmap((io_clear_t*)inp); |
break; |
case PX_DRAW_RECT: |
if(io->inp_size==7) |
return DrawRect((draw_t*)inp); |
return DrawRect((io_draw_t*)inp); |
break; |
case PX_FILL_RECT: |
if(io->inp_size==9) |
return FillRect((fill_t*)inp); |
if(io->inp_size==10) |
return FillRect((io_fill_t*)inp); |
break; |
case PX_BLIT: |
if(io->inp_size==8) |
return PixBlit((pixblit_t*)inp); |
return Blit((io_blit_t*)inp); |
break; |
case PX_BLIT_TRANSPARENT: |
if(io->inp_size==8) |
return TransBlit((pixblit_t*)inp); |
if(io->inp_size==9) |
return BlitTransparent((io_blit_t*)inp); |
break; |
case PX_LINE: |
if(io->inp_size==6) |
return Line((draw_t*)inp); |
return Line((io_draw_t*)inp); |
break; |
/* |
case BLIT: |
if(io->inp_size==6) |
return Blit((blit_t*)inp); |
break; |
case COMPIZ: |
if(io->inp_size==6) |
157,7 → 158,6 |
#include "init.c" |
#include "pci.c" |
#include "ati_mem.c" |
//#include "cursor.inc" |
#include "r500.inc" |
164,6 → 164,6 |
#include "clip.inc" |
#include "pixmap.inc" |
#include "accel_2d.inc" |
#include "accel_3d.inc" |
//#include "accel_3d.inc" |
/programs/system/drivers/ati2d/init.c |
---|
117,9 → 117,5 |
return FALSE; |
}; |
//int KernelFree(void *p) |
//{ |
// |
// return 0; |
//} |
/programs/system/drivers/ati2d/makefile |
---|
36,7 → 36,7 |
wlink name ati2d.dll SYS nt_dll lib libdrv op offset=0 op nod op maxe=25 op el op STUB=stub.exe op START=_drvEntry @rhd.lk1 |
kpack.exe ati2d.dll ati2d.drv |
ati2d.obj : ati2d.c $(SRC_DEP) $(HFILES) |
ati2d.obj : ati2d.c $(SRC_DEP) $(HFILES) Makefile |
$(CC) $(CFLAGS) -o ati2d.obj ati2d.c |
curhelp.obj : curhelp.asm |
/programs/system/drivers/ati2d/r500.inc |
---|
409,33 → 409,33 |
// load_microcode(); |
rhd.ring_base = CreateRingBuffer(0x8000, PG_SW | PG_NOCACHE); |
dbgprintf("create cp ring buffer %x\n", rhd.ring_base); |
base = GetPgAddr(rhd.ring_base); |
// rhd.ring_base = CreateRingBuffer(0x8000, PG_SW | PG_NOCACHE); |
// dbgprintf("create cp ring buffer %x\n", rhd.ring_base); |
// base = GetPgAddr(rhd.ring_base); |
OUTREG(RADEON_CP_RB_BASE, base); |
dbgprintf("ring base %x\n", base); |
// OUTREG(RADEON_CP_RB_BASE, base); |
// dbgprintf("ring base %x\n", base); |
OUTREG(RADEON_CP_RB_WPTR_DELAY, 0); |
// OUTREG(RADEON_CP_RB_WPTR_DELAY, 0); |
rhd.ring_rp = rhd.ring_wp = INREG(RADEON_CP_RB_RPTR); |
OUTREG(RADEON_CP_RB_WPTR,rhd.ring_rp); |
// rhd.ring_rp = rhd.ring_wp = INREG(RADEON_CP_RB_RPTR); |
// OUTREG(RADEON_CP_RB_WPTR,rhd.ring_rp); |
OUTREG(RADEON_CP_RB_RPTR_ADDR, 0); // ring buffer read pointer no update |
// OUTREG(RADEON_CP_RB_RPTR_ADDR, 0); // ring buffer read pointer no update |
OUTREG(RADEON_CP_RB_CNTL, RADEON_RB_NO_UPDATE | 12); |
OUTREG(RADEON_SCRATCH_UMSK, 0); // no scratch update |
// OUTREG(RADEON_CP_RB_CNTL, RADEON_RB_NO_UPDATE | 12); |
// OUTREG(RADEON_SCRATCH_UMSK, 0); // no scratch update |
MASKREG(RADEON_BUS_CNTL,0,RADEON_BUS_MASTER_DIS); |
// MASKREG(RADEON_BUS_CNTL,0,RADEON_BUS_MASTER_DIS); |
R5xx2DIdleLocal(); |
// R5xx2DIdleLocal(); |
OUTREG(RADEON_ISYNC_CNTL, RADEON_ISYNC_ANY2D_IDLE3D | |
RADEON_ISYNC_ANY3D_IDLE2D | |
RADEON_ISYNC_WAIT_IDLEGUI | |
RADEON_ISYNC_CPSCRATCH_IDLEGUI); |
// OUTREG(RADEON_ISYNC_CNTL, RADEON_ISYNC_ANY2D_IDLE3D | |
// RADEON_ISYNC_ANY3D_IDLE2D | |
// RADEON_ISYNC_WAIT_IDLEGUI | |
// RADEON_ISYNC_CPSCRATCH_IDLEGUI); |
OUTREG(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM); // run |
// OUTREG(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM); // run |
} |