nkeynes@185 | 1 | /**
|
nkeynes@213 | 2 | * $Id: pvr.h,v 1.3 2006-08-18 09:33:19 nkeynes Exp $
|
nkeynes@185 | 3 | *
|
nkeynes@185 | 4 | * PVR support code
|
nkeynes@185 | 5 | *
|
nkeynes@185 | 6 | * Copyright (c) 2006 Nathan Keynes.
|
nkeynes@185 | 7 | *
|
nkeynes@185 | 8 | * This program is free software; you can redistribute it and/or modify
|
nkeynes@185 | 9 | * it under the terms of the GNU General Public License as published by
|
nkeynes@185 | 10 | * the Free Software Foundation; either version 2 of the License, or
|
nkeynes@185 | 11 | * (at your option) any later version.
|
nkeynes@185 | 12 | *
|
nkeynes@185 | 13 | * This program is distributed in the hope that it will be useful,
|
nkeynes@185 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
nkeynes@185 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
nkeynes@185 | 16 | * GNU General Public License for more details.
|
nkeynes@185 | 17 | */
|
nkeynes@185 | 18 |
|
nkeynes@185 | 19 | #define PVR_VRAM_BASE 0xA5000000
|
nkeynes@185 | 20 | #define PVR_VRAM64_BASE 0xA4000000
|
nkeynes@185 | 21 |
|
nkeynes@185 | 22 |
|
nkeynes@185 | 23 | #define TA_PIXFMT_RGB555 0
|
nkeynes@185 | 24 | #define TA_PIXFMT_RGB565 1
|
nkeynes@185 | 25 | #define TA_PIXFMT_ARGB4444 2
|
nkeynes@185 | 26 | #define TA_PIXFMT_ARGB1555 3
|
nkeynes@185 | 27 | #define TA_PIXFMT_RGB888 5
|
nkeynes@185 | 28 | #define TA_PIXFMT_ARGB8888 6
|
nkeynes@185 | 29 | #define TA_PIXFMT_DITHER 8
|
nkeynes@185 | 30 |
|
nkeynes@185 | 31 | #define TA_CMD_POLYGON 0x80000000
|
nkeynes@185 | 32 | #define TA_CMD_MODIFIER 0x80000000
|
nkeynes@185 | 33 | #define TA_CMD_POLYGON_TYPE_OPAQUE (0<<24)
|
nkeynes@185 | 34 | #define TA_CMD_MODIFIER_TYPE_OPAQUE (1<<24)
|
nkeynes@185 | 35 | #define TA_CMD_POLYGON_TYPE_TRANSPARENT (2<<24)
|
nkeynes@185 | 36 | #define TA_CMD_MODIFIER_TYPE_TRANSPARENT (3<<24)
|
nkeynes@185 | 37 | #define TA_CMD_POLYGON_TYPE_PUNCHTHRU (4<<24)
|
nkeynes@185 | 38 | #define TA_CMD_POLYGON_SUBLIST 0x00800000
|
nkeynes@185 | 39 | #define TA_CMD_POLYGON_STRIPLENGTH_1 (0<<18)
|
nkeynes@185 | 40 | #define TA_CMD_POLYGON_STRIPLENGTH_2 (1<<18)
|
nkeynes@185 | 41 | #define TA_CMD_POLYGON_STRIPLENGTH_4 (2<<18)
|
nkeynes@185 | 42 | #define TA_CMD_POLYGON_STRIPLENGTH_6 (3<<18)
|
nkeynes@185 | 43 | #define TA_CMD_POLYGON_USER_CLIP_INSIDE 0x00020000
|
nkeynes@185 | 44 | #define TA_CMD_POLYGON_USER_CLIP_OUTSIDE 0x00030000
|
nkeynes@185 | 45 | #define TA_CMD_POLYGON_AFFECTED_BY_MODIFIER 0x00000080
|
nkeynes@185 | 46 | #define TA_CMD_POLYGON_CHEAP_SHADOW_MODIFIER 0x00000000
|
nkeynes@185 | 47 | #define TA_CMD_POLYGON_NORMAL_MODIFIER 0x00000040
|
nkeynes@185 | 48 | #define TA_CMD_POLYGON_PACKED_COLOUR (0<<4)
|
nkeynes@185 | 49 | #define TA_CMD_POLYGON_FLOAT_COLOUR (1<<4)
|
nkeynes@185 | 50 | #define TA_CMD_POLYGON_INTENSITY (2<<4)
|
nkeynes@185 | 51 | #define TA_CMD_POLYGON_PREVFACE_INTENSITY (3<<4)
|
nkeynes@185 | 52 | #define TA_CMD_POLYGON_TEXTURED 0x00000008
|
nkeynes@185 | 53 | #define TA_CMD_POLYGON_SPECULAR_HIGHLIGHT 0x00000004
|
nkeynes@185 | 54 | #define TA_CMD_POLYGON_GOURAUD_SHADING 0x00000002
|
nkeynes@185 | 55 | #define TA_CMD_POLYGON_16BIT_UV 0x00000001
|
nkeynes@185 | 56 |
|
nkeynes@185 | 57 | #define TA_POLYMODE1_Z_NEVER (0<<29)
|
nkeynes@185 | 58 | #define TA_POLYMODE1_Z_LESS (1<<29)
|
nkeynes@185 | 59 | #define TA_POLYMODE1_Z_EQUAL (2<<29)
|
nkeynes@185 | 60 | #define TA_POLYMODE1_Z_LESSEQUAL (3<<29)
|
nkeynes@185 | 61 | #define TA_POLYMODE1_Z_GREATER (4<<29)
|
nkeynes@185 | 62 | #define TA_POLYMODE1_Z_NOTEQUAL (5<<29)
|
nkeynes@185 | 63 | #define TA_POLYMODE1_Z_GREATEREQUAL (6<<29)
|
nkeynes@185 | 64 | #define TA_POLYMODE1_Z_ALWAYS (7<<29)
|
nkeynes@185 | 65 | #define TA_POLYMODE1_CULL_SMALL (1<<27)
|
nkeynes@185 | 66 | #define TA_POLYMODE1_CULL_CCW (2<<27)
|
nkeynes@185 | 67 | #define TA_POLYMODE1_CULL_CW (3<<27)
|
nkeynes@185 | 68 | #define TA_POLYMODE1_NO_Z_UPDATE 0x04000000
|
nkeynes@185 | 69 |
|
nkeynes@185 | 70 | #define TA_POLYMODE2_BLEND_DEFAULT (0x20<<24)
|
nkeynes@185 | 71 | #define TA_POLYMODE2_FOG_TABLE (0<<22)
|
nkeynes@185 | 72 | #define TA_POLYMODE2_FOG_VERTEX (1<<22)
|
nkeynes@185 | 73 | #define TA_POLYMODE2_FOG_DISABLED (2<<22)
|
nkeynes@185 | 74 | #define TA_POLYMODE2_FOG_TABLE2 (3<<22)
|
nkeynes@185 | 75 | #define TA_POLYMODE2_CLAMP_COLOURS 0x00200000
|
nkeynes@185 | 76 | #define TA_POLYMODE2_ENABLE_ALPHA 0x00100000
|
nkeynes@185 | 77 | #define TA_POLYMODE2_DISABLE_TEXTURE_TRANSPARENCY 0x00080000
|
nkeynes@185 | 78 | #define TA_POLYMODE2_TEXTURE_FLIP_U 0x00080000
|
nkeynes@185 | 79 | #define TA_POLYMODE2_TEXTURE_FLIP_V 0x00040000
|
nkeynes@185 | 80 | #define TA_POLYMODE2_TEXTURE_CLAMP_U 0x00020000
|
nkeynes@185 | 81 | #define TA_POLYMODE2_TEXTURE_CLAMP_V 0x00010000
|
nkeynes@185 | 82 | #define TA_POLYMODE2_TRILINEAR_FILTER 0x00004000
|
nkeynes@185 | 83 | #define TA_POLYMODE2_BILINEAR_FILTER 0x00002000
|
nkeynes@185 | 84 |
|
nkeynes@185 | 85 | #define TA_POLYMODE2_MIPMAP_D_0_25 (1<<8)
|
nkeynes@185 | 86 | #define TA_POLYMODE2_MIPMAP_D_0_50 (2<<8)
|
nkeynes@185 | 87 | #define TA_POLYMODE2_MIPMAP_D_0_75 (3<<8)
|
nkeynes@185 | 88 | #define TA_POLYMODE2_MIPMAP_D_1_00 (4<<8)
|
nkeynes@185 | 89 | #define TA_POLYMODE2_MIPMAP_D_1_25 (5<<8)
|
nkeynes@185 | 90 | #define TA_POLYMODE2_MIPMAP_D_1_50 (6<<8)
|
nkeynes@185 | 91 | #define TA_POLYMODE2_MIPMAP_D_1_75 (7<<8)
|
nkeynes@185 | 92 | #define TA_POLYMODE2_MIPMAP_D_2_00 (8<<8)
|
nkeynes@185 | 93 | #define TA_POLYMODE2_MIPMAP_D_2_25 (9<<8)
|
nkeynes@185 | 94 | #define TA_POLYMODE2_MIPMAP_D_2_50 (10<<8)
|
nkeynes@185 | 95 | #define TA_POLYMODE2_MIPMAP_D_2_75 (11<<8)
|
nkeynes@185 | 96 | #define TA_POLYMODE2_MIPMAP_D_3_00 (12<<8)
|
nkeynes@185 | 97 | #define TA_POLYMODE2_MIPMAP_D_3_25 (13<<8)
|
nkeynes@185 | 98 | #define TA_POLYMODE2_MIPMAP_D_3_50 (14<<8)
|
nkeynes@185 | 99 | #define TA_POLYMODE2_MIPMAP_D_3_75 (15<<8)
|
nkeynes@185 | 100 | #define TA_POLYMODE2_TEXTURE_REPLACE (0<<6)
|
nkeynes@185 | 101 | #define TA_POLYMODE2_TEXTURE_MODULATE (1<<6)
|
nkeynes@185 | 102 | #define TA_POLYMODE2_TEXTURE_DECAL (2<<6)
|
nkeynes@185 | 103 | #define TA_POLYMODE2_U_SIZE_8 (0<<3)
|
nkeynes@185 | 104 | #define TA_POLYMODE2_U_SIZE_16 (1<<3)
|
nkeynes@185 | 105 | #define TA_POLYMODE2_U_SIZE_32 (2<<3)
|
nkeynes@185 | 106 | #define TA_POLYMODE2_U_SIZE_64 (3<<3)
|
nkeynes@185 | 107 | #define TA_POLYMODE2_U_SIZE_128 (4<<3)
|
nkeynes@185 | 108 | #define TA_POLYMODE2_U_SIZE_256 (5<<3)
|
nkeynes@185 | 109 | #define TA_POLYMODE2_U_SIZE_512 (6<<3)
|
nkeynes@185 | 110 | #define TA_POLYMODE2_U_SIZE_1024 (7<<3)
|
nkeynes@185 | 111 | #define TA_POLYMODE2_V_SIZE_8 (0<<0)
|
nkeynes@185 | 112 | #define TA_POLYMODE2_V_SIZE_16 (1<<0)
|
nkeynes@185 | 113 | #define TA_POLYMODE2_V_SIZE_32 (2<<0)
|
nkeynes@185 | 114 | #define TA_POLYMODE2_V_SIZE_64 (3<<0)
|
nkeynes@185 | 115 | #define TA_POLYMODE2_V_SIZE_128 (4<<0)
|
nkeynes@185 | 116 | #define TA_POLYMODE2_V_SIZE_256 (5<<0)
|
nkeynes@185 | 117 | #define TA_POLYMODE2_V_SIZE_512 (6<<0)
|
nkeynes@185 | 118 | #define TA_POLYMODE2_V_SIZE_1024 (7<<0)
|
nkeynes@185 | 119 | #define TA_TEXTUREMODE_MIPMAP 0x80000000
|
nkeynes@185 | 120 | #define TA_TEXTUREMODE_VQ_COMPRESSION 0x40000000
|
nkeynes@185 | 121 | #define TA_TEXTUREMODE_ARGB1555 (0<<27)
|
nkeynes@185 | 122 | #define TA_TEXTUREMODE_RGB565 (1<<27)
|
nkeynes@185 | 123 | #define TA_TEXTUREMODE_ARGB4444 (2<<27)
|
nkeynes@185 | 124 | #define TA_TEXTUREMODE_YUV422 (3<<27)
|
nkeynes@185 | 125 | #define TA_TEXTUREMODE_BUMPMAP (4<<27)
|
nkeynes@185 | 126 | #define TA_TEXTUREMODE_CLUT4 (5<<27)
|
nkeynes@185 | 127 | #define TA_TEXTUREMODE_CLUT8 (6<<27)
|
nkeynes@185 | 128 | #define TA_TEXTUREMODE_CLUTBANK8(n) ((n)<<25) /* 0-3 */
|
nkeynes@185 | 129 | #define TA_TEXTUREMODE_CLUTBANK4(n) ((n)<<21) /* 0-63 */
|
nkeynes@185 | 130 | #define TA_TEXTUREMODE_TWIDDLED 0x00000000
|
nkeynes@185 | 131 | #define TA_TEXTUREMODE_NON_TWIDDLED 0x04000000
|
nkeynes@185 | 132 | #define TA_TEXTUREMODE_ADDRESS(a) ((((unsigned long)(void*)(a))&0x7fffff)>>3)
|
nkeynes@185 | 133 | #define TA_CMD_VERTEX 0xe0000000
|
nkeynes@185 | 134 | #define TA_CMD_VERTEX_LAST 0xF0000000 /* end of strip */
|
nkeynes@185 | 135 |
|
nkeynes@190 | 136 | #define GRID_SIZE( hres, vres ) (((((vres+31) / 32)-1)<<16)|((((hres+31) / 32)-1)))
|
nkeynes@185 | 137 |
|
nkeynes@190 | 138 | struct ta_config {
|
nkeynes@190 | 139 | unsigned int ta_cfg;
|
nkeynes@190 | 140 | unsigned int grid_size;
|
nkeynes@190 | 141 | unsigned int obj_start;
|
nkeynes@190 | 142 | unsigned int obj_end;
|
nkeynes@190 | 143 | unsigned int tile_start;
|
nkeynes@190 | 144 | unsigned int tile_end;
|
nkeynes@190 | 145 | unsigned int plist_start;
|
nkeynes@190 | 146 | };
|
nkeynes@185 | 147 |
|
nkeynes@213 | 148 | struct render_config {
|
nkeynes@213 | 149 | unsigned int polybuf;
|
nkeynes@213 | 150 | unsigned int tilemap;
|
nkeynes@213 | 151 | unsigned int render_addr;
|
nkeynes@213 | 152 | unsigned int width, height;
|
nkeynes@213 | 153 | unsigned int mode;
|
nkeynes@213 | 154 | float farclip, nearclip;
|
nkeynes@213 | 155 | };
|
nkeynes@213 | 156 |
|
nkeynes@190 | 157 | void ta_init( struct ta_config *config );
|
nkeynes@213 | 158 | void ta_reinit();
|
nkeynes@185 | 159 | void pvr_dump_objbuf( FILE *f );
|
nkeynes@185 | 160 | void pvr_dump_tilebuf( FILE *f );
|
nkeynes@185 | 161 | int pvr_get_objbuf_size();
|
nkeynes@213 | 162 | int pvr_get_objbuf_posn();
|
nkeynes@190 | 163 | int pvr_get_plist_posn();
|
nkeynes@213 | 164 | void render_set_backplane( unsigned int mode );
|
nkeynes@213 | 165 | void render_start( struct render_config *config );
|
nkeynes@213 | 166 | void display_render( struct render_config *config );
|
nkeynes@213 | 167 | void pvr_build_tilemap1( unsigned int addr, struct ta_config *config, unsigned int control_word );
|
nkeynes@213 | 168 |
|
nkeynes@213 | 169 | void pvr_build_tilemap2( unsigned int addr, struct ta_config *config, unsigned int control_word );
|