1 /* -*- mesa-c++  -*-
2  *
3  * Copyright (c) 2018-2019 Collabora LTD
4  *
5  * Author: Gert Wollny <gert.wollny@collabora.com>
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * on the rights to use, copy, modify, merge, publish, distribute, sub
11  * license, and/or sell copies of the Software, and to permit persons to whom
12  * the Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice (including the next
15  * paragraph) shall be included in all copies or substantial portions of the
16  * Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24  * USE OR OTHER DEALINGS IN THE SOFTWARE.
25  */
26 
27 #ifndef sfn_defines_h
28 #define sfn_defines_h
29 
30 #include "../r600_isa.h"
31 #include "amd_family.h"
32 namespace r600 {
33 
34 
35 enum EGWSOpCode {
36         cf_sema_v = 0,
37         cf_sema_p = 1,
38         cf_gws_barrier = 2,
39         cf_gws_init = 3,
40 };
41 
42 /* CF ALU instructions [29:26], highest bit always set. */
43 enum ECFAluOpCode {
44         cf_alu_undefined = 0,
45         cf_alu = CF_OP_ALU,
46         cf_alu_push_before = CF_OP_ALU_PUSH_BEFORE,
47         cf_alu_pop_after = CF_OP_ALU_POP_AFTER,
48         cf_alu_pop2_after = CF_OP_ALU_POP2_AFTER,
49         cf_alu_extended = CF_OP_ALU_EXT,
50         cf_alu_continue = CF_OP_ALU_CONTINUE,
51         cf_alu_break = CF_OP_ALU_BREAK,
52         cf_alu_else_after = CF_OP_ALU_ELSE_AFTER,
53 };
54 
55 enum ECFAluOpCodeEG {
56         eg_cf_alu_undefined = 0,
57         eg_cf_alu = 8,
58         eg_cf_alu_push_before = 9,
59         eg_cf_alu_pop_after = 10,
60         eg_cf_alu_pop2_after = 11,
61         eg_cf_alu_extended = 12,
62         eg_cf_alu_continue = 13,
63         eg_cf_alu_break = 14,
64         eg_cf_alu_else_after = 15,
65 };
66 
67 
68 enum ECFOpCode {
69         cf_nop = CF_OP_NOP,
70         cf_tc = CF_OP_TEX,
71         cf_vc = CF_OP_VTX,
72         cf_gds = CF_OP_GDS,
73         cf_loop_start = CF_OP_LOOP_START,
74         cf_loop_end = CF_OP_LOOP_END,
75         cf_loop_start_dx10 = CF_OP_LOOP_START_DX10,
76         cf_loop_start_no_al = CF_OP_LOOP_START_NO_AL,
77         cf_loop_continue = CF_OP_LOOP_CONTINUE,
78         cf_loop_break = CF_OP_LOOP_BREAK,
79         cf_jump = CF_OP_JUMP,
80         cf_push = CF_OP_PUSH,
81         cf_else = CF_OP_ELSE,
82         cf_pop = CF_OP_POP,
83         /* 15 - 17 reserved */
84         cf_call = CF_OP_CALL,
85         cf_call_fs = CF_OP_CALL_FS,
86         cf_return = CF_OP_RET,
87         cf_emit_vertex = CF_OP_EMIT_VERTEX,
88         cf_emit_cut_vertex = CF_OP_EMIT_CUT_VERTEX,
89         cf_cut_vertex = CF_OP_CUT_VERTEX,
90         cf_kill = CF_OP_KILL,
91         /* 25 reserved */
92         cf_wait_ack = CF_OP_WAIT_ACK,
93         cf_tc_ack = CF_OP_TEX_ACK,
94         cf_vc_ack = CF_OP_VTX_ACK,
95         cf_jump_table = CF_OP_JUMPTABLE,
96         cf_global_wave_sync = CF_OP_WAVE_SYNC,
97         cf_halt = CF_OP_HALT,
98         /* gap 32-63*/
99         cf_mem_stream0_buf0 = CF_OP_MEM_STREAM0_BUF0,
100         cf_mem_stream0_buf1 = CF_OP_MEM_STREAM0_BUF1,
101         cf_mem_stream0_buf2 = CF_OP_MEM_STREAM0_BUF2,
102         cf_mem_stream0_buf3 = CF_OP_MEM_STREAM0_BUF3,
103 
104         cf_mem_stream1_buf0 = CF_OP_MEM_STREAM1_BUF0,
105         cf_mem_stream1_buf1 = CF_OP_MEM_STREAM1_BUF1,
106         cf_mem_stream1_buf2 = CF_OP_MEM_STREAM1_BUF2,
107         cf_mem_stream1_buf3 = CF_OP_MEM_STREAM1_BUF3,
108 
109         cf_mem_stream2_buf0 = CF_OP_MEM_STREAM2_BUF0,
110         cf_mem_stream2_buf1 = CF_OP_MEM_STREAM2_BUF1,
111         cf_mem_stream2_buf2 = CF_OP_MEM_STREAM2_BUF2,
112         cf_mem_stream2_buf3 = CF_OP_MEM_STREAM2_BUF3,
113 
114         cf_mem_stream3_buf0 = CF_OP_MEM_STREAM3_BUF0,
115         cf_mem_stream3_buf1 = CF_OP_MEM_STREAM3_BUF1,
116         cf_mem_stream3_buf2 = CF_OP_MEM_STREAM3_BUF2,
117         cf_mem_stream3_buf3 = CF_OP_MEM_STREAM3_BUF3,
118 
119         cf_mem_write_scratch = CF_OP_MEM_SCRATCH ,
120         /* reserved 81 */
121         cf_mem_ring = CF_OP_MEM_RING,
122         cf_export = CF_OP_EXPORT,
123         cf_export_done = CF_OP_EXPORT_DONE,
124         cf_mem_export = CF_OP_MEM_EXPORT,
125         cf_mem_rat = CF_OP_MEM_RAT,
126         cf_mem_rat_cacheless = CF_OP_MEM_RAT_NOCACHE,
127 
128         cf_mem_ring1 = CF_OP_MEM_RING1,
129         cf_mem_ring2 = CF_OP_MEM_RING2,
130         cf_mem_ring3 = CF_OP_MEM_RING3,
131         cf_mem_export_combined = CF_OP_MEM_MEM_COMBINED,
132         cf_mem_rat_combined_cacheless = CF_OP_MEM_RAT_COMBINED_NOCACHE
133 
134 };
135 
136 enum ECFOpCodeEG {
137         eg_cf_nop = 0,
138         eg_cf_tc = 1,
139         eg_cf_vc = 2,
140         eg_cf_gds = 3,
141         eg_cf_loop_start = 4,
142         eg_cf_loop_end = 5,
143         eg_cf_loop_start_dx10 = 6,
144         eg_cf_loop_start_no_al = 7,
145         eg_cf_loop_continue = 8,
146         eg_cf_loop_break = 9,
147         eg_cf_jump = 10,
148         eg_cf_push = 11,
149         eg_cf_else = 13,
150         eg_cf_pop = 14,
151         /* 15 - 17 reserved */
152         eg_cf_call = 18,
153         eg_cf_call_fs,
154         eg_cf_return,
155         eg_cf_emit_vertex,
156         eg_cf_emit_cut_vertex,
157         eg_cf_cut_vertex,
158         eg_cf_kill,
159         /* 25 reserved */
160         eg_cf_wait_ack = 26,
161         eg_cf_tc_ack,
162         eg_cf_vc_ack,
163         eg_cf_jump_table,
164         eg_cf_global_wave_sync,
165         eg_cf_halt,
166         /* gap 32-63*/
167         eg_cf_mem_stream0_buf0 = 64,
168         eg_cf_mem_stream0_buf1,
169         eg_cf_mem_stream0_buf2,
170         eg_cf_mem_stream0_buf3,
171 
172         eg_cf_mem_stream1_buf0,
173         eg_cf_mem_stream1_buf1,
174         eg_cf_mem_stream1_buf2,
175         eg_cf_mem_stream1_buf3,
176 
177         eg_cf_mem_stream2_buf0,
178         eg_cf_mem_stream2_buf1,
179         eg_cf_mem_stream2_buf2,
180         eg_cf_mem_stream2_buf3,
181 
182         eg_cf_mem_stream3_buf0,
183         eg_cf_mem_stream3_buf1,
184         eg_cf_mem_stream3_buf2,
185         eg_cf_mem_stream3_buf3,
186 
187         eg_cf_mem_write_scratch,
188         /* reserved 81 */
189         eg_cf_mem_ring = 82,
190         eg_cf_export,
191         eg_cf_export_done,
192         eg_cf_mem_export,
193         eg_cf_mem_rat,
194         eg_cf_mem_rat_cacheless,
195 
196         eg_cf_mem_ring1,
197         eg_cf_mem_ring2,
198         eg_cf_mem_ring3,
199         eg_cf_mem_export_combined,
200         eg_cf_mem_rat_combined_cacheless
201 };
202 
203 
204 enum EVFetchInstr {
205    vc_fetch = FETCH_OP_VFETCH,
206    vc_semantic = FETCH_OP_SEMFETCH,
207    vc_get_buf_resinfo = FETCH_OP_GET_BUFFER_RESINFO,
208    vc_read_scratch = FETCH_OP_READ_SCRATCH,
209    vc_unknown
210 };
211 
212 enum EVFetchType {
213    vertex_data = 0,
214    instance_data = 1,
215    no_index_offset = 2
216 };
217 
218 enum EVTXDataFormat {
219    fmt_invalid = 0,
220    fmt_8 = 1,
221    fmt_4_4 = 2,
222    fmt_3_3_2 = 3,
223    fmt_reserved_4 = 4,
224    fmt_16 = 5,
225    fmt_16_float = 6,
226    fmt_8_8 = 7,
227    fmt_5_6_5 = 8,
228    fmt_6_5_5 = 9,
229    fmt_1_5_5_5 = 10,
230    fmt_4_4_4_4 = 11,
231    fmt_5_5_5_1 = 12,
232    fmt_32 = 13,
233    fmt_32_float = 14,
234    fmt_16_16 = 15,
235    fmt_16_16_float = 16,
236    fmt_8_24 = 17,
237    fmt_8_24_float = 18,
238    fmt_24_8 = 19,
239    fmt_24_8_float = 20,
240    fmt_10_11_11 = 21,
241    fmt_10_11_11_float = 22,
242    fmt_11_11_10 = 23,
243    fmt_11_11_10_float = 24,
244    fmt_2_10_10_10 = 25,
245    fmt_8_8_8_8 = 26,
246    fmt_10_10_10_2 = 27,
247    fmt_x24_8_32_float = 28,
248    fmt_32_32 = 29,
249    fmt_32_32_float = 30,
250    fmt_16_16_16_16 = 31,
251    fmt_16_16_16_16_float = 32,
252    fmt_reserved_33 = 33,
253    fmt_32_32_32_32 = 34,
254    fmt_32_32_32_32_float = 35,
255    fmt_reserved_36 = 36,
256    fmt_1 = 37,
257    fmt_1_reversed = 38,
258    fmt_gb_gr = 39,
259    fmt_bg_rg = 40,
260    fmt_32_as_8 = 41,
261    fmt_32_as_8_8 = 42,
262    fmt_5_9_9_9_sharedexp = 43,
263    fmt_8_8_8 = 44,
264    fmt_16_16_16 = 45,
265    fmt_16_16_16_float = 46,
266    fmt_32_32_32 = 47,
267    fmt_32_32_32_float = 48,
268    fmt_bc1 = 49,
269    fmt_bc2 = 50,
270    fmt_bc3 = 51,
271    fmt_bc4 = 52,
272    fmt_bc5 = 53,
273    fmt_apc0 = 54,
274    fmt_apc1 = 55,
275    fmt_apc2 = 56,
276    fmt_apc3 = 57,
277    fmt_apc4 = 58,
278    fmt_apc5 = 59,
279    fmt_apc6 = 60,
280    fmt_apc7 = 61,
281    fmt_ctx1 = 62,
282    fmt_reserved_63 = 63
283 };
284 
285 enum EVFetchNumFormat {
286    vtx_nf_norm = 0,
287    vtx_nf_int = 1,
288    vtx_nf_scaled = 2
289 };
290 
291 enum EVFetchEndianSwap {
292    vtx_es_none = 0,
293    vtx_es_8in16 = 1,
294    vtx_es_8in32 = 2
295 };
296 
297 enum EVFetchFlagShift {
298    vtx_fetch_whole_quad,
299    vtx_use_const_field,
300    vtx_format_comp_signed,
301    vtx_srf_mode,
302    vtx_buf_no_stride,
303    vtx_alt_const,
304    vtx_use_tc,
305    vtx_vpm,
306    vtx_unknown
307 };
308 
309 enum EBufferIndexMode {
310    bim_none,
311    bim_zero,
312    bim_one,
313    bim_invalid
314 };
315 
316 }
317 
318 #endif // DEFINES_H
319