Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/gpu/drm/radeon/evergreen_blit_shaders.c
15112 views
1
/*
2
* Copyright 2010 Advanced Micro Devices, Inc.
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
13
* Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE COPYRIGHT HOLDER(S) AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
* DEALINGS IN THE SOFTWARE.
22
*
23
* Authors:
24
* Alex Deucher <[email protected]>
25
*/
26
27
#include <linux/types.h>
28
#include <linux/kernel.h>
29
30
/*
31
* evergreen cards need to use the 3D engine to blit data which requires
32
* quite a bit of hw state setup. Rather than pull the whole 3D driver
33
* (which normally generates the 3D state) into the DRM, we opt to use
34
* statically generated state tables. The regsiter state and shaders
35
* were hand generated to support blitting functionality. See the 3D
36
* driver or documentation for descriptions of the registers and
37
* shader instructions.
38
*/
39
40
const u32 evergreen_default_state[] =
41
{
42
0xc0016900,
43
0x0000023b,
44
0x00000000, /* SQ_LDS_ALLOC_PS */
45
46
0xc0066900,
47
0x00000240,
48
0x00000000, /* SQ_ESGS_RING_ITEMSIZE */
49
0x00000000,
50
0x00000000,
51
0x00000000,
52
0x00000000,
53
0x00000000,
54
55
0xc0046900,
56
0x00000247,
57
0x00000000, /* SQ_GS_VERT_ITEMSIZE */
58
0x00000000,
59
0x00000000,
60
0x00000000,
61
62
0xc0026900,
63
0x00000010,
64
0x00000000, /* DB_Z_INFO */
65
0x00000000, /* DB_STENCIL_INFO */
66
67
0xc0016900,
68
0x00000200,
69
0x00000000, /* DB_DEPTH_CONTROL */
70
71
0xc0066900,
72
0x00000000,
73
0x00000060, /* DB_RENDER_CONTROL */
74
0x00000000, /* DB_COUNT_CONTROL */
75
0x00000000, /* DB_DEPTH_VIEW */
76
0x0000002a, /* DB_RENDER_OVERRIDE */
77
0x00000000, /* DB_RENDER_OVERRIDE2 */
78
0x00000000, /* DB_HTILE_DATA_BASE */
79
80
0xc0026900,
81
0x0000000a,
82
0x00000000, /* DB_STENCIL_CLEAR */
83
0x00000000, /* DB_DEPTH_CLEAR */
84
85
0xc0016900,
86
0x000002dc,
87
0x0000aa00, /* DB_ALPHA_TO_MASK */
88
89
0xc0016900,
90
0x00000080,
91
0x00000000, /* PA_SC_WINDOW_OFFSET */
92
93
0xc00d6900,
94
0x00000083,
95
0x0000ffff, /* PA_SC_CLIPRECT_RULE */
96
0x00000000, /* PA_SC_CLIPRECT_0_TL */
97
0x20002000, /* PA_SC_CLIPRECT_0_BR */
98
0x00000000,
99
0x20002000,
100
0x00000000,
101
0x20002000,
102
0x00000000,
103
0x20002000,
104
0xaaaaaaaa, /* PA_SC_EDGERULE */
105
0x00000000, /* PA_SU_HARDWARE_SCREEN_OFFSET */
106
0x0000000f, /* CB_TARGET_MASK */
107
0x0000000f, /* CB_SHADER_MASK */
108
109
0xc0226900,
110
0x00000094,
111
0x80000000, /* PA_SC_VPORT_SCISSOR_0_TL */
112
0x20002000, /* PA_SC_VPORT_SCISSOR_0_BR */
113
0x80000000,
114
0x20002000,
115
0x80000000,
116
0x20002000,
117
0x80000000,
118
0x20002000,
119
0x80000000,
120
0x20002000,
121
0x80000000,
122
0x20002000,
123
0x80000000,
124
0x20002000,
125
0x80000000,
126
0x20002000,
127
0x80000000,
128
0x20002000,
129
0x80000000,
130
0x20002000,
131
0x80000000,
132
0x20002000,
133
0x80000000,
134
0x20002000,
135
0x80000000,
136
0x20002000,
137
0x80000000,
138
0x20002000,
139
0x80000000,
140
0x20002000,
141
0x80000000,
142
0x20002000,
143
0x00000000, /* PA_SC_VPORT_ZMIN_0 */
144
0x3f800000, /* PA_SC_VPORT_ZMAX_0 */
145
146
0xc0016900,
147
0x000000d4,
148
0x00000000, /* SX_MISC */
149
150
0xc0026900,
151
0x00000292,
152
0x00000000, /* PA_SC_MODE_CNTL_0 */
153
0x00000000, /* PA_SC_MODE_CNTL_1 */
154
155
0xc0106900,
156
0x00000300,
157
0x00000000, /* PA_SC_LINE_CNTL */
158
0x00000000, /* PA_SC_AA_CONFIG */
159
0x00000005, /* PA_SU_VTX_CNTL */
160
0x3f800000, /* PA_CL_GB_VERT_CLIP_ADJ */
161
0x3f800000, /* PA_CL_GB_VERT_DISC_ADJ */
162
0x3f800000, /* PA_CL_GB_HORZ_CLIP_ADJ */
163
0x3f800000, /* PA_CL_GB_HORZ_DISC_ADJ */
164
0x00000000, /* PA_SC_AA_SAMPLE_LOCS_0 */
165
0x00000000, /* */
166
0x00000000, /* */
167
0x00000000, /* */
168
0x00000000, /* */
169
0x00000000, /* */
170
0x00000000, /* */
171
0x00000000, /* PA_SC_AA_SAMPLE_LOCS_7 */
172
0xffffffff, /* PA_SC_AA_MASK */
173
174
0xc00d6900,
175
0x00000202,
176
0x00cc0010, /* CB_COLOR_CONTROL */
177
0x00000210, /* DB_SHADER_CONTROL */
178
0x00010000, /* PA_CL_CLIP_CNTL */
179
0x00000004, /* PA_SU_SC_MODE_CNTL */
180
0x00000100, /* PA_CL_VTE_CNTL */
181
0x00000000, /* PA_CL_VS_OUT_CNTL */
182
0x00000000, /* PA_CL_NANINF_CNTL */
183
0x00000000, /* PA_SU_LINE_STIPPLE_CNTL */
184
0x00000000, /* PA_SU_LINE_STIPPLE_SCALE */
185
0x00000000, /* PA_SU_PRIM_FILTER_CNTL */
186
0x00000000, /* */
187
0x00000000, /* */
188
0x00000000, /* SQ_DYN_GPR_RESOURCE_LIMIT_1 */
189
190
0xc0066900,
191
0x000002de,
192
0x00000000, /* PA_SU_POLY_OFFSET_DB_FMT_CNTL */
193
0x00000000, /* */
194
0x00000000, /* */
195
0x00000000, /* */
196
0x00000000, /* */
197
0x00000000, /* */
198
199
0xc0016900,
200
0x00000229,
201
0x00000000, /* SQ_PGM_START_FS */
202
203
0xc0016900,
204
0x0000022a,
205
0x00000000, /* SQ_PGM_RESOURCES_FS */
206
207
0xc0096900,
208
0x00000100,
209
0x00ffffff, /* VGT_MAX_VTX_INDX */
210
0x00000000, /* */
211
0x00000000, /* */
212
0x00000000, /* */
213
0x00000000, /* SX_ALPHA_TEST_CONTROL */
214
0x00000000, /* CB_BLEND_RED */
215
0x00000000, /* CB_BLEND_GREEN */
216
0x00000000, /* CB_BLEND_BLUE */
217
0x00000000, /* CB_BLEND_ALPHA */
218
219
0xc0026900,
220
0x000002a8,
221
0x00000000, /* VGT_INSTANCE_STEP_RATE_0 */
222
0x00000000, /* */
223
224
0xc0026900,
225
0x000002ad,
226
0x00000000, /* VGT_REUSE_OFF */
227
0x00000000, /* */
228
229
0xc0116900,
230
0x00000280,
231
0x00000000, /* PA_SU_POINT_SIZE */
232
0x00000000, /* PA_SU_POINT_MINMAX */
233
0x00000008, /* PA_SU_LINE_CNTL */
234
0x00000000, /* PA_SC_LINE_STIPPLE */
235
0x00000000, /* VGT_OUTPUT_PATH_CNTL */
236
0x00000000, /* VGT_HOS_CNTL */
237
0x00000000, /* */
238
0x00000000, /* */
239
0x00000000, /* */
240
0x00000000, /* */
241
0x00000000, /* */
242
0x00000000, /* */
243
0x00000000, /* */
244
0x00000000, /* */
245
0x00000000, /* */
246
0x00000000, /* */
247
0x00000000, /* VGT_GS_MODE */
248
249
0xc0016900,
250
0x000002a1,
251
0x00000000, /* VGT_PRIMITIVEID_EN */
252
253
0xc0016900,
254
0x000002a5,
255
0x00000000, /* VGT_MULTI_PRIM_IB_RESET_EN */
256
257
0xc0016900,
258
0x000002d5,
259
0x00000000, /* VGT_SHADER_STAGES_EN */
260
261
0xc0026900,
262
0x000002e5,
263
0x00000000, /* VGT_STRMOUT_CONFIG */
264
0x00000000, /* */
265
266
0xc0016900,
267
0x000001e0,
268
0x00000000, /* CB_BLEND0_CONTROL */
269
270
0xc0016900,
271
0x000001b1,
272
0x00000000, /* SPI_VS_OUT_CONFIG */
273
274
0xc0016900,
275
0x00000187,
276
0x00000000, /* SPI_VS_OUT_ID_0 */
277
278
0xc0016900,
279
0x00000191,
280
0x00000100, /* SPI_PS_INPUT_CNTL_0 */
281
282
0xc00b6900,
283
0x000001b3,
284
0x20000001, /* SPI_PS_IN_CONTROL_0 */
285
0x00000000, /* SPI_PS_IN_CONTROL_1 */
286
0x00000000, /* SPI_INTERP_CONTROL_0 */
287
0x00000000, /* SPI_INPUT_Z */
288
0x00000000, /* SPI_FOG_CNTL */
289
0x00100000, /* SPI_BARYC_CNTL */
290
0x00000000, /* SPI_PS_IN_CONTROL_2 */
291
0x00000000, /* */
292
0x00000000, /* */
293
0x00000000, /* */
294
0x00000000, /* */
295
296
0xc0026900,
297
0x00000316,
298
0x0000000e, /* VGT_VERTEX_REUSE_BLOCK_CNTL */
299
0x00000010, /* */
300
};
301
302
const u32 evergreen_vs[] =
303
{
304
0x00000004,
305
0x80800400,
306
0x0000a03c,
307
0x95000688,
308
0x00004000,
309
0x15200688,
310
0x00000000,
311
0x00000000,
312
0x3c000000,
313
0x67961001,
314
#ifdef __BIG_ENDIAN
315
0x000a0000,
316
#else
317
0x00080000,
318
#endif
319
0x00000000,
320
0x1c000000,
321
0x67961000,
322
#ifdef __BIG_ENDIAN
323
0x00020008,
324
#else
325
0x00000008,
326
#endif
327
0x00000000,
328
};
329
330
const u32 evergreen_ps[] =
331
{
332
0x00000003,
333
0xa00c0000,
334
0x00000008,
335
0x80400000,
336
0x00000000,
337
0x95200688,
338
0x00380400,
339
0x00146b10,
340
0x00380000,
341
0x20146b10,
342
0x00380400,
343
0x40146b00,
344
0x80380000,
345
0x60146b00,
346
0x00000000,
347
0x00000000,
348
0x00000010,
349
0x000d1000,
350
0xb0800000,
351
0x00000000,
352
};
353
354
const u32 evergreen_ps_size = ARRAY_SIZE(evergreen_ps);
355
const u32 evergreen_vs_size = ARRAY_SIZE(evergreen_vs);
356
const u32 evergreen_default_size = ARRAY_SIZE(evergreen_default_state);
357
358