annotate vidix/drivers/radeon_vid.c @ 12334:eeddcef4fb08

"hard" frame duplication for mencoder. this finally makes it possible to generate valid mpeg output from avi's that have duplicate frames in them, or when using inverse telecine filters. to use it, put the "harddup" filter at the end of your filter chain.
author rfelker
date Wed, 28 Apr 2004 04:02:46 +0000
parents b52e831261b1
children a84160d660af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1 /*
872781fef1b3 preliminary version
nick
parents:
diff changeset
2 radeon_vid - VIDIX based video driver for Radeon and Rage128 chips
4030
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
3 Copyrights 2002 Nick Kurshev. This file is based on sources from
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
4 GATOS (gatos.sf.net) and X11 (www.xfree86.org)
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
5 Licence: GPL
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
6
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
7 31.12.2002 added support for fglrx drivers by Marcel Naziri (zwobbl@zwobbl.de)
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
8 6.04.2004 fixes to allow compiling vidix without X11 (broken in original patch)
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
9 PPC support by Alex Beregszaszi
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
10 */
872781fef1b3 preliminary version
nick
parents:
diff changeset
11
872781fef1b3 preliminary version
nick
parents:
diff changeset
12 #include <errno.h>
872781fef1b3 preliminary version
nick
parents:
diff changeset
13 #include <stdio.h>
872781fef1b3 preliminary version
nick
parents:
diff changeset
14 #include <stdlib.h>
872781fef1b3 preliminary version
nick
parents:
diff changeset
15 #include <string.h>
872781fef1b3 preliminary version
nick
parents:
diff changeset
16 #include <math.h>
4003
92c59012249d stdint.h replaced by inttypes.h (used more frequently in the sources)
pl
parents: 3996
diff changeset
17 #include <inttypes.h>
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
18
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
19 #include "../../config.h"
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
20 #include "../../bswap.h"
4201
0918fb422b10 fix include order
atmos4
parents: 4193
diff changeset
21 #include "../../libdha/pci_ids.h"
0918fb422b10 fix include order
atmos4
parents: 4193
diff changeset
22 #include "../../libdha/pci_names.h"
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
23 #include "../vidix.h"
872781fef1b3 preliminary version
nick
parents:
diff changeset
24 #include "../fourcc.h"
872781fef1b3 preliminary version
nick
parents:
diff changeset
25 #include "../../libdha/libdha.h"
872781fef1b3 preliminary version
nick
parents:
diff changeset
26 #include "radeon.h"
872781fef1b3 preliminary version
nick
parents:
diff changeset
27
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
28 #ifdef HAVE_X11
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
29 #include <X11/Xlib.h>
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
30 #endif
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
31
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
32 #ifdef RAGE128
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
33 #define RADEON_MSG "[rage128]"
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
34 #define X_ADJUST 0
872781fef1b3 preliminary version
nick
parents:
diff changeset
35 #else
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
36 #define RADEON_MSG "[radeon]"
8521
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
37 #define X_ADJUST (is_shift_required ? 8 : 0)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
38 #ifndef RADEON
872781fef1b3 preliminary version
nick
parents:
diff changeset
39 #define RADEON
872781fef1b3 preliminary version
nick
parents:
diff changeset
40 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
41 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
42
4030
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
43 static int __verbose = 0;
8521
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
44 #ifdef RADEON
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
45 static int is_shift_required = 0;
8521
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
46 #endif
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
47
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
48 typedef struct bes_registers_s
872781fef1b3 preliminary version
nick
parents:
diff changeset
49 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
50 /* base address of yuv framebuffer */
872781fef1b3 preliminary version
nick
parents:
diff changeset
51 uint32_t yuv_base;
872781fef1b3 preliminary version
nick
parents:
diff changeset
52 uint32_t fourcc;
872781fef1b3 preliminary version
nick
parents:
diff changeset
53 uint32_t dest_bpp;
872781fef1b3 preliminary version
nick
parents:
diff changeset
54 /* YUV BES registers */
872781fef1b3 preliminary version
nick
parents:
diff changeset
55 uint32_t reg_load_cntl;
872781fef1b3 preliminary version
nick
parents:
diff changeset
56 uint32_t h_inc;
872781fef1b3 preliminary version
nick
parents:
diff changeset
57 uint32_t step_by;
872781fef1b3 preliminary version
nick
parents:
diff changeset
58 uint32_t y_x_start;
872781fef1b3 preliminary version
nick
parents:
diff changeset
59 uint32_t y_x_end;
872781fef1b3 preliminary version
nick
parents:
diff changeset
60 uint32_t v_inc;
872781fef1b3 preliminary version
nick
parents:
diff changeset
61 uint32_t p1_blank_lines_at_top;
872781fef1b3 preliminary version
nick
parents:
diff changeset
62 uint32_t p23_blank_lines_at_top;
872781fef1b3 preliminary version
nick
parents:
diff changeset
63 uint32_t vid_buf_pitch0_value;
872781fef1b3 preliminary version
nick
parents:
diff changeset
64 uint32_t vid_buf_pitch1_value;
872781fef1b3 preliminary version
nick
parents:
diff changeset
65 uint32_t p1_x_start_end;
872781fef1b3 preliminary version
nick
parents:
diff changeset
66 uint32_t p2_x_start_end;
872781fef1b3 preliminary version
nick
parents:
diff changeset
67 uint32_t p3_x_start_end;
872781fef1b3 preliminary version
nick
parents:
diff changeset
68 uint32_t base_addr;
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
69 uint32_t vid_buf_base_adrs_y[VID_PLAY_MAXFRAMES];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
70 uint32_t vid_buf_base_adrs_u[VID_PLAY_MAXFRAMES];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
71 uint32_t vid_buf_base_adrs_v[VID_PLAY_MAXFRAMES];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
72 uint32_t vid_nbufs;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
73
872781fef1b3 preliminary version
nick
parents:
diff changeset
74 uint32_t p1_v_accum_init;
872781fef1b3 preliminary version
nick
parents:
diff changeset
75 uint32_t p1_h_accum_init;
872781fef1b3 preliminary version
nick
parents:
diff changeset
76 uint32_t p23_v_accum_init;
872781fef1b3 preliminary version
nick
parents:
diff changeset
77 uint32_t p23_h_accum_init;
872781fef1b3 preliminary version
nick
parents:
diff changeset
78 uint32_t scale_cntl;
872781fef1b3 preliminary version
nick
parents:
diff changeset
79 uint32_t exclusive_horz;
872781fef1b3 preliminary version
nick
parents:
diff changeset
80 uint32_t auto_flip_cntl;
872781fef1b3 preliminary version
nick
parents:
diff changeset
81 uint32_t filter_cntl;
872781fef1b3 preliminary version
nick
parents:
diff changeset
82 uint32_t key_cntl;
872781fef1b3 preliminary version
nick
parents:
diff changeset
83 uint32_t test;
872781fef1b3 preliminary version
nick
parents:
diff changeset
84 /* Configurable stuff */
872781fef1b3 preliminary version
nick
parents:
diff changeset
85 int double_buff;
872781fef1b3 preliminary version
nick
parents:
diff changeset
86
872781fef1b3 preliminary version
nick
parents:
diff changeset
87 int brightness;
872781fef1b3 preliminary version
nick
parents:
diff changeset
88 int saturation;
872781fef1b3 preliminary version
nick
parents:
diff changeset
89
872781fef1b3 preliminary version
nick
parents:
diff changeset
90 int ckey_on;
872781fef1b3 preliminary version
nick
parents:
diff changeset
91 uint32_t graphics_key_clr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
92 uint32_t graphics_key_msk;
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
93 uint32_t ckey_cntl;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
94
872781fef1b3 preliminary version
nick
parents:
diff changeset
95 int deinterlace_on;
872781fef1b3 preliminary version
nick
parents:
diff changeset
96 uint32_t deinterlace_pattern;
872781fef1b3 preliminary version
nick
parents:
diff changeset
97
872781fef1b3 preliminary version
nick
parents:
diff changeset
98 } bes_registers_t;
872781fef1b3 preliminary version
nick
parents:
diff changeset
99
872781fef1b3 preliminary version
nick
parents:
diff changeset
100 typedef struct video_registers_s
872781fef1b3 preliminary version
nick
parents:
diff changeset
101 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
102 const char * sname;
872781fef1b3 preliminary version
nick
parents:
diff changeset
103 uint32_t name;
872781fef1b3 preliminary version
nick
parents:
diff changeset
104 uint32_t value;
872781fef1b3 preliminary version
nick
parents:
diff changeset
105 }video_registers_t;
872781fef1b3 preliminary version
nick
parents:
diff changeset
106
872781fef1b3 preliminary version
nick
parents:
diff changeset
107 static bes_registers_t besr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
108 #ifndef RAGE128
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
109 static int RadeonFamily=100;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
110 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
111 #define DECLARE_VREG(name) { #name, name, 0 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
112 static video_registers_t vregs[] =
872781fef1b3 preliminary version
nick
parents:
diff changeset
113 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
114 DECLARE_VREG(VIDEOMUX_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
115 DECLARE_VREG(VIPPAD_MASK),
872781fef1b3 preliminary version
nick
parents:
diff changeset
116 DECLARE_VREG(VIPPAD1_A),
872781fef1b3 preliminary version
nick
parents:
diff changeset
117 DECLARE_VREG(VIPPAD1_EN),
872781fef1b3 preliminary version
nick
parents:
diff changeset
118 DECLARE_VREG(VIPPAD1_Y),
872781fef1b3 preliminary version
nick
parents:
diff changeset
119 DECLARE_VREG(OV0_Y_X_START),
872781fef1b3 preliminary version
nick
parents:
diff changeset
120 DECLARE_VREG(OV0_Y_X_END),
872781fef1b3 preliminary version
nick
parents:
diff changeset
121 DECLARE_VREG(OV0_PIPELINE_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
122 DECLARE_VREG(OV0_EXCLUSIVE_HORZ),
872781fef1b3 preliminary version
nick
parents:
diff changeset
123 DECLARE_VREG(OV0_EXCLUSIVE_VERT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
124 DECLARE_VREG(OV0_REG_LOAD_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
125 DECLARE_VREG(OV0_SCALE_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
126 DECLARE_VREG(OV0_V_INC),
872781fef1b3 preliminary version
nick
parents:
diff changeset
127 DECLARE_VREG(OV0_P1_V_ACCUM_INIT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
128 DECLARE_VREG(OV0_P23_V_ACCUM_INIT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
129 DECLARE_VREG(OV0_P1_BLANK_LINES_AT_TOP),
872781fef1b3 preliminary version
nick
parents:
diff changeset
130 DECLARE_VREG(OV0_P23_BLANK_LINES_AT_TOP),
872781fef1b3 preliminary version
nick
parents:
diff changeset
131 #ifdef RADEON
872781fef1b3 preliminary version
nick
parents:
diff changeset
132 DECLARE_VREG(OV0_BASE_ADDR),
872781fef1b3 preliminary version
nick
parents:
diff changeset
133 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
134 DECLARE_VREG(OV0_VID_BUF0_BASE_ADRS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
135 DECLARE_VREG(OV0_VID_BUF1_BASE_ADRS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
136 DECLARE_VREG(OV0_VID_BUF2_BASE_ADRS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
137 DECLARE_VREG(OV0_VID_BUF3_BASE_ADRS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
138 DECLARE_VREG(OV0_VID_BUF4_BASE_ADRS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
139 DECLARE_VREG(OV0_VID_BUF5_BASE_ADRS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
140 DECLARE_VREG(OV0_VID_BUF_PITCH0_VALUE),
872781fef1b3 preliminary version
nick
parents:
diff changeset
141 DECLARE_VREG(OV0_VID_BUF_PITCH1_VALUE),
872781fef1b3 preliminary version
nick
parents:
diff changeset
142 DECLARE_VREG(OV0_AUTO_FLIP_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
143 DECLARE_VREG(OV0_DEINTERLACE_PATTERN),
872781fef1b3 preliminary version
nick
parents:
diff changeset
144 DECLARE_VREG(OV0_SUBMIT_HISTORY),
872781fef1b3 preliminary version
nick
parents:
diff changeset
145 DECLARE_VREG(OV0_H_INC),
872781fef1b3 preliminary version
nick
parents:
diff changeset
146 DECLARE_VREG(OV0_STEP_BY),
872781fef1b3 preliminary version
nick
parents:
diff changeset
147 DECLARE_VREG(OV0_P1_H_ACCUM_INIT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
148 DECLARE_VREG(OV0_P23_H_ACCUM_INIT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
149 DECLARE_VREG(OV0_P1_X_START_END),
872781fef1b3 preliminary version
nick
parents:
diff changeset
150 DECLARE_VREG(OV0_P2_X_START_END),
872781fef1b3 preliminary version
nick
parents:
diff changeset
151 DECLARE_VREG(OV0_P3_X_START_END),
872781fef1b3 preliminary version
nick
parents:
diff changeset
152 DECLARE_VREG(OV0_FILTER_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
153 DECLARE_VREG(OV0_FOUR_TAP_COEF_0),
872781fef1b3 preliminary version
nick
parents:
diff changeset
154 DECLARE_VREG(OV0_FOUR_TAP_COEF_1),
872781fef1b3 preliminary version
nick
parents:
diff changeset
155 DECLARE_VREG(OV0_FOUR_TAP_COEF_2),
872781fef1b3 preliminary version
nick
parents:
diff changeset
156 DECLARE_VREG(OV0_FOUR_TAP_COEF_3),
872781fef1b3 preliminary version
nick
parents:
diff changeset
157 DECLARE_VREG(OV0_FOUR_TAP_COEF_4),
872781fef1b3 preliminary version
nick
parents:
diff changeset
158 DECLARE_VREG(OV0_FLAG_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
159 #ifdef RAGE128
872781fef1b3 preliminary version
nick
parents:
diff changeset
160 DECLARE_VREG(OV0_COLOUR_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
161 #else
872781fef1b3 preliminary version
nick
parents:
diff changeset
162 DECLARE_VREG(OV0_SLICE_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
163 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
164 DECLARE_VREG(OV0_VID_KEY_CLR),
872781fef1b3 preliminary version
nick
parents:
diff changeset
165 DECLARE_VREG(OV0_VID_KEY_MSK),
872781fef1b3 preliminary version
nick
parents:
diff changeset
166 DECLARE_VREG(OV0_GRAPHICS_KEY_CLR),
872781fef1b3 preliminary version
nick
parents:
diff changeset
167 DECLARE_VREG(OV0_GRAPHICS_KEY_MSK),
872781fef1b3 preliminary version
nick
parents:
diff changeset
168 DECLARE_VREG(OV0_KEY_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
169 DECLARE_VREG(OV0_TEST),
872781fef1b3 preliminary version
nick
parents:
diff changeset
170 DECLARE_VREG(OV0_LIN_TRANS_A),
872781fef1b3 preliminary version
nick
parents:
diff changeset
171 DECLARE_VREG(OV0_LIN_TRANS_B),
872781fef1b3 preliminary version
nick
parents:
diff changeset
172 DECLARE_VREG(OV0_LIN_TRANS_C),
872781fef1b3 preliminary version
nick
parents:
diff changeset
173 DECLARE_VREG(OV0_LIN_TRANS_D),
872781fef1b3 preliminary version
nick
parents:
diff changeset
174 DECLARE_VREG(OV0_LIN_TRANS_E),
872781fef1b3 preliminary version
nick
parents:
diff changeset
175 DECLARE_VREG(OV0_LIN_TRANS_F),
872781fef1b3 preliminary version
nick
parents:
diff changeset
176 DECLARE_VREG(OV0_GAMMA_0_F),
872781fef1b3 preliminary version
nick
parents:
diff changeset
177 DECLARE_VREG(OV0_GAMMA_10_1F),
872781fef1b3 preliminary version
nick
parents:
diff changeset
178 DECLARE_VREG(OV0_GAMMA_20_3F),
872781fef1b3 preliminary version
nick
parents:
diff changeset
179 DECLARE_VREG(OV0_GAMMA_40_7F),
872781fef1b3 preliminary version
nick
parents:
diff changeset
180 DECLARE_VREG(OV0_GAMMA_380_3BF),
872781fef1b3 preliminary version
nick
parents:
diff changeset
181 DECLARE_VREG(OV0_GAMMA_3C0_3FF),
872781fef1b3 preliminary version
nick
parents:
diff changeset
182 DECLARE_VREG(SUBPIC_CNTL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
183 DECLARE_VREG(SUBPIC_DEFCOLCON),
872781fef1b3 preliminary version
nick
parents:
diff changeset
184 DECLARE_VREG(SUBPIC_Y_X_START),
872781fef1b3 preliminary version
nick
parents:
diff changeset
185 DECLARE_VREG(SUBPIC_Y_X_END),
872781fef1b3 preliminary version
nick
parents:
diff changeset
186 DECLARE_VREG(SUBPIC_V_INC),
872781fef1b3 preliminary version
nick
parents:
diff changeset
187 DECLARE_VREG(SUBPIC_H_INC),
872781fef1b3 preliminary version
nick
parents:
diff changeset
188 DECLARE_VREG(SUBPIC_BUF0_OFFSET),
872781fef1b3 preliminary version
nick
parents:
diff changeset
189 DECLARE_VREG(SUBPIC_BUF1_OFFSET),
872781fef1b3 preliminary version
nick
parents:
diff changeset
190 DECLARE_VREG(SUBPIC_LC0_OFFSET),
872781fef1b3 preliminary version
nick
parents:
diff changeset
191 DECLARE_VREG(SUBPIC_LC1_OFFSET),
872781fef1b3 preliminary version
nick
parents:
diff changeset
192 DECLARE_VREG(SUBPIC_PITCH),
872781fef1b3 preliminary version
nick
parents:
diff changeset
193 DECLARE_VREG(SUBPIC_BTN_HLI_COLCON),
872781fef1b3 preliminary version
nick
parents:
diff changeset
194 DECLARE_VREG(SUBPIC_BTN_HLI_Y_X_START),
872781fef1b3 preliminary version
nick
parents:
diff changeset
195 DECLARE_VREG(SUBPIC_BTN_HLI_Y_X_END),
872781fef1b3 preliminary version
nick
parents:
diff changeset
196 DECLARE_VREG(SUBPIC_PALETTE_INDEX),
872781fef1b3 preliminary version
nick
parents:
diff changeset
197 DECLARE_VREG(SUBPIC_PALETTE_DATA),
872781fef1b3 preliminary version
nick
parents:
diff changeset
198 DECLARE_VREG(SUBPIC_H_ACCUM_INIT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
199 DECLARE_VREG(SUBPIC_V_ACCUM_INIT),
872781fef1b3 preliminary version
nick
parents:
diff changeset
200 DECLARE_VREG(IDCT_RUNS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
201 DECLARE_VREG(IDCT_LEVELS),
872781fef1b3 preliminary version
nick
parents:
diff changeset
202 DECLARE_VREG(IDCT_AUTH_CONTROL),
872781fef1b3 preliminary version
nick
parents:
diff changeset
203 DECLARE_VREG(IDCT_AUTH),
9044
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
204 DECLARE_VREG(IDCT_CONTROL),
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
205 DECLARE_VREG(CONFIG_CNTL)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
206 };
4030
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
207
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
208 #ifdef HAVE_X11
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
209 static uint32_t firegl_shift = 0;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
210 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
211 static void * radeon_mmio_base = 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
212 static void * radeon_mem_base = 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
213 static int32_t radeon_overlay_off = 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
214 static uint32_t radeon_ram_size = 0;
8553
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
215 /* Restore on exit */
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
216 static uint32_t SAVED_OV0_GRAPHICS_KEY_CLR = 0;
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
217 static uint32_t SAVED_OV0_GRAPHICS_KEY_MSK = 0;
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
218 static uint32_t SAVED_OV0_VID_KEY_CLR = 0;
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
219 static uint32_t SAVED_OV0_VID_KEY_MSK = 0;
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
220 static uint32_t SAVED_OV0_KEY_CNTL = 0;
9044
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
221 #if defined(RAGE128) && (WORDS_BIGENDIAN)
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
222 static uint32_t SAVED_CONFIG_CNTL = 0;
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
223 #define APER_0_BIG_ENDIAN_16BPP_SWAP (1<<0)
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
224 #define APER_0_BIG_ENDIAN_32BPP_SWAP (2<<0)
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
225 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
226
4012
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
227 #define GETREG(TYPE,PTR,OFFZ) (*((volatile TYPE*)((PTR)+(OFFZ))))
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
228 #define SETREG(TYPE,PTR,OFFZ,VAL) (*((volatile TYPE*)((PTR)+(OFFZ))))=VAL
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
229
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
230 #define INREG8(addr) GETREG(uint8_t,(uint32_t)(radeon_mmio_base),addr)
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
231 #define OUTREG8(addr,val) SETREG(uint8_t,(uint32_t)(radeon_mmio_base),addr,val)
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
232
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
233 static inline uint32_t INREG (uint32_t addr) {
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
234 uint32_t tmp = GETREG(uint32_t,(uint32_t)(radeon_mmio_base),addr);
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
235 return le2me_32(tmp);
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
236 }
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
237 //#define OUTREG(addr,val) SETREG(uint32_t,(uint32_t)(radeon_mmio_base),addr,val)
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
238 #define OUTREG(addr,val) SETREG(uint32_t,(uint32_t)(radeon_mmio_base),addr,le2me_32(val))
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
239 #define OUTREGP(addr,val,mask) \
872781fef1b3 preliminary version
nick
parents:
diff changeset
240 do { \
872781fef1b3 preliminary version
nick
parents:
diff changeset
241 unsigned int _tmp = INREG(addr); \
872781fef1b3 preliminary version
nick
parents:
diff changeset
242 _tmp &= (mask); \
872781fef1b3 preliminary version
nick
parents:
diff changeset
243 _tmp |= (val); \
872781fef1b3 preliminary version
nick
parents:
diff changeset
244 OUTREG(addr, _tmp); \
872781fef1b3 preliminary version
nick
parents:
diff changeset
245 } while (0)
872781fef1b3 preliminary version
nick
parents:
diff changeset
246
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
247 static __inline__ uint32_t INPLL(uint32_t addr)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
248 {
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
249 OUTREG8(CLOCK_CNTL_INDEX, addr & 0x0000001f);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
250 return (INREG(CLOCK_CNTL_DATA));
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
251 }
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
252
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
253 #define OUTPLL(addr,val) OUTREG8(CLOCK_CNTL_INDEX, (addr & 0x0000001f) | 0x00000080); \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
254 OUTREG(CLOCK_CNTL_DATA, val)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
255 #define OUTPLLP(addr,val,mask) \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
256 do { \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
257 unsigned int _tmp = INPLL(addr); \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
258 _tmp &= (mask); \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
259 _tmp |= (val); \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
260 OUTPLL(addr, _tmp); \
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
261 } while (0)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
262
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
263 static uint32_t radeon_vid_get_dbpp( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
264 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
265 uint32_t dbpp,retval;
872781fef1b3 preliminary version
nick
parents:
diff changeset
266 dbpp = (INREG(CRTC_GEN_CNTL)>>8)& 0xF;
872781fef1b3 preliminary version
nick
parents:
diff changeset
267 switch(dbpp)
872781fef1b3 preliminary version
nick
parents:
diff changeset
268 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
269 case DST_8BPP: retval = 8; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
270 case DST_15BPP: retval = 15; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
271 case DST_16BPP: retval = 16; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
272 case DST_24BPP: retval = 24; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
273 default: retval=32; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
274 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
275 return retval;
872781fef1b3 preliminary version
nick
parents:
diff changeset
276 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
277
872781fef1b3 preliminary version
nick
parents:
diff changeset
278 static int radeon_is_dbl_scan( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
279 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
280 return (INREG(CRTC_GEN_CNTL))&CRTC_DBL_SCAN_EN;
872781fef1b3 preliminary version
nick
parents:
diff changeset
281 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
282
872781fef1b3 preliminary version
nick
parents:
diff changeset
283 static int radeon_is_interlace( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
284 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
285 return (INREG(CRTC_GEN_CNTL))&CRTC_INTERLACE_EN;
872781fef1b3 preliminary version
nick
parents:
diff changeset
286 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
287
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
288 static uint32_t radeon_get_xres( void )
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
289 {
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
290 /* FIXME: currently we extract that from CRTC!!!*/
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
291 uint32_t xres,h_total;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
292 h_total = INREG(CRTC_H_TOTAL_DISP);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
293 xres = (h_total >> 16) & 0xffff;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
294 return (xres + 1)*8;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
295 }
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
296
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
297 static uint32_t radeon_get_yres( void )
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
298 {
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
299 /* FIXME: currently we extract that from CRTC!!!*/
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
300 uint32_t yres,v_total;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
301 v_total = INREG(CRTC_V_TOTAL_DISP);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
302 yres = (v_total >> 16) & 0xffff;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
303 return yres + 1;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
304 }
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
305
4689
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
306 static void radeon_wait_vsync(void)
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
307 {
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
308 int i;
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
309
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
310 OUTREG(GEN_INT_STATUS, VSYNC_INT_AK);
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
311 for (i = 0; i < 2000000; i++)
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
312 {
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
313 if (INREG(GEN_INT_STATUS) & VSYNC_INT) break;
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
314 }
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
315 }
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
316
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
317 #ifdef RAGE128
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
318 static void _radeon_engine_idle(void);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
319 static void _radeon_fifo_wait(unsigned);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
320 #define radeon_engine_idle() _radeon_engine_idle()
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
321 #define radeon_fifo_wait(entries) _radeon_fifo_wait(entries)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
322 /* Flush all dirty data in the Pixel Cache to memory. */
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
323 static __inline__ void radeon_engine_flush ( void )
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
324 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
325 unsigned i;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
326
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
327 OUTREGP(PC_NGUI_CTLSTAT, PC_FLUSH_ALL, ~PC_FLUSH_ALL);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
328 for (i = 0; i < 2000000; i++) {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
329 if (!(INREG(PC_NGUI_CTLSTAT) & PC_BUSY)) break;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
330 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
331 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
332
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
333 /* Reset graphics card to known state. */
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
334 static void radeon_engine_reset( void )
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
335 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
336 uint32_t clock_cntl_index;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
337 uint32_t mclk_cntl;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
338 uint32_t gen_reset_cntl;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
339
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
340 radeon_engine_flush();
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
341
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
342 clock_cntl_index = INREG(CLOCK_CNTL_INDEX);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
343 mclk_cntl = INPLL(MCLK_CNTL);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
344
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
345 OUTPLL(MCLK_CNTL, mclk_cntl | FORCE_GCP | FORCE_PIPE3D_CP);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
346
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
347 gen_reset_cntl = INREG(GEN_RESET_CNTL);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
348
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
349 OUTREG(GEN_RESET_CNTL, gen_reset_cntl | SOFT_RESET_GUI);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
350 INREG(GEN_RESET_CNTL);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
351 OUTREG(GEN_RESET_CNTL,
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
352 gen_reset_cntl & (uint32_t)(~SOFT_RESET_GUI));
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
353 INREG(GEN_RESET_CNTL);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
354
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
355 OUTPLL(MCLK_CNTL, mclk_cntl);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
356 OUTREG(CLOCK_CNTL_INDEX, clock_cntl_index);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
357 OUTREG(GEN_RESET_CNTL, gen_reset_cntl);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
358 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
359 #else
4689
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
360
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
361 static __inline__ void radeon_engine_flush ( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
362 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
363 int i;
872781fef1b3 preliminary version
nick
parents:
diff changeset
364
872781fef1b3 preliminary version
nick
parents:
diff changeset
365 /* initiate flush */
872781fef1b3 preliminary version
nick
parents:
diff changeset
366 OUTREGP(RB2D_DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL,
872781fef1b3 preliminary version
nick
parents:
diff changeset
367 ~RB2D_DC_FLUSH_ALL);
872781fef1b3 preliminary version
nick
parents:
diff changeset
368
872781fef1b3 preliminary version
nick
parents:
diff changeset
369 for (i=0; i < 2000000; i++) {
872781fef1b3 preliminary version
nick
parents:
diff changeset
370 if (!(INREG(RB2D_DSTCACHE_CTLSTAT) & RB2D_DC_BUSY))
872781fef1b3 preliminary version
nick
parents:
diff changeset
371 break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
372 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
373 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
374
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
375 static void _radeon_engine_idle(void);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
376 static void _radeon_fifo_wait(unsigned);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
377 #define radeon_engine_idle() _radeon_engine_idle()
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
378 #define radeon_fifo_wait(entries) _radeon_fifo_wait(entries)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
379
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
380 static void radeon_engine_reset( void )
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
381 {
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
382 uint32_t clock_cntl_index, mclk_cntl, rbbm_soft_reset;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
383
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
384 radeon_engine_flush ();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
385
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
386 clock_cntl_index = INREG(CLOCK_CNTL_INDEX);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
387 mclk_cntl = INPLL(MCLK_CNTL);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
388
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
389 OUTPLL(MCLK_CNTL, (mclk_cntl |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
390 FORCEON_MCLKA |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
391 FORCEON_MCLKB |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
392 FORCEON_YCLKA |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
393 FORCEON_YCLKB |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
394 FORCEON_MC |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
395 FORCEON_AIC));
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
396 rbbm_soft_reset = INREG(RBBM_SOFT_RESET);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
397
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
398 OUTREG(RBBM_SOFT_RESET, rbbm_soft_reset |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
399 SOFT_RESET_CP |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
400 SOFT_RESET_HI |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
401 SOFT_RESET_SE |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
402 SOFT_RESET_RE |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
403 SOFT_RESET_PP |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
404 SOFT_RESET_E2 |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
405 SOFT_RESET_RB |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
406 SOFT_RESET_HDP);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
407 INREG(RBBM_SOFT_RESET);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
408 OUTREG(RBBM_SOFT_RESET, rbbm_soft_reset & (uint32_t)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
409 ~(SOFT_RESET_CP |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
410 SOFT_RESET_HI |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
411 SOFT_RESET_SE |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
412 SOFT_RESET_RE |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
413 SOFT_RESET_PP |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
414 SOFT_RESET_E2 |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
415 SOFT_RESET_RB |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
416 SOFT_RESET_HDP));
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
417 INREG(RBBM_SOFT_RESET);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
418
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
419 OUTPLL(MCLK_CNTL, mclk_cntl);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
420 OUTREG(CLOCK_CNTL_INDEX, clock_cntl_index);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
421 OUTREG(RBBM_SOFT_RESET, rbbm_soft_reset);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
422
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
423 return;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
424 }
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
425 #endif
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
426 static void radeon_engine_restore( void )
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
427 {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
428 #ifndef RAGE128
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
429 int pitch64;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
430 uint32_t xres,yres,bpp;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
431 radeon_fifo_wait(1);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
432 xres = radeon_get_xres();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
433 yres = radeon_get_yres();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
434 bpp = radeon_vid_get_dbpp();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
435 /* turn of all automatic flushing - we'll do it all */
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
436 OUTREG(RB2D_DSTCACHE_MODE, 0);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
437
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
438 pitch64 = ((xres * (bpp / 8) + 0x3f)) >> 6;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
439
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
440 radeon_fifo_wait(1);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
441 OUTREG(DEFAULT_OFFSET, (INREG(DEFAULT_OFFSET) & 0xC0000000) |
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
442 (pitch64 << 22));
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
443
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
444 radeon_fifo_wait(1);
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
445 #if defined(WORDS_BIGENDIAN)
9044
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
446 #ifdef RADEON
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
447 OUTREGP(DP_DATATYPE, HOST_BIG_ENDIAN_EN, ~HOST_BIG_ENDIAN_EN);
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
448 #endif
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
449 #else
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
450 OUTREGP(DP_DATATYPE, 0, ~HOST_BIG_ENDIAN_EN);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
451 #endif
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
452
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
453 radeon_fifo_wait(1);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
454 OUTREG(DEFAULT_SC_BOTTOM_RIGHT, (DEFAULT_SC_RIGHT_MAX
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
455 | DEFAULT_SC_BOTTOM_MAX));
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
456 radeon_fifo_wait(1);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
457 OUTREG(DP_GUI_MASTER_CNTL, (INREG(DP_GUI_MASTER_CNTL)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
458 | GMC_BRUSH_SOLID_COLOR
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
459 | GMC_SRC_DATATYPE_COLOR));
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
460
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
461 radeon_fifo_wait(7);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
462 OUTREG(DST_LINE_START, 0);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
463 OUTREG(DST_LINE_END, 0);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
464 OUTREG(DP_BRUSH_FRGD_CLR, 0xffffffff);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
465 OUTREG(DP_BRUSH_BKGD_CLR, 0x00000000);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
466 OUTREG(DP_SRC_FRGD_CLR, 0xffffffff);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
467 OUTREG(DP_SRC_BKGD_CLR, 0x00000000);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
468 OUTREG(DP_WRITE_MASK, 0xffffffff);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
469
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
470 radeon_engine_idle();
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
471 #endif
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
472 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
473 #ifdef RAGE128
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
474 static void _radeon_fifo_wait (unsigned entries)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
475 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
476 unsigned i;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
477
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
478 for(;;)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
479 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
480 for (i=0; i<2000000; i++)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
481 if ((INREG(GUI_STAT) & GUI_FIFOCNT_MASK) >= entries)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
482 return;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
483 radeon_engine_reset();
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
484 radeon_engine_restore();
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
485 }
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
486 }
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
487
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
488 static void _radeon_engine_idle ( void )
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
489 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
490 unsigned i;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
491
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
492 /* ensure FIFO is empty before waiting for idle */
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
493 radeon_fifo_wait (64);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
494 for(;;)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
495 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
496 for (i=0; i<2000000; i++) {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
497 if ((INREG(GUI_STAT) & GUI_ACTIVE) == 0) {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
498 radeon_engine_flush ();
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
499 return;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
500 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
501 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
502 radeon_engine_reset();
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
503 radeon_engine_restore();
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
504 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
505 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
506 #else
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
507 static void _radeon_fifo_wait (unsigned entries)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
508 {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
509 unsigned i;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
510
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
511 for(;;)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
512 {
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
513 for (i=0; i<2000000; i++)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
514 if ((INREG(RBBM_STATUS) & RBBM_FIFOCNT_MASK) >= entries)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
515 return;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
516 radeon_engine_reset();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
517 radeon_engine_restore();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
518 }
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
519 }
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
520 static void _radeon_engine_idle ( void )
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
521 {
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
522 int i;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
523
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
524 /* ensure FIFO is empty before waiting for idle */
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
525 radeon_fifo_wait (64);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
526 for(;;)
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
527 {
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
528 for (i=0; i<2000000; i++) {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
529 if (((INREG(RBBM_STATUS) & RBBM_ACTIVE)) == 0) {
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
530 radeon_engine_flush ();
872781fef1b3 preliminary version
nick
parents:
diff changeset
531 return;
872781fef1b3 preliminary version
nick
parents:
diff changeset
532 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
533 }
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
534 radeon_engine_reset();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
535 radeon_engine_restore();
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
536 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
537 }
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
538 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
539
872781fef1b3 preliminary version
nick
parents:
diff changeset
540 #ifndef RAGE128
872781fef1b3 preliminary version
nick
parents:
diff changeset
541 /* Reference color space transform data */
872781fef1b3 preliminary version
nick
parents:
diff changeset
542 typedef struct tagREF_TRANSFORM
872781fef1b3 preliminary version
nick
parents:
diff changeset
543 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
544 float RefLuma;
872781fef1b3 preliminary version
nick
parents:
diff changeset
545 float RefRCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
546 float RefRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
547 float RefGCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
548 float RefGCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
549 float RefBCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
550 float RefBCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
551 } REF_TRANSFORM;
872781fef1b3 preliminary version
nick
parents:
diff changeset
552
872781fef1b3 preliminary version
nick
parents:
diff changeset
553 /* Parameters for ITU-R BT.601 and ITU-R BT.709 colour spaces */
872781fef1b3 preliminary version
nick
parents:
diff changeset
554 REF_TRANSFORM trans[2] =
872781fef1b3 preliminary version
nick
parents:
diff changeset
555 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
556 {1.1678, 0.0, 1.6007, -0.3929, -0.8154, 2.0232, 0.0}, /* BT.601 */
872781fef1b3 preliminary version
nick
parents:
diff changeset
557 {1.1678, 0.0, 1.7980, -0.2139, -0.5345, 2.1186, 0.0} /* BT.709 */
872781fef1b3 preliminary version
nick
parents:
diff changeset
558 };
872781fef1b3 preliminary version
nick
parents:
diff changeset
559 /****************************************************************************
872781fef1b3 preliminary version
nick
parents:
diff changeset
560 * SetTransform *
872781fef1b3 preliminary version
nick
parents:
diff changeset
561 * Function: Calculates and sets color space transform from supplied *
872781fef1b3 preliminary version
nick
parents:
diff changeset
562 * reference transform, gamma, brightness, contrast, hue and *
872781fef1b3 preliminary version
nick
parents:
diff changeset
563 * saturation. *
872781fef1b3 preliminary version
nick
parents:
diff changeset
564 * Inputs: bright - brightness *
872781fef1b3 preliminary version
nick
parents:
diff changeset
565 * cont - contrast *
872781fef1b3 preliminary version
nick
parents:
diff changeset
566 * sat - saturation *
872781fef1b3 preliminary version
nick
parents:
diff changeset
567 * hue - hue *
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
568 * red_intensity - intense of red component *
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
569 * green_intensity - intense of green component *
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
570 * blue_intensity - intense of blue component *
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
571 * ref - index to the table of refernce transforms *
872781fef1b3 preliminary version
nick
parents:
diff changeset
572 * Outputs: NONE *
872781fef1b3 preliminary version
nick
parents:
diff changeset
573 ****************************************************************************/
872781fef1b3 preliminary version
nick
parents:
diff changeset
574
872781fef1b3 preliminary version
nick
parents:
diff changeset
575 static void radeon_set_transform(float bright, float cont, float sat,
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
576 float hue, float red_intensity,
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
577 float green_intensity,float blue_intensity,
4284
05565fb57ac3 RGB independed correction (similar to brightness)
nick
parents: 4282
diff changeset
578 unsigned ref)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
579 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
580 float OvHueSin, OvHueCos;
872781fef1b3 preliminary version
nick
parents:
diff changeset
581 float CAdjLuma, CAdjOff;
4284
05565fb57ac3 RGB independed correction (similar to brightness)
nick
parents: 4282
diff changeset
582 float RedAdj,GreenAdj,BlueAdj;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
583 float CAdjRCb, CAdjRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
584 float CAdjGCb, CAdjGCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
585 float CAdjBCb, CAdjBCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
586 float OvLuma, OvROff, OvGOff, OvBOff;
872781fef1b3 preliminary version
nick
parents:
diff changeset
587 float OvRCb, OvRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
588 float OvGCb, OvGCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
589 float OvBCb, OvBCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
590 float Loff = 64.0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
591 float Coff = 512.0f;
872781fef1b3 preliminary version
nick
parents:
diff changeset
592
872781fef1b3 preliminary version
nick
parents:
diff changeset
593 uint32_t dwOvLuma, dwOvROff, dwOvGOff, dwOvBOff;
872781fef1b3 preliminary version
nick
parents:
diff changeset
594 uint32_t dwOvRCb, dwOvRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
595 uint32_t dwOvGCb, dwOvGCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
596 uint32_t dwOvBCb, dwOvBCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
597
872781fef1b3 preliminary version
nick
parents:
diff changeset
598 if (ref >= 2) return;
872781fef1b3 preliminary version
nick
parents:
diff changeset
599
872781fef1b3 preliminary version
nick
parents:
diff changeset
600 OvHueSin = sin((double)hue);
872781fef1b3 preliminary version
nick
parents:
diff changeset
601 OvHueCos = cos((double)hue);
872781fef1b3 preliminary version
nick
parents:
diff changeset
602
872781fef1b3 preliminary version
nick
parents:
diff changeset
603 CAdjLuma = cont * trans[ref].RefLuma;
872781fef1b3 preliminary version
nick
parents:
diff changeset
604 CAdjOff = cont * trans[ref].RefLuma * bright * 1023.0;
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
605 RedAdj = cont * trans[ref].RefLuma * red_intensity * 1023.0;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
606 GreenAdj = cont * trans[ref].RefLuma * green_intensity * 1023.0;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
607 BlueAdj = cont * trans[ref].RefLuma * blue_intensity * 1023.0;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
608
872781fef1b3 preliminary version
nick
parents:
diff changeset
609 CAdjRCb = sat * -OvHueSin * trans[ref].RefRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
610 CAdjRCr = sat * OvHueCos * trans[ref].RefRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
611 CAdjGCb = sat * (OvHueCos * trans[ref].RefGCb - OvHueSin * trans[ref].RefGCr);
872781fef1b3 preliminary version
nick
parents:
diff changeset
612 CAdjGCr = sat * (OvHueSin * trans[ref].RefGCb + OvHueCos * trans[ref].RefGCr);
872781fef1b3 preliminary version
nick
parents:
diff changeset
613 CAdjBCb = sat * OvHueCos * trans[ref].RefBCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
614 CAdjBCr = sat * OvHueSin * trans[ref].RefBCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
615
872781fef1b3 preliminary version
nick
parents:
diff changeset
616 #if 0 /* default constants */
872781fef1b3 preliminary version
nick
parents:
diff changeset
617 CAdjLuma = 1.16455078125;
872781fef1b3 preliminary version
nick
parents:
diff changeset
618
872781fef1b3 preliminary version
nick
parents:
diff changeset
619 CAdjRCb = 0.0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
620 CAdjRCr = 1.59619140625;
872781fef1b3 preliminary version
nick
parents:
diff changeset
621 CAdjGCb = -0.39111328125;
872781fef1b3 preliminary version
nick
parents:
diff changeset
622 CAdjGCr = -0.8125;
872781fef1b3 preliminary version
nick
parents:
diff changeset
623 CAdjBCb = 2.01708984375;
872781fef1b3 preliminary version
nick
parents:
diff changeset
624 CAdjBCr = 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
625 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
626 OvLuma = CAdjLuma;
872781fef1b3 preliminary version
nick
parents:
diff changeset
627 OvRCb = CAdjRCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
628 OvRCr = CAdjRCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
629 OvGCb = CAdjGCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
630 OvGCr = CAdjGCr;
872781fef1b3 preliminary version
nick
parents:
diff changeset
631 OvBCb = CAdjBCb;
872781fef1b3 preliminary version
nick
parents:
diff changeset
632 OvBCr = CAdjBCr;
4284
05565fb57ac3 RGB independed correction (similar to brightness)
nick
parents: 4282
diff changeset
633 OvROff = RedAdj + CAdjOff -
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
634 OvLuma * Loff - (OvRCb + OvRCr) * Coff;
4284
05565fb57ac3 RGB independed correction (similar to brightness)
nick
parents: 4282
diff changeset
635 OvGOff = GreenAdj + CAdjOff -
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
636 OvLuma * Loff - (OvGCb + OvGCr) * Coff;
4284
05565fb57ac3 RGB independed correction (similar to brightness)
nick
parents: 4282
diff changeset
637 OvBOff = BlueAdj + CAdjOff -
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
638 OvLuma * Loff - (OvBCb + OvBCr) * Coff;
872781fef1b3 preliminary version
nick
parents:
diff changeset
639 #if 0 /* default constants */
872781fef1b3 preliminary version
nick
parents:
diff changeset
640 OvROff = -888.5;
872781fef1b3 preliminary version
nick
parents:
diff changeset
641 OvGOff = 545;
872781fef1b3 preliminary version
nick
parents:
diff changeset
642 OvBOff = -1104;
872781fef1b3 preliminary version
nick
parents:
diff changeset
643 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
644
872781fef1b3 preliminary version
nick
parents:
diff changeset
645 dwOvROff = ((int)(OvROff * 2.0)) & 0x1fff;
872781fef1b3 preliminary version
nick
parents:
diff changeset
646 dwOvGOff = (int)(OvGOff * 2.0) & 0x1fff;
872781fef1b3 preliminary version
nick
parents:
diff changeset
647 dwOvBOff = (int)(OvBOff * 2.0) & 0x1fff;
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
648 /* Whatever docs say about R200 having 3.8 format instead of 3.11
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
649 as in Radeon is a lie */
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
650 #if 0
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
651 if(RadeonFamily == 100)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
652 {
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
653 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
654 dwOvLuma =(((int)(OvLuma * 2048.0))&0x7fff)<<17;
872781fef1b3 preliminary version
nick
parents:
diff changeset
655 dwOvRCb = (((int)(OvRCb * 2048.0))&0x7fff)<<1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
656 dwOvRCr = (((int)(OvRCr * 2048.0))&0x7fff)<<17;
872781fef1b3 preliminary version
nick
parents:
diff changeset
657 dwOvGCb = (((int)(OvGCb * 2048.0))&0x7fff)<<1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
658 dwOvGCr = (((int)(OvGCr * 2048.0))&0x7fff)<<17;
872781fef1b3 preliminary version
nick
parents:
diff changeset
659 dwOvBCb = (((int)(OvBCb * 2048.0))&0x7fff)<<1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
660 dwOvBCr = (((int)(OvBCr * 2048.0))&0x7fff)<<17;
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
661 #if 0
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
662 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
663 else
872781fef1b3 preliminary version
nick
parents:
diff changeset
664 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
665 dwOvLuma = (((int)(OvLuma * 256.0))&0x7ff)<<20;
872781fef1b3 preliminary version
nick
parents:
diff changeset
666 dwOvRCb = (((int)(OvRCb * 256.0))&0x7ff)<<4;
872781fef1b3 preliminary version
nick
parents:
diff changeset
667 dwOvRCr = (((int)(OvRCr * 256.0))&0x7ff)<<20;
872781fef1b3 preliminary version
nick
parents:
diff changeset
668 dwOvGCb = (((int)(OvGCb * 256.0))&0x7ff)<<4;
872781fef1b3 preliminary version
nick
parents:
diff changeset
669 dwOvGCr = (((int)(OvGCr * 256.0))&0x7ff)<<20;
872781fef1b3 preliminary version
nick
parents:
diff changeset
670 dwOvBCb = (((int)(OvBCb * 256.0))&0x7ff)<<4;
872781fef1b3 preliminary version
nick
parents:
diff changeset
671 dwOvBCr = (((int)(OvBCr * 256.0))&0x7ff)<<20;
872781fef1b3 preliminary version
nick
parents:
diff changeset
672 }
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
673 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
674 OUTREG(OV0_LIN_TRANS_A, dwOvRCb | dwOvLuma);
872781fef1b3 preliminary version
nick
parents:
diff changeset
675 OUTREG(OV0_LIN_TRANS_B, dwOvROff | dwOvRCr);
872781fef1b3 preliminary version
nick
parents:
diff changeset
676 OUTREG(OV0_LIN_TRANS_C, dwOvGCb | dwOvLuma);
872781fef1b3 preliminary version
nick
parents:
diff changeset
677 OUTREG(OV0_LIN_TRANS_D, dwOvGOff | dwOvGCr);
872781fef1b3 preliminary version
nick
parents:
diff changeset
678 OUTREG(OV0_LIN_TRANS_E, dwOvBCb | dwOvLuma);
872781fef1b3 preliminary version
nick
parents:
diff changeset
679 OUTREG(OV0_LIN_TRANS_F, dwOvBOff | dwOvBCr);
872781fef1b3 preliminary version
nick
parents:
diff changeset
680 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
681
872781fef1b3 preliminary version
nick
parents:
diff changeset
682 /* Gamma curve definition */
872781fef1b3 preliminary version
nick
parents:
diff changeset
683 typedef struct
872781fef1b3 preliminary version
nick
parents:
diff changeset
684 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
685 unsigned int gammaReg;
872781fef1b3 preliminary version
nick
parents:
diff changeset
686 unsigned int gammaSlope;
872781fef1b3 preliminary version
nick
parents:
diff changeset
687 unsigned int gammaOffset;
872781fef1b3 preliminary version
nick
parents:
diff changeset
688 }GAMMA_SETTINGS;
872781fef1b3 preliminary version
nick
parents:
diff changeset
689
872781fef1b3 preliminary version
nick
parents:
diff changeset
690 /* Recommended gamma curve parameters */
872781fef1b3 preliminary version
nick
parents:
diff changeset
691 GAMMA_SETTINGS r200_def_gamma[18] =
872781fef1b3 preliminary version
nick
parents:
diff changeset
692 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
693 {OV0_GAMMA_0_F, 0x100, 0x0000},
872781fef1b3 preliminary version
nick
parents:
diff changeset
694 {OV0_GAMMA_10_1F, 0x100, 0x0020},
872781fef1b3 preliminary version
nick
parents:
diff changeset
695 {OV0_GAMMA_20_3F, 0x100, 0x0040},
872781fef1b3 preliminary version
nick
parents:
diff changeset
696 {OV0_GAMMA_40_7F, 0x100, 0x0080},
872781fef1b3 preliminary version
nick
parents:
diff changeset
697 {OV0_GAMMA_80_BF, 0x100, 0x0100},
872781fef1b3 preliminary version
nick
parents:
diff changeset
698 {OV0_GAMMA_C0_FF, 0x100, 0x0100},
872781fef1b3 preliminary version
nick
parents:
diff changeset
699 {OV0_GAMMA_100_13F, 0x100, 0x0200},
872781fef1b3 preliminary version
nick
parents:
diff changeset
700 {OV0_GAMMA_140_17F, 0x100, 0x0200},
872781fef1b3 preliminary version
nick
parents:
diff changeset
701 {OV0_GAMMA_180_1BF, 0x100, 0x0300},
872781fef1b3 preliminary version
nick
parents:
diff changeset
702 {OV0_GAMMA_1C0_1FF, 0x100, 0x0300},
872781fef1b3 preliminary version
nick
parents:
diff changeset
703 {OV0_GAMMA_200_23F, 0x100, 0x0400},
872781fef1b3 preliminary version
nick
parents:
diff changeset
704 {OV0_GAMMA_240_27F, 0x100, 0x0400},
872781fef1b3 preliminary version
nick
parents:
diff changeset
705 {OV0_GAMMA_280_2BF, 0x100, 0x0500},
872781fef1b3 preliminary version
nick
parents:
diff changeset
706 {OV0_GAMMA_2C0_2FF, 0x100, 0x0500},
872781fef1b3 preliminary version
nick
parents:
diff changeset
707 {OV0_GAMMA_300_33F, 0x100, 0x0600},
872781fef1b3 preliminary version
nick
parents:
diff changeset
708 {OV0_GAMMA_340_37F, 0x100, 0x0600},
872781fef1b3 preliminary version
nick
parents:
diff changeset
709 {OV0_GAMMA_380_3BF, 0x100, 0x0700},
872781fef1b3 preliminary version
nick
parents:
diff changeset
710 {OV0_GAMMA_3C0_3FF, 0x100, 0x0700}
872781fef1b3 preliminary version
nick
parents:
diff changeset
711 };
872781fef1b3 preliminary version
nick
parents:
diff changeset
712
872781fef1b3 preliminary version
nick
parents:
diff changeset
713 GAMMA_SETTINGS r100_def_gamma[6] =
872781fef1b3 preliminary version
nick
parents:
diff changeset
714 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
715 {OV0_GAMMA_0_F, 0x100, 0x0000},
872781fef1b3 preliminary version
nick
parents:
diff changeset
716 {OV0_GAMMA_10_1F, 0x100, 0x0020},
872781fef1b3 preliminary version
nick
parents:
diff changeset
717 {OV0_GAMMA_20_3F, 0x100, 0x0040},
872781fef1b3 preliminary version
nick
parents:
diff changeset
718 {OV0_GAMMA_40_7F, 0x100, 0x0080},
872781fef1b3 preliminary version
nick
parents:
diff changeset
719 {OV0_GAMMA_380_3BF, 0x100, 0x0100},
872781fef1b3 preliminary version
nick
parents:
diff changeset
720 {OV0_GAMMA_3C0_3FF, 0x100, 0x0100}
872781fef1b3 preliminary version
nick
parents:
diff changeset
721 };
872781fef1b3 preliminary version
nick
parents:
diff changeset
722
872781fef1b3 preliminary version
nick
parents:
diff changeset
723 static void make_default_gamma_correction( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
724 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
725 size_t i;
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
726 if(RadeonFamily == 100) {
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
727 OUTREG(OV0_LIN_TRANS_A, 0x12A00000);
872781fef1b3 preliminary version
nick
parents:
diff changeset
728 OUTREG(OV0_LIN_TRANS_B, 0x199018FE);
872781fef1b3 preliminary version
nick
parents:
diff changeset
729 OUTREG(OV0_LIN_TRANS_C, 0x12A0F9B0);
872781fef1b3 preliminary version
nick
parents:
diff changeset
730 OUTREG(OV0_LIN_TRANS_D, 0xF2F0043B);
872781fef1b3 preliminary version
nick
parents:
diff changeset
731 OUTREG(OV0_LIN_TRANS_E, 0x12A02050);
872781fef1b3 preliminary version
nick
parents:
diff changeset
732 OUTREG(OV0_LIN_TRANS_F, 0x0000174E);
872781fef1b3 preliminary version
nick
parents:
diff changeset
733 for(i=0; i<6; i++){
872781fef1b3 preliminary version
nick
parents:
diff changeset
734 OUTREG(r100_def_gamma[i].gammaReg,
872781fef1b3 preliminary version
nick
parents:
diff changeset
735 (r100_def_gamma[i].gammaSlope<<16) |
872781fef1b3 preliminary version
nick
parents:
diff changeset
736 r100_def_gamma[i].gammaOffset);
872781fef1b3 preliminary version
nick
parents:
diff changeset
737 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
738 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
739 else{
872781fef1b3 preliminary version
nick
parents:
diff changeset
740 OUTREG(OV0_LIN_TRANS_A, 0x12a00000);
872781fef1b3 preliminary version
nick
parents:
diff changeset
741 OUTREG(OV0_LIN_TRANS_B, 0x1990190e);
872781fef1b3 preliminary version
nick
parents:
diff changeset
742 OUTREG(OV0_LIN_TRANS_C, 0x12a0f9c0);
872781fef1b3 preliminary version
nick
parents:
diff changeset
743 OUTREG(OV0_LIN_TRANS_D, 0xf3000442);
872781fef1b3 preliminary version
nick
parents:
diff changeset
744 OUTREG(OV0_LIN_TRANS_E, 0x12a02040);
872781fef1b3 preliminary version
nick
parents:
diff changeset
745 OUTREG(OV0_LIN_TRANS_F, 0x175f);
872781fef1b3 preliminary version
nick
parents:
diff changeset
746
872781fef1b3 preliminary version
nick
parents:
diff changeset
747 /* Default Gamma,
872781fef1b3 preliminary version
nick
parents:
diff changeset
748 Of 18 segments for gamma cure, all segments in R200 are programmable,
872781fef1b3 preliminary version
nick
parents:
diff changeset
749 while only lower 4 and upper 2 segments are programmable in Radeon*/
872781fef1b3 preliminary version
nick
parents:
diff changeset
750 for(i=0; i<18; i++){
872781fef1b3 preliminary version
nick
parents:
diff changeset
751 OUTREG(r200_def_gamma[i].gammaReg,
872781fef1b3 preliminary version
nick
parents:
diff changeset
752 (r200_def_gamma[i].gammaSlope<<16) |
872781fef1b3 preliminary version
nick
parents:
diff changeset
753 r200_def_gamma[i].gammaOffset);
872781fef1b3 preliminary version
nick
parents:
diff changeset
754 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
755 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
756 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
757 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
758
872781fef1b3 preliminary version
nick
parents:
diff changeset
759 static void radeon_vid_make_default(void)
872781fef1b3 preliminary version
nick
parents:
diff changeset
760 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
761 #ifdef RAGE128
6564
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
762 OUTREG(OV0_COLOUR_CNTL,0x00101000UL); /* Default brightness and saturation for Rage128 */
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
763 #else
872781fef1b3 preliminary version
nick
parents:
diff changeset
764 make_default_gamma_correction();
872781fef1b3 preliminary version
nick
parents:
diff changeset
765 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
766 besr.deinterlace_pattern = 0x900AAAAA;
872781fef1b3 preliminary version
nick
parents:
diff changeset
767 OUTREG(OV0_DEINTERLACE_PATTERN,besr.deinterlace_pattern);
872781fef1b3 preliminary version
nick
parents:
diff changeset
768 besr.deinterlace_on=1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
769 besr.double_buff=1;
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
770 besr.ckey_on=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
771 besr.graphics_key_msk=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
772 besr.graphics_key_clr=0;
5044
43dc579db3d1 Fixed color key definitions. Waiting for new bugreports ;)
nick
parents: 5041
diff changeset
773 besr.ckey_cntl = VIDEO_KEY_FN_TRUE|GRAPHIC_KEY_FN_TRUE|CMP_MIX_AND;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
774 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
775
872781fef1b3 preliminary version
nick
parents:
diff changeset
776
872781fef1b3 preliminary version
nick
parents:
diff changeset
777 unsigned vixGetVersion( void ) { return VIDIX_VERSION; }
872781fef1b3 preliminary version
nick
parents:
diff changeset
778
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
779 static unsigned short ati_card_ids[] =
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
780 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
781 #ifdef RAGE128
872781fef1b3 preliminary version
nick
parents:
diff changeset
782 /*
872781fef1b3 preliminary version
nick
parents:
diff changeset
783 This driver should be compatible with Rage128 (pro) chips.
872781fef1b3 preliminary version
nick
parents:
diff changeset
784 (include adaptive deinterlacing!!!).
872781fef1b3 preliminary version
nick
parents:
diff changeset
785 Moreover: the same logic can be used with Mach64 chips.
872781fef1b3 preliminary version
nick
parents:
diff changeset
786 (I mean: mach64xx, 3d rage, 3d rage IIc, 3D rage pro, 3d rage mobility).
872781fef1b3 preliminary version
nick
parents:
diff changeset
787 but they are incompatible by i/o ports. So if enthusiasts will want
872781fef1b3 preliminary version
nick
parents:
diff changeset
788 then they can redefine OUTREG and INREG macros and redefine OV0_*
872781fef1b3 preliminary version
nick
parents:
diff changeset
789 constants. Also it seems that mach64 chips supports only: YUY2, YV12, UYVY
872781fef1b3 preliminary version
nick
parents:
diff changeset
790 fourccs (422 and 420 formats only).
872781fef1b3 preliminary version
nick
parents:
diff changeset
791 */
872781fef1b3 preliminary version
nick
parents:
diff changeset
792 /* Rage128 Pro GL */
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
793 DEVICE_ATI_RAGE_128_PA_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
794 DEVICE_ATI_RAGE_128_PB_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
795 DEVICE_ATI_RAGE_128_PC_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
796 DEVICE_ATI_RAGE_128_PD_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
797 DEVICE_ATI_RAGE_128_PE_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
798 DEVICE_ATI_RAGE_128_PF_PRO,
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
799 /* Rage128 Pro VR */
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
800 DEVICE_ATI_RAGE_128_PG_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
801 DEVICE_ATI_RAGE_128_PH_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
802 DEVICE_ATI_RAGE_128_PI_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
803 DEVICE_ATI_RAGE_128_PJ_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
804 DEVICE_ATI_RAGE_128_PK_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
805 DEVICE_ATI_RAGE_128_PL_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
806 DEVICE_ATI_RAGE_128_PM_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
807 DEVICE_ATI_RAGE_128_PN_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
808 DEVICE_ATI_RAGE_128_PO_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
809 DEVICE_ATI_RAGE_128_PP_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
810 DEVICE_ATI_RAGE_128_PQ_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
811 DEVICE_ATI_RAGE_128_PR_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
812 DEVICE_ATI_RAGE_128_PS_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
813 DEVICE_ATI_RAGE_128_PT_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
814 DEVICE_ATI_RAGE_128_PU_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
815 DEVICE_ATI_RAGE_128_PV_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
816 DEVICE_ATI_RAGE_128_PW_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
817 DEVICE_ATI_RAGE_128_PX_PRO,
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
818 /* Rage128 GL */
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
819 DEVICE_ATI_RAGE_128_RE_SG,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
820 DEVICE_ATI_RAGE_128_RF_SG,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
821 DEVICE_ATI_RAGE_128_RG,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
822 DEVICE_ATI_RAGE_128_RK_VR,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
823 DEVICE_ATI_RAGE_128_RL_VR,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
824 DEVICE_ATI_RAGE_128_SE_4X,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
825 DEVICE_ATI_RAGE_128_SF_4X,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
826 DEVICE_ATI_RAGE_128_SG_4X,
8854
b3afe83fc6cc Update radeon pci ids
arpi
parents: 8771
diff changeset
827 DEVICE_ATI_RAGE_128_SH,
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
828 DEVICE_ATI_RAGE_128_SK_4X,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
829 DEVICE_ATI_RAGE_128_SL_4X,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
830 DEVICE_ATI_RAGE_128_SM_4X,
8854
b3afe83fc6cc Update radeon pci ids
arpi
parents: 8771
diff changeset
831 DEVICE_ATI_RAGE_128_4X,
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
832 DEVICE_ATI_RAGE_128_PRO,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
833 DEVICE_ATI_RAGE_128_PRO2,
5165
51fcb1e5c96e rage mobility m3 is rage128 based and not mach64 ...
michael
parents: 5044
diff changeset
834 DEVICE_ATI_RAGE_128_PRO3,
51fcb1e5c96e rage mobility m3 is rage128 based and not mach64 ...
michael
parents: 5044
diff changeset
835 /* these seem to be based on rage 128 instead of mach64 */
51fcb1e5c96e rage mobility m3 is rage128 based and not mach64 ...
michael
parents: 5044
diff changeset
836 DEVICE_ATI_RAGE_MOBILITY_M3,
51fcb1e5c96e rage mobility m3 is rage128 based and not mach64 ...
michael
parents: 5044
diff changeset
837 DEVICE_ATI_RAGE_MOBILITY_M32
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
838 #else
872781fef1b3 preliminary version
nick
parents:
diff changeset
839 /* Radeons (indeed: Rage 256 Pro ;) */
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
840 DEVICE_ATI_RADEON_R100_QD,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
841 DEVICE_ATI_RADEON_R100_QE,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
842 DEVICE_ATI_RADEON_R100_QF,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
843 DEVICE_ATI_RADEON_R100_QG,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
844 DEVICE_ATI_RADEON_VE_QY,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
845 DEVICE_ATI_RADEON_VE_QZ,
8854
b3afe83fc6cc Update radeon pci ids
arpi
parents: 8771
diff changeset
846 DEVICE_ATI_RADEON_MOBILITY_M7,
b3afe83fc6cc Update radeon pci ids
arpi
parents: 8771
diff changeset
847 DEVICE_ATI_RADEON_MOBILITY_M72,
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
848 DEVICE_ATI_RADEON_MOBILITY_M6,
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
849 DEVICE_ATI_RADEON_MOBILITY_M62,
10332
dd748f428d05 radeon mobility u1 support
alex
parents: 9892
diff changeset
850 DEVICE_ATI_RADEON_MOBILITY_U1,
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
851 DEVICE_ATI_RADEON_R200_BB,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
852 DEVICE_ATI_RADEON_R200_QH,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
853 DEVICE_ATI_RADEON_R200_QI,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
854 DEVICE_ATI_RADEON_R200_QJ,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
855 DEVICE_ATI_RADEON_R200_QK,
8854
b3afe83fc6cc Update radeon pci ids
arpi
parents: 8771
diff changeset
856 DEVICE_ATI_RADEON_R200_QL,
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
857 DEVICE_ATI_RADEON_R200_QH2,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
858 DEVICE_ATI_RADEON_R200_QI2,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
859 DEVICE_ATI_RADEON_R200_QJ2,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
860 DEVICE_ATI_RADEON_R200_QK2,
8854
b3afe83fc6cc Update radeon pci ids
arpi
parents: 8771
diff changeset
861 DEVICE_ATI_RADEON_RV200_QW,
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
862 DEVICE_ATI_RADEON_RV200_QX,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
863 DEVICE_ATI_RADEON_R250_ID,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
864 DEVICE_ATI_RADEON_R250_IE,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
865 DEVICE_ATI_RADEON_R250_IF,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
866 DEVICE_ATI_RADEON_R250_IG,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
867 DEVICE_ATI_RADEON_R250_LD,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
868 DEVICE_ATI_RADEON_R250_LE,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
869 DEVICE_ATI_RADEON_R250_LF,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
870 DEVICE_ATI_RADEON_R250_LG,
12070
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
871 DEVICE_ATI_RV250_5C61_RADEON,
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
872 DEVICE_ATI_RV250_5C63_RADEON,
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
873 DEVICE_ATI_RV280_RADEON_9200,
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
874 DEVICE_ATI_RV280_RADEON_92002,
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
875 DEVICE_ATI_RV280_RADEON_92003,
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
876 DEVICE_ATI_RV280_RADEON_92004,
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
877 DEVICE_ATI_RV280_RADEON_92005,
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
878 DEVICE_ATI_RADEON_R300_ND,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
879 DEVICE_ATI_RADEON_R300_NE,
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
880 DEVICE_ATI_RADEON_R300_NF,
11371
9cd1546f26ea patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
attila
parents: 10332
diff changeset
881 DEVICE_ATI_RADEON_R300_NG,
11658
73203cca1884 Makes radeon_vid work with the Radeon 9600 Pro card.
wight
parents: 11371
diff changeset
882 DEVICE_ATI_RADEON_RV350_AP,
12060
b245a429c896 Mobility Radeon 9600/9700 support
faust3
parents: 11678
diff changeset
883 DEVICE_ATI_RADEON_R350_NH,
b245a429c896 Mobility Radeon 9600/9700 support
faust3
parents: 11678
diff changeset
884 DEVICE_ATI_RV350_MOBILITY_RADEON,
b245a429c896 Mobility Radeon 9600/9700 support
faust3
parents: 11678
diff changeset
885 DEVICE_ATI_RV350_MOBILITY_RADEON2
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
886 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
887 };
872781fef1b3 preliminary version
nick
parents:
diff changeset
888
872781fef1b3 preliminary version
nick
parents:
diff changeset
889 static int find_chip(unsigned chip_id)
872781fef1b3 preliminary version
nick
parents:
diff changeset
890 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
891 unsigned i;
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
892 for(i = 0;i < sizeof(ati_card_ids)/sizeof(unsigned short);i++)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
893 {
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
894 if(chip_id == ati_card_ids[i]) return i;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
895 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
896 return -1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
897 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
898
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
899 static pciinfo_t pci_info;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
900 static int probed=0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
901
872781fef1b3 preliminary version
nick
parents:
diff changeset
902 vidix_capability_t def_cap =
872781fef1b3 preliminary version
nick
parents:
diff changeset
903 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
904 #ifdef RAGE128
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
905 "BES driver for Rage128 cards",
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
906 #else
8564
e1329263197b fixed a 10l, some cosmetics, and initial ppc (bigendian) support
alex
parents: 8562
diff changeset
907 "BES driver for Radeon cards",
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
908 #endif
4327
9bdf337bd078 upgraded to newest vidix interface
alex
parents: 4319
diff changeset
909 "Nick Kurshev",
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
910 TYPE_OUTPUT | TYPE_FX,
4191
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
911 { 0, 0, 0, 0 },
4282
ae7d42d7b286 2048x2048 is real max size of overlay
nick
parents: 4264
diff changeset
912 2048,
ae7d42d7b286 2048x2048 is real max size of overlay
nick
parents: 4264
diff changeset
913 2048,
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
914 4,
872781fef1b3 preliminary version
nick
parents:
diff changeset
915 4,
872781fef1b3 preliminary version
nick
parents:
diff changeset
916 -1,
4264
689531ade0fb added FLAG_EQUALIZER
alex
parents: 4230
diff changeset
917 FLAG_UPSCALER | FLAG_DOWNSCALER | FLAG_EQUALIZER,
4134
nick
parents: 4107
diff changeset
918 VENDOR_ATI,
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
919 0,
872781fef1b3 preliminary version
nick
parents:
diff changeset
920 { 0, 0, 0, 0}
872781fef1b3 preliminary version
nick
parents:
diff changeset
921 };
872781fef1b3 preliminary version
nick
parents:
diff changeset
922
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
923 #ifdef HAVE_X11
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
924 void probe_fireGL_driver() {
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
925 Display *dp = XOpenDisplay ((void*)0);
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
926 int n = 0;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
927 char **extlist = XListExtensions (dp, &n);
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
928 XCloseDisplay (dp);
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
929 if (extlist) {
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
930 int i;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
931 int ext_fgl = 0, ext_fglrx = 0;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
932 for (i = 0; i < n; i++) {
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
933 if (!strcmp(extlist[i], "ATIFGLEXTENSION")) ext_fgl = 1;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
934 if (!strcmp(extlist[i], "ATIFGLRXDRI")) ext_fglrx = 1;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
935 }
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
936 if (ext_fgl) {
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
937 printf(RADEON_MSG" ATI FireGl driver detected");
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
938 firegl_shift = 0x500000;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
939 if (!ext_fglrx) {
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
940 printf(", but DRI seems not to be activated\n");
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
941 printf(RADEON_MSG" Output may not work correctly, check your DRI configuration!");
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
942 }
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
943 printf("\n");
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
944 }
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
945 }
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
946 }
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
947 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
948
4191
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
949 int vixProbe( int verbose,int force )
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
950 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
951 pciinfo_t lst[MAX_PCI_DEVICES];
872781fef1b3 preliminary version
nick
parents:
diff changeset
952 unsigned i,num_pci;
872781fef1b3 preliminary version
nick
parents:
diff changeset
953 int err;
4030
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
954 __verbose = verbose;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
955 err = pci_scan(lst,&num_pci);
872781fef1b3 preliminary version
nick
parents:
diff changeset
956 if(err)
872781fef1b3 preliminary version
nick
parents:
diff changeset
957 {
11678
972d1998bde9 occured --> occurred typo patch by Clinton Roy <croy@dstc.edu.au>
diego
parents: 11658
diff changeset
958 printf(RADEON_MSG" Error occurred during pci scan: %s\n",strerror(err));
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
959 return err;
872781fef1b3 preliminary version
nick
parents:
diff changeset
960 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
961 else
872781fef1b3 preliminary version
nick
parents:
diff changeset
962 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
963 err = ENXIO;
872781fef1b3 preliminary version
nick
parents:
diff changeset
964 for(i=0;i<num_pci;i++)
872781fef1b3 preliminary version
nick
parents:
diff changeset
965 {
4107
cf1d2f965867 Changes due new gawk generator
nick
parents: 4070
diff changeset
966 if(lst[i].vendor == VENDOR_ATI)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
967 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
968 int idx;
4191
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
969 const char *dname;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
970 idx = find_chip(lst[i].device);
4191
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
971 if(idx == -1 && force == PROBE_NORMAL) continue;
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
972 dname = pci_device_name(VENDOR_ATI,lst[i].device);
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
973 dname = dname ? dname : "Unknown chip";
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
974 printf(RADEON_MSG" Found chip: %s\n",dname);
9767
f6d2772efca3 Ignore disabled cards. (Jon Burgess <jburgess@uklinux.net>)
ranma
parents: 9544
diff changeset
975 if ((lst[i].command & PCI_COMMAND_IO) == 0)
f6d2772efca3 Ignore disabled cards. (Jon Burgess <jburgess@uklinux.net>)
ranma
parents: 9544
diff changeset
976 {
f6d2772efca3 Ignore disabled cards. (Jon Burgess <jburgess@uklinux.net>)
ranma
parents: 9544
diff changeset
977 printf("[radeon] Device is disabled, ignoring\n");
f6d2772efca3 Ignore disabled cards. (Jon Burgess <jburgess@uklinux.net>)
ranma
parents: 9544
diff changeset
978 continue;
f6d2772efca3 Ignore disabled cards. (Jon Burgess <jburgess@uklinux.net>)
ranma
parents: 9544
diff changeset
979 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
980 #ifndef RAGE128
4191
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
981 if(idx != -1)
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
982 #ifdef HAVE_X11
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
983 probe_fireGL_driver();
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
984 #endif
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
985 {
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
986 switch(ati_card_ids[idx]) {
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
987 /* Original radeon */
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
988 case DEVICE_ATI_RADEON_R100_QD:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
989 case DEVICE_ATI_RADEON_R100_QE:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
990 case DEVICE_ATI_RADEON_R100_QF:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
991 case DEVICE_ATI_RADEON_R100_QG:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
992 RadeonFamily = 100;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
993 break;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
994
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
995 /* Radeon VE / Radeon Mobility */
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
996 case DEVICE_ATI_RADEON_VE_QY:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
997 case DEVICE_ATI_RADEON_VE_QZ:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
998 case DEVICE_ATI_RADEON_MOBILITY_M6:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
999 case DEVICE_ATI_RADEON_MOBILITY_M62:
10332
dd748f428d05 radeon mobility u1 support
alex
parents: 9892
diff changeset
1000 case DEVICE_ATI_RADEON_MOBILITY_U1:
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1001 RadeonFamily = 120;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1002 break;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1003
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1004 /* Radeon 7500 / Radeon Mobility 7500 */
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1005 case DEVICE_ATI_RADEON_RV200_QW:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1006 case DEVICE_ATI_RADEON_RV200_QX:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1007 case DEVICE_ATI_RADEON_MOBILITY_M7:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1008 case DEVICE_ATI_RADEON_MOBILITY_M72:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1009 RadeonFamily = 150;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1010 break;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1011
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1012 /* Radeon 8500 */
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1013 case DEVICE_ATI_RADEON_R200_BB:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1014 case DEVICE_ATI_RADEON_R200_QH:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1015 case DEVICE_ATI_RADEON_R200_QI:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1016 case DEVICE_ATI_RADEON_R200_QJ:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1017 case DEVICE_ATI_RADEON_R200_QK:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1018 case DEVICE_ATI_RADEON_R200_QL:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1019 case DEVICE_ATI_RADEON_R200_QH2:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1020 case DEVICE_ATI_RADEON_R200_QI2:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1021 case DEVICE_ATI_RADEON_R200_QJ2:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1022 case DEVICE_ATI_RADEON_R200_QK2:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1023 RadeonFamily = 200;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1024 break;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1025
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1026 /* Radeon 9000 */
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1027 case DEVICE_ATI_RADEON_R250_ID:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1028 case DEVICE_ATI_RADEON_R250_IE:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1029 case DEVICE_ATI_RADEON_R250_IF:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1030 case DEVICE_ATI_RADEON_R250_IG:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1031 case DEVICE_ATI_RADEON_R250_LD:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1032 case DEVICE_ATI_RADEON_R250_LE:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1033 case DEVICE_ATI_RADEON_R250_LF:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1034 case DEVICE_ATI_RADEON_R250_LG:
12070
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1035 case DEVICE_ATI_RV250_5C61_RADEON:
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1036 case DEVICE_ATI_RV250_5C63_RADEON:
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1037 RadeonFamily = 250;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1038 break;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1039
12070
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1040 /* Radeon 9200 */
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1041 case DEVICE_ATI_RV280_RADEON_9200:
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1042 case DEVICE_ATI_RV280_RADEON_92002:
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1043 case DEVICE_ATI_RV280_RADEON_92003:
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1044 case DEVICE_ATI_RV280_RADEON_92004:
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1045 case DEVICE_ATI_RV280_RADEON_92005:
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1046 RadeonFamily = 280;
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1047 break;
070fc453a20b support for Radeon 9200 based video boards patch by Benjamin Zores <ben at tutuxclan.org>
faust3
parents: 12060
diff changeset
1048
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1049 /* Radeon 9700 */
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1050 case DEVICE_ATI_RADEON_R300_ND:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1051 case DEVICE_ATI_RADEON_R300_NE:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1052 case DEVICE_ATI_RADEON_R300_NF:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1053 case DEVICE_ATI_RADEON_R300_NG:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1054 RadeonFamily = 300;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1055 break;
11371
9cd1546f26ea patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
attila
parents: 10332
diff changeset
1056
11658
73203cca1884 Makes radeon_vid work with the Radeon 9600 Pro card.
wight
parents: 11371
diff changeset
1057 /* Radeon 9600/9800 */
73203cca1884 Makes radeon_vid work with the Radeon 9600 Pro card.
wight
parents: 11371
diff changeset
1058 case DEVICE_ATI_RADEON_RV350_AP:
11371
9cd1546f26ea patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
attila
parents: 10332
diff changeset
1059 case DEVICE_ATI_RADEON_R350_NH:
12060
b245a429c896 Mobility Radeon 9600/9700 support
faust3
parents: 11678
diff changeset
1060 case DEVICE_ATI_RV350_MOBILITY_RADEON:
b245a429c896 Mobility Radeon 9600/9700 support
faust3
parents: 11678
diff changeset
1061 case DEVICE_ATI_RV350_MOBILITY_RADEON2:
11371
9cd1546f26ea patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
attila
parents: 10332
diff changeset
1062 RadeonFamily = 350;
9cd1546f26ea patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
attila
parents: 10332
diff changeset
1063 break;
9cd1546f26ea patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
attila
parents: 10332
diff changeset
1064
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1065 default:
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1066 break;
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1067 }
8855
6787d02e45aa Update card (chip family) detection (from mplayerxp)
arpi
parents: 8854
diff changeset
1068 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1069 #endif
4193
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1070 if(force > PROBE_NORMAL)
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1071 {
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1072 printf(RADEON_MSG" Driver was forced. Was found %sknown chip\n",idx == -1 ? "un" : "");
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1073 if(idx == -1)
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1074 #ifdef RAGE128
4373
4f36681c95f8 gcc-3.0.3 compilation fixing
nick
parents: 4327
diff changeset
1075 printf(RADEON_MSG" Assuming it as Rage128\n");
4193
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1076 #else
4373
4f36681c95f8 gcc-3.0.3 compilation fixing
nick
parents: 4327
diff changeset
1077 printf(RADEON_MSG" Assuming it as Radeon1\n");
4193
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1078 #endif
ae28646a3568 More messages on forcing
nick
parents: 4191
diff changeset
1079 }
4191
62a6135d090e + new features and possibility
nick
parents: 4134
diff changeset
1080 def_cap.device_id = lst[i].device;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1081 err = 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1082 memcpy(&pci_info,&lst[i],sizeof(pciinfo_t));
872781fef1b3 preliminary version
nick
parents:
diff changeset
1083 probed=1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1084 break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1085 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1086 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1087 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1088 if(err && verbose) printf(RADEON_MSG" Can't find chip\n");
872781fef1b3 preliminary version
nick
parents:
diff changeset
1089 return err;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1090 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1091
6564
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1092 static void radeon_vid_dump_regs( void ); /* forward declaration */
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1093
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1094 int vixInit( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1095 {
4477
dc9d7686ea4a using MTRR
nick
parents: 4458
diff changeset
1096 int err;
4012
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
1097 if(!probed)
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
1098 {
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
1099 printf(RADEON_MSG" Driver was not probed but is being initializing\n");
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
1100 return EINTR;
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
1101 }
01092e2aea16 IO space is memory mapped (no in(out)port required)
nick
parents: 4009
diff changeset
1102 if((radeon_mmio_base = map_phys_mem(pci_info.base2,0xFFFF))==(void *)-1) return ENOMEM;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1103 radeon_ram_size = INREG(CONFIG_MEMSIZE);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1104 /* mem size is bits [28:0], mask off the rest. Range: from 1Mb up to 512 Mb */
872781fef1b3 preliminary version
nick
parents:
diff changeset
1105 radeon_ram_size &= CONFIG_MEMSIZE_MASK;
8942
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1106 #ifdef RADEON
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1107 /* according to XFree86 4.2.0, some production M6's return 0 for 8MB */
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1108 if (radeon_ram_size == 0 &&
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1109 (def_cap.device_id == DEVICE_ATI_RADEON_MOBILITY_M6 ||
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1110 def_cap.device_id == DEVICE_ATI_RADEON_MOBILITY_M62))
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1111 {
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1112 printf(RADEON_MSG" Workarounding buggy Radeon Mobility M6 (0 vs. 8MB ram)\n");
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1113 radeon_ram_size = 8192*1024;
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1114 }
9240
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1115 #else
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1116 /* Rage Mobility (rage128) also has memsize bug */
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1117 if (radeon_ram_size == 0 &&
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1118 (def_cap.device_id == DEVICE_ATI_RAGE_MOBILITY_M3 ||
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1119 def_cap.device_id == DEVICE_ATI_RAGE_MOBILITY_M32))
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1120 {
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1121 printf(RADEON_MSG" Workarounding buggy Rage Mobility M3 (0 vs. 8MB ram)\n");
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1122 radeon_ram_size = 8192*1024;
4898cfdf582a The patch enables the fix for rage128_vid as well as radeon_vid, and looks for the
arpi
parents: 9044
diff changeset
1123 }
8942
f381dbfd277e M6 bug workaround by Hanno Bock <hanno@gmx.de>
alex
parents: 8876
diff changeset
1124 #endif
12072
be548f4433b3 temporary workaround to make it work on windows
faust3
parents: 12070
diff changeset
1125 #ifdef WIN32
be548f4433b3 temporary workaround to make it work on windows
faust3
parents: 12070
diff changeset
1126 if(radeon_ram_size > 16*1024*1024)radeon_ram_size=16*1024*1024;
be548f4433b3 temporary workaround to make it work on windows
faust3
parents: 12070
diff changeset
1127 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1128 if((radeon_mem_base = map_phys_mem(pci_info.base0,radeon_ram_size))==(void *)-1) return ENOMEM;
4070
b61ba6c256dd Minor interface changes: color and video keys are moved out from playback configuring
nick
parents: 4038
diff changeset
1129 memset(&besr,0,sizeof(bes_registers_t));
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1130 radeon_vid_make_default();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1131 printf(RADEON_MSG" Video memory = %uMb\n",radeon_ram_size/0x100000);
4477
dc9d7686ea4a using MTRR
nick
parents: 4458
diff changeset
1132 err = mtrr_set_type(pci_info.base0,radeon_ram_size,MTRR_TYPE_WRCOMB);
dc9d7686ea4a using MTRR
nick
parents: 4458
diff changeset
1133 if(!err) printf(RADEON_MSG" Set write-combining type of video memory\n");
8521
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
1134
8553
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1135 radeon_fifo_wait(3);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1136 SAVED_OV0_GRAPHICS_KEY_CLR = INREG(OV0_GRAPHICS_KEY_CLR);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1137 SAVED_OV0_GRAPHICS_KEY_MSK = INREG(OV0_GRAPHICS_KEY_MSK);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1138 SAVED_OV0_VID_KEY_CLR = INREG(OV0_VID_KEY_CLR);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1139 SAVED_OV0_VID_KEY_MSK = INREG(OV0_VID_KEY_MSK);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1140 SAVED_OV0_KEY_CNTL = INREG(OV0_KEY_CNTL);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1141 printf(RADEON_MSG" Saved overlay colorkey settings\n");
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1142
8521
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
1143 #ifdef RADEON
8859
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1144 switch(RadeonFamily)
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1145 {
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1146 case 100:
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1147 case 120:
8859
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1148 case 150:
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1149 case 250:
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1150 is_shift_required=1;
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1151 break;
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1152 default:
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1153 break;
fd13e4c4f323 Set is_shift_required according to RadeonFamily
arpi
parents: 8858
diff changeset
1154 }
8521
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
1155 #endif
8996a4599a41 the long awaited pink screen + shift fix for radeon, based on patch by Svante Signell <svante.signell@telia.com>, Carl (mlist.mplayer.users@urs.us) and Nick Kurshve <nickolsk@yandex.ru>
alex
parents: 8238
diff changeset
1156
9044
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1157 /* XXX: hack, but it works for me (tm) */
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1158 #if defined(RAGE128) && (WORDS_BIGENDIAN)
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1159 /* code from gatos */
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1160 {
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1161 SAVED_CONFIG_CNTL = INREG(CONFIG_CNTL);
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1162 OUTREG(CONFIG_CNTL, SAVED_CONFIG_CNTL &
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1163 ~(APER_0_BIG_ENDIAN_16BPP_SWAP|APER_0_BIG_ENDIAN_32BPP_SWAP));
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1164
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1165 // printf("saved: %x, current: %x\n", SAVED_CONFIG_CNTL,
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1166 // INREG(CONFIG_CNTL));
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1167 }
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1168 #endif
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1169
6564
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1170 if(__verbose > 1) radeon_vid_dump_regs();
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1171 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1172 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1173
872781fef1b3 preliminary version
nick
parents:
diff changeset
1174 void vixDestroy( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1175 {
6564
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1176 /* remove colorkeying */
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1177 radeon_fifo_wait(3);
8553
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1178 OUTREG(OV0_GRAPHICS_KEY_CLR, SAVED_OV0_GRAPHICS_KEY_CLR);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1179 OUTREG(OV0_GRAPHICS_KEY_MSK, SAVED_OV0_GRAPHICS_KEY_MSK);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1180 OUTREG(OV0_VID_KEY_CLR, SAVED_OV0_VID_KEY_CLR);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1181 OUTREG(OV0_VID_KEY_MSK, SAVED_OV0_VID_KEY_MSK);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1182 OUTREG(OV0_KEY_CNTL, SAVED_OV0_KEY_CNTL);
d952b097c720 correctly save and restore colorkey settings (based on patch by Svante Signell <svante.signell@telia.com>)
alex
parents: 8521
diff changeset
1183 printf(RADEON_MSG" Restored overlay colorkey settings\n");
6564
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1184
9044
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1185 #if defined(RAGE128) && (WORDS_BIGENDIAN)
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1186 OUTREG(CONFIG_CNTL, SAVED_CONFIG_CNTL);
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1187 // printf("saved: %x, restored: %x\n", SAVED_CONFIG_CNTL,
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1188 // INREG(CONFIG_CNTL));
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1189 #endif
59b1bd7ccae1 hack to get rage128 working on ppc-g3
alex
parents: 8942
diff changeset
1190
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1191 unmap_phys_mem(radeon_mem_base,radeon_ram_size);
4855
f7f847e2d7c2 Minor fixes and probably final fix of vsync
nick
parents: 4689
diff changeset
1192 unmap_phys_mem(radeon_mmio_base,0xFFFF);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1193 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1194
872781fef1b3 preliminary version
nick
parents:
diff changeset
1195 int vixGetCapability(vidix_capability_t *to)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1196 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1197 memcpy(to,&def_cap,sizeof(vidix_capability_t));
872781fef1b3 preliminary version
nick
parents:
diff changeset
1198 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1199 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1200
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1201 /*
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1202 Full list of fourcc which are supported by Win2K redeon driver:
6564
652ada9f9b66 remove colorkeying if destroying the driver - fixes some bugs
alex
parents: 6483
diff changeset
1203 YUY2, UYVY, DDES, OGLT, OGL2, OGLS, OGLB, OGNT, OGNZ, OGNS,
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1204 IF09, YVU9, IMC4, M2IA, IYUV, VBID, DXT1, DXT2, DXT3, DXT4, DXT5
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1205 */
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1206 uint32_t supported_fourcc[] =
872781fef1b3 preliminary version
nick
parents:
diff changeset
1207 {
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1208 IMGFMT_Y800, IMGFMT_Y8, IMGFMT_YVU9, IMGFMT_IF09,
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1209 IMGFMT_YV12, IMGFMT_I420, IMGFMT_IYUV,
4455
e23ce822b5de YVYU support (untested yet)
nick
parents: 4429
diff changeset
1210 IMGFMT_UYVY, IMGFMT_YUY2, IMGFMT_YVYU,
4429
edc703059853 RGB15 experimental support
nick
parents: 4416
diff changeset
1211 IMGFMT_RGB15, IMGFMT_BGR15,
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1212 IMGFMT_RGB16, IMGFMT_BGR16,
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1213 IMGFMT_RGB32, IMGFMT_BGR32
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1214 };
872781fef1b3 preliminary version
nick
parents:
diff changeset
1215
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1216 inline static int is_supported_fourcc(uint32_t fourcc)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1217 {
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1218 unsigned int i;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1219 for(i=0;i<sizeof(supported_fourcc)/sizeof(uint32_t);i++)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1220 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1221 if(fourcc==supported_fourcc[i]) return 1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1222 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1223 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1224 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1225
872781fef1b3 preliminary version
nick
parents:
diff changeset
1226 int vixQueryFourcc(vidix_fourcc_t *to)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1227 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1228 if(is_supported_fourcc(to->fourcc))
872781fef1b3 preliminary version
nick
parents:
diff changeset
1229 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1230 to->depth = VID_DEPTH_1BPP | VID_DEPTH_2BPP |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1231 VID_DEPTH_4BPP | VID_DEPTH_8BPP |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1232 VID_DEPTH_12BPP| VID_DEPTH_15BPP|
872781fef1b3 preliminary version
nick
parents:
diff changeset
1233 VID_DEPTH_16BPP| VID_DEPTH_24BPP|
872781fef1b3 preliminary version
nick
parents:
diff changeset
1234 VID_DEPTH_32BPP;
5044
43dc579db3d1 Fixed color key definitions. Waiting for new bugreports ;)
nick
parents: 5041
diff changeset
1235 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1236 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1237 }
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1238 else to->depth = to->flags = 0;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1239 return ENOSYS;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1240 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1241
872781fef1b3 preliminary version
nick
parents:
diff changeset
1242 static void radeon_vid_dump_regs( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1243 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1244 size_t i;
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1245 printf(RADEON_MSG"*** Begin of DRIVER variables dump ***\n");
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1246 printf(RADEON_MSG"radeon_mmio_base=%p\n",radeon_mmio_base);
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1247 printf(RADEON_MSG"radeon_mem_base=%p\n",radeon_mem_base);
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1248 printf(RADEON_MSG"radeon_overlay_off=%08X\n",radeon_overlay_off);
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1249 printf(RADEON_MSG"radeon_ram_size=%08X\n",radeon_ram_size);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1250 printf(RADEON_MSG"video mode: %ux%u@%u\n",radeon_get_xres(),radeon_get_yres(),radeon_vid_get_dbpp());
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1251 printf(RADEON_MSG"*** Begin of OV0 registers dump ***\n");
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1252 for(i=0;i<sizeof(vregs)/sizeof(video_registers_t);i++)
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1253 printf(RADEON_MSG"%s = %08X\n",vregs[i].sname,INREG(vregs[i].name));
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1254 printf(RADEON_MSG"*** End of OV0 registers dump ***\n");
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1255 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1256
872781fef1b3 preliminary version
nick
parents:
diff changeset
1257 static void radeon_vid_stop_video( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1258 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1259 radeon_engine_idle();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1260 OUTREG(OV0_SCALE_CNTL, SCALER_SOFT_RESET);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1261 OUTREG(OV0_EXCLUSIVE_HORZ, 0);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1262 OUTREG(OV0_AUTO_FLIP_CNTL, 0); /* maybe */
872781fef1b3 preliminary version
nick
parents:
diff changeset
1263 OUTREG(OV0_FILTER_CNTL, FILTER_HARDCODED_COEF);
8857
a2710e35e2cc Reduce flickering on window movement (from Christophe Badina)
arpi
parents: 8856
diff changeset
1264 #ifdef RADEON
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1265 OUTREG(OV0_KEY_CNTL, GRAPHIC_KEY_FN_EQ);
8857
a2710e35e2cc Reduce flickering on window movement (from Christophe Badina)
arpi
parents: 8856
diff changeset
1266 #else
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1267 OUTREG(OV0_KEY_CNTL, GRAPHIC_KEY_FN_NE);
8857
a2710e35e2cc Reduce flickering on window movement (from Christophe Badina)
arpi
parents: 8856
diff changeset
1268 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1269 OUTREG(OV0_TEST, 0);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1270 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1271
872781fef1b3 preliminary version
nick
parents:
diff changeset
1272 static void radeon_vid_display_video( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1273 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1274 int bes_flags;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1275 radeon_fifo_wait(2);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1276 OUTREG(OV0_REG_LOAD_CNTL, REG_LD_CTL_LOCK);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1277 radeon_engine_idle();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1278 while(!(INREG(OV0_REG_LOAD_CNTL)&REG_LD_CTL_LOCK_READBACK));
872781fef1b3 preliminary version
nick
parents:
diff changeset
1279 radeon_fifo_wait(15);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1280
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1281 /* Shutdown capturing */
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1282 OUTREG(FCP_CNTL, FCP_CNTL__GND);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1283 OUTREG(CAP0_TRIG_CNTL, 0);
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1284
4689
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
1285 OUTREG(VID_BUFFER_CONTROL, (1<<16) | 0x01);
61f4b8fd380e Fixing "quake" by direct waiting of vsync.
nick
parents: 4666
diff changeset
1286 OUTREG(DISP_TEST_DEBUG_CNTL, 0);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1287
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1288 OUTREG(OV0_AUTO_FLIP_CNTL,OV0_AUTO_FLIP_CNTL_SOFT_BUF_ODD);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1289
4611
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1290 if(besr.deinterlace_on) OUTREG(OV0_DEINTERLACE_PATTERN,besr.deinterlace_pattern);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1291 #ifdef RAGE128
7493
bd423c9c835a rage128 gray fix?
arpi
parents: 7226
diff changeset
1292 OUTREG(OV0_COLOUR_CNTL, (((besr.brightness*64)/1000) & 0x7f) |
bd423c9c835a rage128 gray fix?
arpi
parents: 7226
diff changeset
1293 (((besr.saturation*31+31000)/2000) << 8) |
bd423c9c835a rage128 gray fix?
arpi
parents: 7226
diff changeset
1294 (((besr.saturation*31+31000)/2000) << 16));
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1295 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
1296 radeon_fifo_wait(2);
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1297 OUTREG(OV0_GRAPHICS_KEY_MSK, besr.graphics_key_msk);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1298 OUTREG(OV0_GRAPHICS_KEY_CLR, besr.graphics_key_clr);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1299 OUTREG(OV0_KEY_CNTL,besr.ckey_cntl);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1300
872781fef1b3 preliminary version
nick
parents:
diff changeset
1301 OUTREG(OV0_H_INC, besr.h_inc);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1302 OUTREG(OV0_STEP_BY, besr.step_by);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1303 OUTREG(OV0_Y_X_START, besr.y_x_start);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1304 OUTREG(OV0_Y_X_END, besr.y_x_end);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1305 OUTREG(OV0_V_INC, besr.v_inc);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1306 OUTREG(OV0_P1_BLANK_LINES_AT_TOP, besr.p1_blank_lines_at_top);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1307 OUTREG(OV0_P23_BLANK_LINES_AT_TOP, besr.p23_blank_lines_at_top);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1308 OUTREG(OV0_VID_BUF_PITCH0_VALUE, besr.vid_buf_pitch0_value);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1309 OUTREG(OV0_VID_BUF_PITCH1_VALUE, besr.vid_buf_pitch1_value);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1310 OUTREG(OV0_P1_X_START_END, besr.p1_x_start_end);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1311 OUTREG(OV0_P2_X_START_END, besr.p2_x_start_end);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1312 OUTREG(OV0_P3_X_START_END, besr.p3_x_start_end);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1313 #ifdef RADEON
872781fef1b3 preliminary version
nick
parents:
diff changeset
1314 OUTREG(OV0_BASE_ADDR, besr.base_addr);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1315 #endif
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1316 OUTREG(OV0_VID_BUF0_BASE_ADRS, besr.vid_buf_base_adrs_y[0]);
5041
8a708971d372 Fixed swapping of UV planes in single buffered mode
nick
parents: 4932
diff changeset
1317 OUTREG(OV0_VID_BUF1_BASE_ADRS, besr.vid_buf_base_adrs_v[0]);
8a708971d372 Fixed swapping of UV planes in single buffered mode
nick
parents: 4932
diff changeset
1318 OUTREG(OV0_VID_BUF2_BASE_ADRS, besr.vid_buf_base_adrs_u[0]);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1319 radeon_fifo_wait(9);
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1320 OUTREG(OV0_VID_BUF3_BASE_ADRS, besr.vid_buf_base_adrs_y[0]);
5041
8a708971d372 Fixed swapping of UV planes in single buffered mode
nick
parents: 4932
diff changeset
1321 OUTREG(OV0_VID_BUF4_BASE_ADRS, besr.vid_buf_base_adrs_v[0]);
8a708971d372 Fixed swapping of UV planes in single buffered mode
nick
parents: 4932
diff changeset
1322 OUTREG(OV0_VID_BUF5_BASE_ADRS, besr.vid_buf_base_adrs_u[0]);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1323 OUTREG(OV0_P1_V_ACCUM_INIT, besr.p1_v_accum_init);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1324 OUTREG(OV0_P1_H_ACCUM_INIT, besr.p1_h_accum_init);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1325 OUTREG(OV0_P23_H_ACCUM_INIT, besr.p23_h_accum_init);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1326 OUTREG(OV0_P23_V_ACCUM_INIT, besr.p23_v_accum_init);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1327
6678
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6564
diff changeset
1328 #ifdef RADEON
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6564
diff changeset
1329 bes_flags = SCALER_ENABLE |
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6564
diff changeset
1330 SCALER_SMART_SWITCH;
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6564
diff changeset
1331 // SCALER_HORZ_PICK_NEAREST |
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6564
diff changeset
1332 // SCALER_VERT_PICK_NEAREST |
c7cfaa38cafb switch off nearest scaling ...
pontscho
parents: 6564
diff changeset
1333 #endif
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1334 bes_flags = SCALER_ENABLE |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1335 SCALER_SMART_SWITCH |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1336 SCALER_Y2R_TEMP |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1337 SCALER_PIX_EXPAND;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1338 if(besr.double_buff) bes_flags |= SCALER_DOUBLE_BUFFER;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1339 if(besr.deinterlace_on) bes_flags |= SCALER_ADAPTIVE_DEINT;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1340 #ifdef RAGE128
872781fef1b3 preliminary version
nick
parents:
diff changeset
1341 bes_flags |= SCALER_BURST_PER_PLANE;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1342 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
1343 switch(besr.fourcc)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1344 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1345 case IMGFMT_RGB15:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1346 case IMGFMT_BGR15: bes_flags |= SCALER_SOURCE_15BPP; break;
4429
edc703059853 RGB15 experimental support
nick
parents: 4416
diff changeset
1347 case IMGFMT_RGB16:
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1348 case IMGFMT_BGR16: bes_flags |= SCALER_SOURCE_16BPP; break;
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1349 /*
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1350 case IMGFMT_RGB24:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1351 case IMGFMT_BGR24: bes_flags |= SCALER_SOURCE_24BPP; break;
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1352 */
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1353 case IMGFMT_RGB32:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1354 case IMGFMT_BGR32: bes_flags |= SCALER_SOURCE_32BPP; break;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1355 /* 4:1:0 */
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1356 case IMGFMT_IF09:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1357 case IMGFMT_YVU9: bes_flags |= SCALER_SOURCE_YUV9; break;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1358 /* 4:0:0 */
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1359 case IMGFMT_Y800:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1360 case IMGFMT_Y8:
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1361 /* 4:2:0 */
872781fef1b3 preliminary version
nick
parents:
diff changeset
1362 case IMGFMT_IYUV:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1363 case IMGFMT_I420:
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1364 case IMGFMT_YV12: bes_flags |= SCALER_SOURCE_YUV12; break;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1365 /* 4:2:2 */
4455
e23ce822b5de YVYU support (untested yet)
nick
parents: 4429
diff changeset
1366 case IMGFMT_YVYU:
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1367 case IMGFMT_UYVY: bes_flags |= SCALER_SOURCE_YVYU422; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1368 case IMGFMT_YUY2:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1369 default: bes_flags |= SCALER_SOURCE_VYUY422; break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1370 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1371 OUTREG(OV0_SCALE_CNTL, bes_flags);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1372 OUTREG(OV0_REG_LOAD_CNTL, 0);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1373 if(__verbose > 1) printf(RADEON_MSG"we wanted: scaler=%08X\n",bes_flags);
4030
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
1374 if(__verbose > 1) radeon_vid_dump_regs();
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1375 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1376
4456
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1377 static unsigned radeon_query_pitch(unsigned fourcc,const vidix_yuv_t *spitch)
4009
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1378 {
4456
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1379 unsigned pitch,spy,spv,spu;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1380 spy = spv = spu = 0;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1381 switch(spitch->y)
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1382 {
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1383 case 16:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1384 case 32:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1385 case 64:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1386 case 128:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1387 case 256: spy = spitch->y; break;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1388 default: break;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1389 }
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1390 switch(spitch->u)
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1391 {
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1392 case 16:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1393 case 32:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1394 case 64:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1395 case 128:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1396 case 256: spu = spitch->u; break;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1397 default: break;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1398 }
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1399 switch(spitch->v)
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1400 {
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1401 case 16:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1402 case 32:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1403 case 64:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1404 case 128:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1405 case 256: spv = spitch->v; break;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1406 default: break;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1407 }
4009
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1408 switch(fourcc)
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1409 {
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1410 /* 4:2:0 */
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1411 case IMGFMT_IYUV:
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1412 case IMGFMT_YV12:
4456
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1413 case IMGFMT_I420:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1414 if(spy > 16 && spu == spy/2 && spv == spy/2) pitch = spy;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1415 else pitch = 32;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1416 break;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1417 /* 4:1:0 */
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1418 case IMGFMT_IF09:
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1419 case IMGFMT_YVU9:
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1420 if(spy > 32 && spu == spy/4 && spv == spy/4) pitch = spy;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1421 else pitch = 64;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1422 break;
4456
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1423 default:
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1424 if(spy >= 16) pitch = spy;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1425 else pitch = 16;
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1426 break;
4009
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1427 }
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1428 return pitch;
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1429 }
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1430
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1431 static int radeon_vid_init_video( vidix_playback_t *config )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1432 {
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1433 uint32_t i,tmp,src_w,src_h,dest_w,dest_h,pitch,h_inc,step_by,left,leftUV,top;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1434 int is_400,is_410,is_420,is_rgb32,is_rgb,best_pitch,mpitch;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1435 radeon_vid_stop_video();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1436 left = config->src.x << 16;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1437 top = config->src.y << 16;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1438 src_h = config->src.h;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1439 src_w = config->src.w;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1440 is_400 = is_410 = is_420 = is_rgb32 = is_rgb = 0;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1441 if(config->fourcc == IMGFMT_YV12 ||
872781fef1b3 preliminary version
nick
parents:
diff changeset
1442 config->fourcc == IMGFMT_I420 ||
872781fef1b3 preliminary version
nick
parents:
diff changeset
1443 config->fourcc == IMGFMT_IYUV) is_420 = 1;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1444 if(config->fourcc == IMGFMT_YVU9 ||
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1445 config->fourcc == IMGFMT_IF09) is_410 = 1;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1446 if(config->fourcc == IMGFMT_Y800 ||
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1447 config->fourcc == IMGFMT_Y8) is_400 = 1;
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1448 if(config->fourcc == IMGFMT_RGB32 ||
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1449 config->fourcc == IMGFMT_BGR32) is_rgb32 = 1;
4571
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1450 if(config->fourcc == IMGFMT_RGB32 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1451 config->fourcc == IMGFMT_BGR32 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1452 config->fourcc == IMGFMT_RGB24 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1453 config->fourcc == IMGFMT_BGR24 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1454 config->fourcc == IMGFMT_RGB16 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1455 config->fourcc == IMGFMT_BGR16 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1456 config->fourcc == IMGFMT_RGB15 ||
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1457 config->fourcc == IMGFMT_BGR15) is_rgb = 1;
4456
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1458 best_pitch = radeon_query_pitch(config->fourcc,&config->src.pitch);
4415
30d17394db39 Use one pitch source
nick
parents: 4414
diff changeset
1459 mpitch = best_pitch-1;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1460 switch(config->fourcc)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1461 {
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1462 /* 4:0:0 */
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1463 case IMGFMT_Y800:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1464 case IMGFMT_Y8:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1465 /* 4:1:0 */
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1466 case IMGFMT_YVU9:
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1467 case IMGFMT_IF09:
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1468 /* 4:2:0 */
872781fef1b3 preliminary version
nick
parents:
diff changeset
1469 case IMGFMT_IYUV:
872781fef1b3 preliminary version
nick
parents:
diff changeset
1470 case IMGFMT_YV12:
4415
30d17394db39 Use one pitch source
nick
parents: 4414
diff changeset
1471 case IMGFMT_I420: pitch = (src_w + mpitch) & ~mpitch;
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1472 config->dest.pitch.y =
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1473 config->dest.pitch.u =
4415
30d17394db39 Use one pitch source
nick
parents: 4414
diff changeset
1474 config->dest.pitch.v = best_pitch;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1475 break;
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1476 /* RGB 4:4:4:4 */
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1477 case IMGFMT_RGB32:
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1478 case IMGFMT_BGR32: pitch = (src_w*4 + mpitch) & ~mpitch;
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1479 config->dest.pitch.y =
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1480 config->dest.pitch.u =
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1481 config->dest.pitch.v = best_pitch;
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1482 break;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1483 /* 4:2:2 */
4455
e23ce822b5de YVYU support (untested yet)
nick
parents: 4429
diff changeset
1484 default: /* RGB15, RGB16, YVYU, UYVY, YUY2 */
4415
30d17394db39 Use one pitch source
nick
parents: 4414
diff changeset
1485 pitch = ((src_w*2) + mpitch) & ~mpitch;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1486 config->dest.pitch.y =
872781fef1b3 preliminary version
nick
parents:
diff changeset
1487 config->dest.pitch.u =
4415
30d17394db39 Use one pitch source
nick
parents: 4414
diff changeset
1488 config->dest.pitch.v = best_pitch;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1489 break;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1490 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1491 dest_w = config->dest.w;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1492 dest_h = config->dest.h;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1493 if(radeon_is_dbl_scan()) dest_h *= 2;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1494 besr.dest_bpp = radeon_vid_get_dbpp();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1495 besr.fourcc = config->fourcc;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1496 besr.v_inc = (src_h << 20) / dest_h;
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1497 if(radeon_is_interlace()) besr.v_inc *= 2;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1498 h_inc = (src_w << 12) / dest_w;
9544
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1499
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1500 {
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1501 unsigned int ecp_div;
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1502 ecp_div = (INPLL(VCLK_ECP_CNTL) >> 8) & 3;
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1503 h_inc <<= ecp_div;
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1504 }
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1505
97f61ffa441e vidix rage128 ecp_div patch by (Magnus Damm <damm at opensource dot se>)
michael
parents: 9240
diff changeset
1506
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1507 step_by = 1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1508 while(h_inc >= (2 << 12)) {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1509 step_by++;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1510 h_inc >>= 1;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1511 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1512
872781fef1b3 preliminary version
nick
parents:
diff changeset
1513 /* keep everything in 16.16 */
4015
7a9c22d1d984 works!!!
nick
parents: 4012
diff changeset
1514 besr.base_addr = INREG(DISPLAY_BASE_ADDR);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1515 config->offsets[0] = 0;
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1516 for(i=1;i<besr.vid_nbufs;i++)
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1517 config->offsets[i] = config->offsets[i-1]+config->frame_size;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1518 if(is_420 || is_410 || is_400)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1519 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1520 uint32_t d1line,d2line,d3line;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1521 d1line = top*pitch;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1522 if(is_420)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1523 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1524 d2line = src_h*pitch+(d1line>>2);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1525 d3line = d2line+((src_h*pitch)>>2);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1526 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1527 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1528 if(is_410)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1529 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1530 d2line = src_h*pitch+(d1line>>4);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1531 d3line = d2line+((src_h*pitch)>>4);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1532 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1533 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1534 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1535 d2line = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1536 d3line = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1537 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1538 d1line += (left >> 16) & ~15;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1539 if(is_420)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1540 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1541 d2line += (left >> 17) & ~15;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1542 d3line += (left >> 17) & ~15;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1543 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1544 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1545 if(is_410)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1546 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1547 d2line += (left >> 18) & ~15;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1548 d3line += (left >> 18) & ~15;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1549 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1550 config->offset.y = d1line & VIF_BUF0_BASE_ADRS_MASK;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1551 if(is_400)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1552 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1553 config->offset.v = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1554 config->offset.u = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1555 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1556 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1557 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1558 config->offset.v = d2line & VIF_BUF1_BASE_ADRS_MASK;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1559 config->offset.u = d3line & VIF_BUF2_BASE_ADRS_MASK;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1560 }
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1561 for(i=0;i<besr.vid_nbufs;i++)
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1562 {
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1563 besr.vid_buf_base_adrs_y[i]=((radeon_overlay_off+config->offsets[i]+config->offset.y)&VIF_BUF0_BASE_ADRS_MASK);
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1564 if(is_400)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1565 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1566 besr.vid_buf_base_adrs_v[i]=0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1567 besr.vid_buf_base_adrs_u[i]=0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1568 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1569 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1570 {
9892
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1571 if (besr.fourcc == IMGFMT_I420 || besr.fourcc == IMGFMT_IYUV)
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1572 {
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1573 besr.vid_buf_base_adrs_u[i]=((radeon_overlay_off+config->offsets[i]+config->offset.v)&VIF_BUF1_BASE_ADRS_MASK)|VIF_BUF1_PITCH_SEL;
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1574 besr.vid_buf_base_adrs_v[i]=((radeon_overlay_off+config->offsets[i]+config->offset.u)&VIF_BUF2_BASE_ADRS_MASK)|VIF_BUF2_PITCH_SEL;
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1575 }
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1576 else
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1577 {
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1578 besr.vid_buf_base_adrs_v[i]=((radeon_overlay_off+config->offsets[i]+config->offset.v)&VIF_BUF1_BASE_ADRS_MASK)|VIF_BUF1_PITCH_SEL;
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1579 besr.vid_buf_base_adrs_u[i]=((radeon_overlay_off+config->offsets[i]+config->offset.u)&VIF_BUF2_BASE_ADRS_MASK)|VIF_BUF2_PITCH_SEL;
f6d1df877e89 i420 fixed, needs some testing
alex
parents: 9767
diff changeset
1580 }
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1581 }
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1582 }
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1583 config->offset.y = ((besr.vid_buf_base_adrs_y[0])&VIF_BUF0_BASE_ADRS_MASK) - radeon_overlay_off;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1584 if(is_400)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1585 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1586 config->offset.v = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1587 config->offset.u = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1588 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1589 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1590 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1591 config->offset.v = ((besr.vid_buf_base_adrs_v[0])&VIF_BUF1_BASE_ADRS_MASK) - radeon_overlay_off;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1592 config->offset.u = ((besr.vid_buf_base_adrs_u[0])&VIF_BUF2_BASE_ADRS_MASK) - radeon_overlay_off;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1593 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1594 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1595 else
872781fef1b3 preliminary version
nick
parents:
diff changeset
1596 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1597 config->offset.y = config->offset.u = config->offset.v = ((left & ~7) << 1)&VIF_BUF0_BASE_ADRS_MASK;
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1598 for(i=0;i<besr.vid_nbufs;i++)
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1599 {
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1600 besr.vid_buf_base_adrs_y[i] =
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1601 besr.vid_buf_base_adrs_u[i] =
4932
nick
parents: 4930
diff changeset
1602 besr.vid_buf_base_adrs_v[i] = radeon_overlay_off + config->offsets[i] + config->offset.y;
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1603 }
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1604 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1605
872781fef1b3 preliminary version
nick
parents:
diff changeset
1606 tmp = (left & 0x0003ffff) + 0x00028000 + (h_inc << 3);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1607 besr.p1_h_accum_init = ((tmp << 4) & 0x000f8000) |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1608 ((tmp << 12) & 0xf0000000);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1609
872781fef1b3 preliminary version
nick
parents:
diff changeset
1610 tmp = ((left >> 1) & 0x0001ffff) + 0x00028000 + (h_inc << 2);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1611 besr.p23_h_accum_init = ((tmp << 4) & 0x000f8000) |
872781fef1b3 preliminary version
nick
parents:
diff changeset
1612 ((tmp << 12) & 0x70000000);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1613 tmp = (top & 0x0000ffff) + 0x00018000;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1614 besr.p1_v_accum_init = ((tmp << 4) & OV0_P1_V_ACCUM_INIT_MASK)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1615 |(OV0_P1_MAX_LN_IN_PER_LN_OUT & 1);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1616
872781fef1b3 preliminary version
nick
parents:
diff changeset
1617 tmp = ((top >> 1) & 0x0000ffff) + 0x00018000;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1618 besr.p23_v_accum_init = (is_420||is_410) ?
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1619 ((tmp << 4) & OV0_P23_V_ACCUM_INIT_MASK)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1620 |(OV0_P23_MAX_LN_IN_PER_LN_OUT & 1) : 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1621
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1622 leftUV = (left >> (is_410?18:17)) & 15;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1623 left = (left >> 16) & 15;
4571
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1624 if(is_rgb && !is_rgb32) h_inc<<=1;
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1625 if(is_rgb32)
4571
e9928913a61d - Fixed incorrect i420 support (Michael was right)
nick
parents: 4477
diff changeset
1626 besr.h_inc = (h_inc >> 1) | ((h_inc >> 1) << 16);
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1627 else
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1628 if(is_410)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1629 besr.h_inc = h_inc | ((h_inc >> 2) << 16);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1630 else
4416
06752d1ad228 Preliminary RGB32 and RGB16 support. (Untested yet)
nick
parents: 4415
diff changeset
1631 besr.h_inc = h_inc | ((h_inc >> 1) << 16);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1632 besr.step_by = step_by | (step_by << 8);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1633 besr.y_x_start = (config->dest.x+X_ADJUST) | (config->dest.y << 16);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1634 besr.y_x_end = (config->dest.x + dest_w+X_ADJUST) | ((config->dest.y + dest_h) << 16);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1635 besr.p1_blank_lines_at_top = P1_BLNK_LN_AT_TOP_M1_MASK|((src_h-1)<<16);
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1636 if(is_420 || is_410)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1637 {
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1638 src_h = (src_h + 1) >> (is_410?2:1);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1639 besr.p23_blank_lines_at_top = P23_BLNK_LN_AT_TOP_M1_MASK|((src_h-1)<<16);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1640 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1641 else besr.p23_blank_lines_at_top = 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1642 besr.vid_buf_pitch0_value = pitch;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1643 besr.vid_buf_pitch1_value = is_410 ? pitch>>2 : is_420 ? pitch>>1 : pitch;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1644 besr.p1_x_start_end = (src_w+left-1)|(left<<16);
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1645 if (is_410||is_420) src_w>>=is_410?2:1;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1646 if(is_400)
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1647 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1648 besr.p2_x_start_end = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1649 besr.p3_x_start_end = 0;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1650 }
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1651 else
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1652 {
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1653 besr.p2_x_start_end = (src_w+left-1)|(leftUV<<16);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1654 besr.p3_x_start_end = besr.p2_x_start_end;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1655 }
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1656
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1657 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1658 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1659
4009
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1660 static void radeon_compute_framesize(vidix_playback_t *info)
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1661 {
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1662 unsigned pitch,awidth,dbpp;
4456
52929f735c8f Using new tune info
nick
parents: 4455
diff changeset
1663 pitch = radeon_query_pitch(info->fourcc,&info->src.pitch);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1664 dbpp = radeon_vid_get_dbpp();
4033
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1665 switch(info->fourcc)
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1666 {
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1667 case IMGFMT_I420:
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1668 case IMGFMT_YV12:
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1669 case IMGFMT_IYUV:
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1670 awidth = (info->src.w + (pitch-1)) & ~(pitch-1);
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1671 info->frame_size = awidth*(info->src.h+info->src.h/2);
4033
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1672 break;
6483
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1673 case IMGFMT_Y800:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1674 case IMGFMT_Y8:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1675 awidth = (info->src.w + (pitch-1)) & ~(pitch-1);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1676 info->frame_size = awidth*info->src.h;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1677 break;
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1678 case IMGFMT_IF09:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1679 case IMGFMT_YVU9:
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1680 awidth = (info->src.w + (pitch-1)) & ~(pitch-1);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1681 info->frame_size = awidth*(info->src.h+info->src.h/8);
2dd9691fe6b8 YVU9,IF09,Y800 and Y8 support - and synced with mpxp
alex
parents: 6254
diff changeset
1682 break;
4429
edc703059853 RGB15 experimental support
nick
parents: 4416
diff changeset
1683 case IMGFMT_RGB32:
edc703059853 RGB15 experimental support
nick
parents: 4416
diff changeset
1684 case IMGFMT_BGR32:
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1685 awidth = (info->src.w*4 + (pitch-1)) & ~(pitch-1);
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1686 info->frame_size = awidth*info->src.h;
4429
edc703059853 RGB15 experimental support
nick
parents: 4416
diff changeset
1687 break;
edc703059853 RGB15 experimental support
nick
parents: 4416
diff changeset
1688 /* YUY2 YVYU, RGB15, RGB16 */
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1689 default:
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1690 awidth = (info->src.w*2 + (pitch-1)) & ~(pitch-1);
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1691 info->frame_size = awidth*info->src.h;
4033
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1692 break;
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1693 }
4009
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1694 }
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1695
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1696 int vixConfigPlayback(vidix_playback_t *info)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1697 {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1698 unsigned rgb_size,nfr;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1699 if(!is_supported_fourcc(info->fourcc)) return ENOSYS;
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1700 if(info->num_frames>VID_PLAY_MAXFRAMES) info->num_frames=VID_PLAY_MAXFRAMES;
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1701 if(info->num_frames==1) besr.double_buff=0;
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1702 else besr.double_buff=1;
4009
534d10bbff99 changes due interface changing
nick
parents: 4003
diff changeset
1703 radeon_compute_framesize(info);
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1704
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1705 rgb_size = radeon_get_xres()*radeon_get_yres()*((radeon_vid_get_dbpp()+7)/8);
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1706 nfr = info->num_frames;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1707 for(;nfr>0; nfr--)
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1708 {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1709 radeon_overlay_off = radeon_ram_size - info->frame_size*nfr;
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
1710 #ifdef HAVE_X11
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
1711 radeon_overlay_off -= firegl_shift;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
1712 #endif
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1713 radeon_overlay_off &= 0xffff0000;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1714 if(radeon_overlay_off >= (int)rgb_size ) break;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1715 }
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1716 if(nfr <= 3)
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1717 {
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1718 nfr = info->num_frames;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1719 for(;nfr>0; nfr--)
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1720 {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1721 radeon_overlay_off = radeon_ram_size - info->frame_size*nfr;
12286
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
1722 #ifdef HAVE_X11
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
1723 radeon_overlay_off -= firegl_shift;
b52e831261b1 support for ATI fireglx
alex
parents: 12072
diff changeset
1724 #endif
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1725 radeon_overlay_off &= 0xffff0000;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1726 if(radeon_overlay_off > 0) break;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1727 }
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1728 }
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1729 if(nfr <= 0) return EINVAL;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1730 info->num_frames = nfr;
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1731 besr.vid_nbufs = info->num_frames;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1732 info->dga_addr = (char *)radeon_mem_base + radeon_overlay_off;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1733 radeon_vid_init_video(info);
872781fef1b3 preliminary version
nick
parents:
diff changeset
1734 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1735 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1736
872781fef1b3 preliminary version
nick
parents:
diff changeset
1737 int vixPlaybackOn( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1738 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1739 radeon_vid_display_video();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1740 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1741 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1742
872781fef1b3 preliminary version
nick
parents:
diff changeset
1743 int vixPlaybackOff( void )
872781fef1b3 preliminary version
nick
parents:
diff changeset
1744 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1745 radeon_vid_stop_video();
872781fef1b3 preliminary version
nick
parents:
diff changeset
1746 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1747 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1748
4033
94602bcd13d0 double buffering fixing
nick
parents: 4030
diff changeset
1749 int vixPlaybackFrameSelect(unsigned frame)
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1750 {
4412
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1751 uint32_t off[6];
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1752 int prev_frame= (frame-1+besr.vid_nbufs) % besr.vid_nbufs;
4412
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1753 /*
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1754 buf3-5 always should point onto second buffer for better
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1755 deinterlacing and TV-in
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1756 */
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1757 if(!besr.double_buff) return 0;
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1758 if(frame > besr.vid_nbufs) frame = besr.vid_nbufs-1;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1759 if(prev_frame > (int)besr.vid_nbufs) prev_frame = besr.vid_nbufs-1;
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1760 off[0] = besr.vid_buf_base_adrs_y[frame];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1761 off[1] = besr.vid_buf_base_adrs_v[frame];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1762 off[2] = besr.vid_buf_base_adrs_u[frame];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1763 off[3] = besr.vid_buf_base_adrs_y[prev_frame];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1764 off[4] = besr.vid_buf_base_adrs_v[prev_frame];
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1765 off[5] = besr.vid_buf_base_adrs_u[prev_frame];
4855
f7f847e2d7c2 Minor fixes and probably final fix of vsync
nick
parents: 4689
diff changeset
1766 radeon_fifo_wait(8);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1767 OUTREG(OV0_REG_LOAD_CNTL, REG_LD_CTL_LOCK);
4666
a093bb34b723 - Shutdown capturing before playback
nick
parents: 4611
diff changeset
1768 radeon_engine_idle();
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1769 while(!(INREG(OV0_REG_LOAD_CNTL)&REG_LD_CTL_LOCK_READBACK));
4412
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1770 OUTREG(OV0_VID_BUF0_BASE_ADRS, off[0]);
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1771 OUTREG(OV0_VID_BUF1_BASE_ADRS, off[1]);
78878b1adb80 Correcting pointers on second buffer
nick
parents: 4373
diff changeset
1772 OUTREG(OV0_VID_BUF2_BASE_ADRS, off[2]);
4413
nick
parents: 4412
diff changeset
1773 OUTREG(OV0_VID_BUF3_BASE_ADRS, off[3]);
nick
parents: 4412
diff changeset
1774 OUTREG(OV0_VID_BUF4_BASE_ADRS, off[4]);
nick
parents: 4412
diff changeset
1775 OUTREG(OV0_VID_BUF5_BASE_ADRS, off[5]);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1776 OUTREG(OV0_REG_LOAD_CNTL, 0);
4930
a71ef1642a8a Multi-buffering
nick
parents: 4873
diff changeset
1777 if(besr.vid_nbufs == 2) radeon_wait_vsync();
4030
922241968c63 Embedding vidix
nick
parents: 4015
diff changeset
1778 if(__verbose > 1) radeon_vid_dump_regs();
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1779 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1780 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1781
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1782 vidix_video_eq_t equal =
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1783 {
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1784 VEQ_CAP_BRIGHTNESS | VEQ_CAP_SATURATION
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1785 #ifndef RAGE128
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1786 | VEQ_CAP_CONTRAST | VEQ_CAP_HUE | VEQ_CAP_RGB_INTENSITY
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1787 #endif
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1788 ,
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1789 0, 0, 0, 0, 0, 0, 0, 0 };
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1790
872781fef1b3 preliminary version
nick
parents:
diff changeset
1791 int vixPlaybackGetEq( vidix_video_eq_t * eq)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1792 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1793 memcpy(eq,&equal,sizeof(vidix_video_eq_t));
872781fef1b3 preliminary version
nick
parents:
diff changeset
1794 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1795 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1796
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1797 #ifndef RAGE128
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1798 #define RTFSaturation(a) (1.0 + ((a)*1.0)/1000.0)
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1799 #define RTFBrightness(a) (((a)*1.0)/2000.0)
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1800 #define RTFIntensity(a) (((a)*1.0)/2000.0)
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1801 #define RTFContrast(a) (1.0 + ((a)*1.0)/1000.0)
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1802 #define RTFHue(a) (((a)*3.1416)/1000.0)
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1803 #define RTFCheckParam(a) {if((a)<-1000) (a)=-1000; if((a)>1000) (a)=1000;}
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1804 #endif
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1805
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1806 int vixPlaybackSetEq( const vidix_video_eq_t * eq)
872781fef1b3 preliminary version
nick
parents:
diff changeset
1807 {
872781fef1b3 preliminary version
nick
parents:
diff changeset
1808 #ifdef RAGE128
872781fef1b3 preliminary version
nick
parents:
diff changeset
1809 int br,sat;
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1810 #else
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1811 int itu_space;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1812 #endif
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1813 if(eq->cap & VEQ_CAP_BRIGHTNESS) equal.brightness = eq->brightness;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1814 if(eq->cap & VEQ_CAP_CONTRAST) equal.contrast = eq->contrast;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1815 if(eq->cap & VEQ_CAP_SATURATION) equal.saturation = eq->saturation;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1816 if(eq->cap & VEQ_CAP_HUE) equal.hue = eq->hue;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1817 if(eq->cap & VEQ_CAP_RGB_INTENSITY)
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1818 {
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1819 equal.red_intensity = eq->red_intensity;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1820 equal.green_intensity = eq->green_intensity;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1821 equal.blue_intensity = eq->blue_intensity;
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1822 }
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1823 equal.flags = eq->flags;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1824 #ifdef RAGE128
872781fef1b3 preliminary version
nick
parents:
diff changeset
1825 br = equal.brightness * 64 / 1000;
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1826 if(br < -64) br = -64; if(br > 63) br = 63;
4230
7444f7901ae2 Fixed saturation computing for rage128
nick
parents: 4229
diff changeset
1827 sat = (equal.saturation + 1000) * 16 / 1000;
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1828 if(sat < 0) sat = 0; if(sat > 31) sat = 31;
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1829 OUTREG(OV0_COLOUR_CNTL, (br & 0x7f) | (sat << 8) | (sat << 16));
872781fef1b3 preliminary version
nick
parents:
diff changeset
1830 #else
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1831 itu_space = equal.flags == VEQ_FLG_ITU_R_BT_709 ? 1 : 0;
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1832 RTFCheckParam(equal.brightness);
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1833 RTFCheckParam(equal.saturation);
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1834 RTFCheckParam(equal.contrast);
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1835 RTFCheckParam(equal.hue);
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1836 RTFCheckParam(equal.red_intensity);
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1837 RTFCheckParam(equal.green_intensity);
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1838 RTFCheckParam(equal.blue_intensity);
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1839 radeon_set_transform(RTFBrightness(equal.brightness),
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1840 RTFContrast(equal.contrast),
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1841 RTFSaturation(equal.saturation),
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1842 RTFHue(equal.hue),
4319
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1843 RTFIntensity(equal.red_intensity),
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1844 RTFIntensity(equal.green_intensity),
2d64382e8dcf intense->intensity + capability extension + fixing R200 color correction bug
nick
parents: 4286
diff changeset
1845 RTFIntensity(equal.blue_intensity),
4229
9a33ad2f3547 gamma correction support
nick
parents: 4201
diff changeset
1846 itu_space);
3996
872781fef1b3 preliminary version
nick
parents:
diff changeset
1847 #endif
872781fef1b3 preliminary version
nick
parents:
diff changeset
1848 return 0;
872781fef1b3 preliminary version
nick
parents:
diff changeset
1849 }
872781fef1b3 preliminary version
nick
parents:
diff changeset
1850
4611
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1851 int vixPlaybackSetDeint( const vidix_deinterlace_t * info)
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1852 {
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1853 unsigned sflg;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1854 switch(info->flags)
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1855 {
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1856 default:
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1857 case CFG_NON_INTERLACED:
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1858 besr.deinterlace_on = 0;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1859 break;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1860 case CFG_EVEN_ODD_INTERLACING:
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1861 case CFG_INTERLACED:
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1862 besr.deinterlace_on = 1;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1863 besr.deinterlace_pattern = 0x900AAAAA;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1864 break;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1865 case CFG_ODD_EVEN_INTERLACING:
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1866 besr.deinterlace_on = 1;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1867 besr.deinterlace_pattern = 0x00055555;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1868 break;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1869 case CFG_UNIQUE_INTERLACING:
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1870 besr.deinterlace_on = 1;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1871 besr.deinterlace_pattern = info->deinterlace_pattern;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1872 break;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1873 }
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1874 OUTREG(OV0_REG_LOAD_CNTL, REG_LD_CTL_LOCK);
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1875 radeon_engine_idle();
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1876 while(!(INREG(OV0_REG_LOAD_CNTL)&REG_LD_CTL_LOCK_READBACK));
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1877 radeon_fifo_wait(15);
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1878 sflg = INREG(OV0_SCALE_CNTL);
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1879 if(besr.deinterlace_on)
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1880 {
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1881 OUTREG(OV0_SCALE_CNTL,sflg | SCALER_ADAPTIVE_DEINT);
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1882 OUTREG(OV0_DEINTERLACE_PATTERN,besr.deinterlace_pattern);
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1883 }
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1884 else OUTREG(OV0_SCALE_CNTL,sflg & (~SCALER_ADAPTIVE_DEINT));
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1885 OUTREG(OV0_REG_LOAD_CNTL, 0);
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1886 return 0;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1887 }
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1888
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1889 int vixPlaybackGetDeint( vidix_deinterlace_t * info)
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1890 {
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1891 if(!besr.deinterlace_on) info->flags = CFG_NON_INTERLACED;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1892 else
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1893 {
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1894 info->flags = CFG_UNIQUE_INTERLACING;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1895 info->deinterlace_pattern = besr.deinterlace_pattern;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1896 }
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1897 return 0;
7b793875a640 Get(Set) deinterlacing
nick
parents: 4571
diff changeset
1898 }
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1899
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1900
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1901 /* Graphic keys */
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1902 static vidix_grkey_t radeon_grkey;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1903
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1904 static void set_gr_key( void )
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1905 {
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1906 if(radeon_grkey.ckey.op == CKEY_TRUE)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1907 {
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1908 int dbpp=radeon_vid_get_dbpp();
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1909 besr.ckey_on=1;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1910
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1911 switch(dbpp)
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1912 {
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1913 case 15:
8856
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1914 #ifdef RADEON
8858
a6fc826a2b98 Fix support for Radeon 9000
arpi
parents: 8857
diff changeset
1915 if(RadeonFamily > 100)
8856
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1916 besr.graphics_key_clr=
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1917 ((radeon_grkey.ckey.blue &0xF8))
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1918 | ((radeon_grkey.ckey.green&0xF8)<<8)
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1919 | ((radeon_grkey.ckey.red &0xF8)<<16);
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1920 else
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1921 #endif
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1922 besr.graphics_key_clr=
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1923 ((radeon_grkey.ckey.blue &0xF8)>>3)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1924 | ((radeon_grkey.ckey.green&0xF8)<<2)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1925 | ((radeon_grkey.ckey.red &0xF8)<<7);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1926 break;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1927 case 16:
8856
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1928 #ifdef RADEON
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1929 /* This test may be too general/specific */
8858
a6fc826a2b98 Fix support for Radeon 9000
arpi
parents: 8857
diff changeset
1930 if(RadeonFamily > 100)
8856
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1931 besr.graphics_key_clr=
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1932 ((radeon_grkey.ckey.blue &0xF8))
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1933 | ((radeon_grkey.ckey.green&0xFC)<<8)
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1934 | ((radeon_grkey.ckey.red &0xF8)<<16);
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1935 else
b7d9b2c1faba Fix radeon 7500 and 8500 15- and 16-bit colour key
arpi
parents: 8855
diff changeset
1936 #endif
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1937 besr.graphics_key_clr=
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1938 ((radeon_grkey.ckey.blue &0xF8)>>3)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1939 | ((radeon_grkey.ckey.green&0xFC)<<3)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1940 | ((radeon_grkey.ckey.red &0xF8)<<8);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1941 break;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1942 case 24:
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1943 besr.graphics_key_clr=
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1944 ((radeon_grkey.ckey.blue &0xFF))
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1945 | ((radeon_grkey.ckey.green&0xFF)<<8)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1946 | ((radeon_grkey.ckey.red &0xFF)<<16);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1947 break;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1948 case 32:
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1949 besr.graphics_key_clr=
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1950 ((radeon_grkey.ckey.blue &0xFF))
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1951 | ((radeon_grkey.ckey.green&0xFF)<<8)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1952 | ((radeon_grkey.ckey.red &0xFF)<<16);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1953 break;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1954 default:
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1955 besr.ckey_on=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1956 besr.graphics_key_msk=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1957 besr.graphics_key_clr=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1958 }
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1959 #ifdef RAGE128
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1960 besr.graphics_key_msk=(1<<dbpp)-1;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1961 besr.ckey_cntl = VIDEO_KEY_FN_TRUE|GRAPHIC_KEY_FN_NE|CMP_MIX_AND;
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1962 #else
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1963 besr.graphics_key_msk=besr.graphics_key_clr;
8876
026ed72206ba patch which removes the rage_ckey_model fix and updates
arpi
parents: 8859
diff changeset
1964 besr.ckey_cntl = VIDEO_KEY_FN_TRUE|CMP_MIX_AND|GRAPHIC_KEY_FN_EQ;
6254
034b12194350 rage128/radeon fixes, mach64 mess^H^H^H^Hcleanup, pm3 driver.
arpi
parents: 5165
diff changeset
1965 #endif
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1966 }
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1967 else
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1968 {
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1969 besr.ckey_on=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1970 besr.graphics_key_msk=0;
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1971 besr.graphics_key_clr=0;
5044
43dc579db3d1 Fixed color key definitions. Waiting for new bugreports ;)
nick
parents: 5041
diff changeset
1972 besr.ckey_cntl = VIDEO_KEY_FN_TRUE|GRAPHIC_KEY_FN_TRUE|CMP_MIX_AND;
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1973 }
5044
43dc579db3d1 Fixed color key definitions. Waiting for new bugreports ;)
nick
parents: 5041
diff changeset
1974 radeon_fifo_wait(3);
4869
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1975 OUTREG(OV0_GRAPHICS_KEY_MSK, besr.graphics_key_msk);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1976 OUTREG(OV0_GRAPHICS_KEY_CLR, besr.graphics_key_clr);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1977 OUTREG(OV0_KEY_CNTL,besr.ckey_cntl);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1978 }
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1979
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1980 int vixGetGrKeys(vidix_grkey_t *grkey)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1981 {
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1982 memcpy(grkey, &radeon_grkey, sizeof(vidix_grkey_t));
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1983 return(0);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1984 }
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1985
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1986 int vixSetGrKeys(const vidix_grkey_t *grkey)
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1987 {
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1988 memcpy(&radeon_grkey, grkey, sizeof(vidix_grkey_t));
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1989 set_gr_key();
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1990 return(0);
15af74a11ce9 color key support
nick
parents: 4855
diff changeset
1991 }