What's up everybody,

I'm writing an r200/r300 driver for my small OS,
to be honest it's based (a lot) on your driver and linux's fb.
The thing is I managed to get blitting to work.

my hardware:
P4 2GHz, intel 945D
Gigabyte Radeon 9550 128MB/128bit (GV-R955128D) by linux (gentoo 2.6.17-ck1-r3) 
seen as:

//01:00.0 0300: 1002:4153
01:00.0 VGA compatible controller: ATI Technologies Inc RV350 AS [Radeon 9550] 
(prog-if 00 [VGA])
//      Subsystem: 1458:4050
        Subsystem: Giga-byte Technology Unknown device 4050
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 11
        Memory at d8000000 (32-bit, prefetchable) [size=128M]
        I/O ports at d800 [size=256]
        Memory at c7800000 (32-bit, non-prefetchable) [size=64K]
        Expansion ROM at d7fe0000 [disabled] [size=128K]
        Capabilities: [58] AGP version 2.0
        Capabilities: [50] Power Management version 2

//01:00.1 0380: 1002:4173
01:00.1 Display controller: ATI Technologies Inc RV350 ?? [Radeon 9550] 
(Secondary)
//      Subsystem: 1458:4051
        Subsystem: Giga-byte Technology Unknown device 4051
        Flags: bus master, 66MHz, medium devsel, latency 64
        Memory at c8000000 (32-bit, prefetchable) [size=128M]
        Memory at c7000000 (32-bit, non-prefetchable) [size=64K]
        Capabilities: [50] Power Management version 2


When the driver prepares for blitting
setting reg R300_VAP_UNKNOWN_221C to R300_221C_CLEAR istead of NORMAL 
fixed the problem of nothing happening.

Reg R300_RS_CNTL_0 should be set to 
(1 << R300_RS_CNTL_TC_CNT_SHIFT) | (0 << R300_RS_CNTL_CI_CNT_SHIFT)

Also setting R300_VTX_ST_DENORMALIZED in R300_SE_VTE_CNTL
doesn't have any effect.


When setting the source I had to set reg R300_TX_PITCH_0 to
        Image Width - 8
instead of
        Image Pitch - 64

And R300_TX_OFFSET_0 to
        (Image Offset/*in bytes*/ / 32) << dDFB_R300_TXO_OFFSET_SHIFT
instead of
        Image Offset/*in bytes*/ << dDFB_R300_TXO_OFFSET_SHIFT


With these changes everything works good, at least for me;p

I also decoded the vertex program using macros from vertex_shader.h from dri's 
r300 driver

//R300_VAP_PVS_CNTL_1 = 0x00401000
R300_VAP_PVS_CNTL_1 = (0 << dDFB_R300_PVS_CNTL_1_PROGRAM_START_SHIFT)
                        | (4 << dDFB_R300_PVS_CNTL_1_POS_END_SHIFT)
                        | (4 << dDFB_R300_PVS_CNTL_1_PROGRAM_END_SHIFT)
        
//R300_VAP_PVS_CNTL_2 = 0x00040000
R300_VAP_PVS_CNTL_2 = (0 << dDFB_R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT)
                        | (4 << dDFB_R300_PVS_CNTL_2_PARAM_COUNT_SHIFT)
        
//R300_VAP_PVS_CNTL_3 = 0x00000004
R300_VAP_PVS_CNTL_3 = (4 << dDFB_R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT)
                        | (4 << dDFB_R300_PVS_CNTL_3_PROGRAM_UNKNOWN2_SHIFT)
/*i think both of them should point to last instruction*/

/*
the rest of the stuf
and just after
R300_VAP_PVS_UPLOAD_ADDRESS = dDFB_R300_PVS_UPLOAD_PROGRAM
*/

R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_OP (MAD, 0, ALL, TMP)

R300_VAP_PVS_UPLOAD_DATA = VSF_ATTR_X (0)
R300_VAP_PVS_UPLOAD_DATA = VSF_PARAM (0)
R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_SOURCE (0, ZERO, ZERO, ZERO, ZERO, PARAM, 
NONE)


R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_OP (MAD, 0, ALL, TMP)

R300_VAP_PVS_UPLOAD_DATA = VSF_ATTR_Y (0)
R300_VAP_PVS_UPLOAD_DATA = VSF_PARAM (1)
R300_VAP_PVS_UPLOAD_DATA = VSF_TMP (0)


R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_OP (MAD, 0, ALL, TMP)

R300_VAP_PVS_UPLOAD_DATA = VSF_ATTR_Z (0)
R300_VAP_PVS_UPLOAD_DATA = VSF_PARAM (2)
R300_VAP_PVS_UPLOAD_DATA = VSF_TMP (0)


R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_OP (MAD, 0, ALL, RESULT)

R300_VAP_PVS_UPLOAD_DATA = VSF_ATTR_W (0)
R300_VAP_PVS_UPLOAD_DATA = VSF_PARAM (3)
R300_VAP_PVS_UPLOAD_DATA = VSF_TMP (0)


R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_OP (ADD, 1, ALL, RESULT)

R300_VAP_PVS_UPLOAD_DATA = VSF_REG (1)
R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_SOURCE (1, ZERO, ZERO, ZERO, ZERO, ATTR, 
NONE)
R300_VAP_PVS_UPLOAD_DATA = EASY_VSF_SOURCE (1, ZERO, ZERO, ZERO, ZERO, ATTR, 
NONE)


I might have missed something, because I was simply trying a lot of different
possibilities and there were a lot of'em;p


Best regards and hope it's helpful,
        Timon

PS. you also might play with R300_RS_CNTL_0_UNKNOWN_18 in reg R300_RS_CNTL_0
it doesn't change anything for me but in the reg.h file it's written
// 0_UNKNOWN_18 has always been set except for clear operations.


----------------------------------------------------------------------
Jestes kierowca? To poczytaj! >>> http://link.interia.pl/f199e


_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to