1de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse/* 2de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Copyright 2010 Jerome Glisse <glisse@freedesktop.org> 3de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * 4de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a 5de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * copy of this software and associated documentation files (the "Software"), 6de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * to deal in the Software without restriction, including without limitation 7de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * on the rights to use, copy, modify, merge, publish, distribute, sub 8de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * license, and/or sell copies of the Software, and to permit persons to whom 9de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * the Software is furnished to do so, subject to the following conditions: 10de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * 11de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * The above copyright notice and this permission notice (including the next 12de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * paragraph) shall be included in all copies or substantial portions of the 13de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Software. 14de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * 15de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 19de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 21de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * USE OR OTHER DEALINGS IN THE SOFTWARE. 22de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse */ 23de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#ifndef R600_ASM_H 24de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#define R600_ASM_H 25de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 26555c8d500a4a09445a892316610a428d408318edMarek Olšák#include "r600_pipe.h" 27022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin#include "r600_isa.h" 28fa86fc564aea4e40c89f6fc889e6a5bf817634b3Jerome Glisse 294a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu_src { 30de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned sel; 31de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned chan; 32de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned neg; 33de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned abs; 3447d5a19df1e7760c4f5f0e340bfc56355c2e428bDave Airlie unsigned rel; 35d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin unsigned kc_bank; 367b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard unsigned kc_rel; 37a77e813de32643ae2dfffd7ad12abed596172cabHenri Verbeet uint32_t value; 38de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 39de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 404a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu_dst { 41de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned sel; 42de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned chan; 43de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned clamp; 44de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned write; 4547d5a19df1e7760c4f5f0e340bfc56355c2e428bDave Airlie unsigned rel; 46de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 47de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 484a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu { 49de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse struct list_head list; 504a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_alu_src src[3]; 514a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_alu_dst dst; 52022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin unsigned op; 53de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned last; 54de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned is_op3; 55816bb30245b9e4be78cc24228ada450a425b948dDave Airlie unsigned is_lds_idx_op; 56da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune unsigned execute_mask; 57da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune unsigned update_pred; 58da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune unsigned pred_sel; 59e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse unsigned bank_swizzle; 60e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse unsigned bank_swizzle_force; 61c60cb25bfb15fc83e78d9f2c74646dcc5ad07792Christian König unsigned omod; 62c96b9834032952492efbd2d1f5511fe225704918Dave Airlie unsigned index_mode; 63816bb30245b9e4be78cc24228ada450a425b948dDave Airlie unsigned lds_idx; 64de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 65de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 664a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_tex { 6733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse struct list_head list; 68022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin unsigned op; 6996ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák unsigned inst_mod; 7033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned resource_id; 7133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned src_gpr; 7233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned src_rel; 7333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned dst_gpr; 7433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned dst_rel; 7533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned dst_sel_x; 7633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned dst_sel_y; 7733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned dst_sel_z; 7833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned dst_sel_w; 7933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned lod_bias; 8033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned coord_type_x; 8133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned coord_type_y; 8233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned coord_type_z; 8333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned coord_type_w; 84fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie int offset_x; 85fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie int offset_y; 86fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie int offset_z; 8733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned sampler_id; 8833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned src_sel_x; 8933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned src_sel_y; 9033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned src_sel_z; 9133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse unsigned src_sel_w; 927b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard /* indexed samplers/resources only on evergreen/cayman */ 937b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard unsigned sampler_index_mode; 947b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard unsigned resource_index_mode; 9533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse}; 9633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse 974a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_vtx { 98de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse struct list_head list; 99022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin unsigned op; 100de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned fetch_type; 101de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned buffer_id; 102de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned src_gpr; 103de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned src_sel_x; 104de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned mega_fetch_count; 105de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned dst_gpr; 106de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned dst_sel_x; 107de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned dst_sel_y; 108de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned dst_sel_z; 109de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned dst_sel_w; 110e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie unsigned use_const_fields; 111e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie unsigned data_format; 112e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie unsigned num_format_all; 113e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie unsigned format_comp_all; 114e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie unsigned srf_mode_all; 11596bbc627f369c0100b950f81531b1fe9ef586c34Christian König unsigned offset; 116843dfe3206c4f397c7911b748373dde5540392a4Cédric Cano unsigned endian; 1177b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard unsigned buffer_index_mode; 118de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 119de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 1202b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airliestruct r600_bytecode_gds { 1212b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie struct list_head list; 1222b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned op; 1232b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned gds_op; 1242b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned src_gpr; 1252b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned src_rel; 1262b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned src_sel_x; 1272b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned src_sel_y; 1282b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned src_sel_z; 1292b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned src_gpr2; 1302b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned dst_gpr; 1312b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned dst_rel; 1322b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned dst_sel_x; 1332b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned dst_sel_y; 1342b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned dst_sel_z; 1352b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie unsigned dst_sel_w; 1362b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie}; 1372b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie 1384a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_output { 139de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned array_base; 140543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák unsigned array_size; 141543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák unsigned comp_mask; 142de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned type; 1434f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák 144022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin unsigned op; 1454f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák 146de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned elem_size; 147de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned gpr; 148de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned swizzle_x; 149de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned swizzle_y; 150de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned swizzle_z; 151de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned swizzle_w; 1528ca3b140eb53fd8063337a5a2a54a35987d597bcChristian König unsigned burst_count; 153ae29a098eaaa9f061cc82a28b8e258e44f03902bDave Airlie unsigned index_gpr; 154de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 155de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 1564a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_kcache { 1578273921b7a41251f3f5a87df995913cb291902caHenri Verbeet unsigned bank; 1588273921b7a41251f3f5a87df995913cb291902caHenri Verbeet unsigned mode; 1598273921b7a41251f3f5a87df995913cb291902caHenri Verbeet unsigned addr; 1607b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard unsigned index_mode; 1618273921b7a41251f3f5a87df995913cb291902caHenri Verbeet}; 1628273921b7a41251f3f5a87df995913cb291902caHenri Verbeet 1634a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_cf { 164de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse struct list_head list; 1654f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák 166022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin unsigned op; 167de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned addr; 168de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned ndw; 169de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned id; 170e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse unsigned cond; 171e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse unsigned pop_count; 172d503bbbf3082b5b301019721466d6fd2b41da03aDave Airlie unsigned count; 173e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse unsigned cf_addr; /* control flow addr */ 174d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin struct r600_bytecode_kcache kcache[4]; 175c5edfcc410bdf3dbe4f37418de8f0009746c9578Dave Airlie unsigned r6xx_uses_waterfall; 176d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin unsigned eg_alu_extended; 177552aae7e47e93ada58649a92ae9e7da37afb05c3Vadim Girlin unsigned barrier; 178552aae7e47e93ada58649a92ae9e7da37afb05c3Vadim Girlin unsigned end_of_program; 179de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse struct list_head alu; 18033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse struct list_head tex; 181de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse struct list_head vtx; 1822b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie struct list_head gds; 1834a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_output output; 1844a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_alu *curr_bs_head; 1854a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_alu *prev_bs_head; 1864a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_alu *prev2_bs_head; 18794a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard unsigned isa[2]; 188de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 189de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 1907ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_NONE 0 1917ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_IF 1 1927ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_LOOP 2 1937ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_REP 3 1947ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_VPM 4 1957ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_WQM 5 196a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airlie 197a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airliestruct r600_cf_stack_entry { 198e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse int type; 1994a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_cf *start; 2004a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_cf **mid; /* used to store the else point */ 201e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse int num_mid; 20209547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie}; 20309547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie 20409547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie#define SQ_MAX_CALL_DEPTH 0x00000020 2057ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse 206c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_NORMAL 0 207c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_RV6XX 1 /* except RV670 */ 208c96b9834032952492efbd2d1f5511fe225704918Dave Airlie 2099be624b3ef32ae6311010cf05531e12051b647dcVadim Girlinstruct r600_stack_info { 2109be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin /* current level of non-WQM PUSH operations 2119be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin * (PUSH, PUSH_ELSE, ALU_PUSH_BEFORE) */ 2129be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin int push; 2139be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin /* current level of WQM PUSH operations 2149be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin * (PUSH, PUSH_ELSE, PUSH_WQM) */ 2159be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin int push_wqm; 2169be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin /* current loop level */ 2179be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin int loop; 2189be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin 2199be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin /* required depth */ 2209be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin int max_entries; 2219be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin /* subentries per entry */ 2229be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin int entry_size; 2239be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin}; 224c96b9834032952492efbd2d1f5511fe225704918Dave Airlie 2254a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode { 22689dc31a28d8e5607989ec11cfd29310c1c97f6acHenri Verbeet enum chip_class chip_class; 227476aaf8b8ee77d84c295e1429035e92ecf3a7349Christoph Bumiller enum radeon_family family; 2285a3fac4d2667b5d46058564151142fec158f5f82Marek Olšák bool has_compressed_msaa_texturing; 229f609b2ab0342d77a8beca9efb5fbc5b66ff98295Jerome Glisse int type; 230de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse struct list_head cf; 2314a47662beaa2092447939db7880531fb706afeddMarek Olšák struct r600_bytecode_cf *cf_last; 232de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned ndw; 233de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned ncf; 234de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned ngpr; 235e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse unsigned nstack; 2362840bec56f79347b95dec5458b20d4a46d1aa445Tom Stellard unsigned nlds_dw; 237de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse unsigned nresource; 2387e42b7e5d2aebcda0e6bf081b6661411731e6df2Jerome Glisse unsigned force_add_cf; 23978293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák uint32_t *bytecode; 24078293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák uint32_t fc_sp; 241e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse struct r600_cf_stack_entry fc_stack[32]; 2429be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin struct r600_stack_info stack; 2438e366dc365d01213b71b87ace47d30938db74845Vadim Girlin unsigned ar_loaded; 2448e366dc365d01213b71b87ace47d30938db74845Vadim Girlin unsigned ar_reg; 24533dc412b8901ec6b693644a40b1cd62a2cde2e99Tom Stellard unsigned ar_chan; 246c96b9834032952492efbd2d1f5511fe225704918Dave Airlie unsigned ar_handling; 247c96b9834032952492efbd2d1f5511fe225704918Dave Airlie unsigned r6xx_nop_after_rel_dst; 248e1dcd333e4e0757f3fd2b010bc14b36340b70c39Jan Vesely bool index_loaded[2]; 249e1dcd333e4e0757f3fd2b010bc14b36340b70c39Jan Vesely unsigned index_reg[2]; /* indexing register CF_INDEX_[01] */ 250ad1df471d083630106da8c39ec076f49e779e965Vadim Girlin unsigned debug_id; 251022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin struct r600_isa* isa; 252de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse}; 253de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse 2546abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* eg_asm.c */ 2554a47662beaa2092447939db7880531fb706afeddMarek Olšákint eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf); 2567b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennardint egcm_load_index_reg(struct r600_bytecode *bc, unsigned id, bool inside_alu_clause); 2572b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlieint eg_bytecode_gds_build(struct r600_bytecode *bc, struct r600_bytecode_gds *gds, unsigned id); 258816bb30245b9e4be78cc24228ada450a425b948dDave Airlieint eg_bytecode_alu_build(struct r600_bytecode *bc, 259816bb30245b9e4be78cc24228ada450a425b948dDave Airlie struct r600_bytecode_alu *alu, unsigned id); 2606abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r600_asm.c */ 26196ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšákvoid r600_bytecode_init(struct r600_bytecode *bc, 26296ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák enum chip_class chip_class, 26396ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák enum radeon_family family, 2645a3fac4d2667b5d46058564151142fec158f5f82Marek Olšák bool has_compressed_msaa_texturing); 2654a47662beaa2092447939db7880531fb706afeddMarek Olšákvoid r600_bytecode_clear(struct r600_bytecode *bc); 266022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_alu(struct r600_bytecode *bc, 267022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin const struct r600_bytecode_alu *alu); 268022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_vtx(struct r600_bytecode *bc, 269022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin const struct r600_bytecode_vtx *vtx); 270022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_tex(struct r600_bytecode *bc, 271022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin const struct r600_bytecode_tex *tex); 2722b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlieint r600_bytecode_add_gds(struct r600_bytecode *bc, 2732b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie const struct r600_bytecode_gds *gds); 274022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_output(struct r600_bytecode *bc, 275022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin const struct r600_bytecode_output *output); 2764a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_build(struct r600_bytecode *bc); 277af38695f5105a2f766f3df393c3e42067c3706f2Vincent Lejeuneint r600_bytecode_add_cf(struct r600_bytecode *bc); 278022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_cfinst(struct r600_bytecode *bc, 279022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin unsigned op); 280022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_alu_type(struct r600_bytecode *bc, 281022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin const struct r600_bytecode_alu *alu, unsigned type); 282022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_special_constants(uint32_t value, 283f75f21a24ae2dd83507f3d4d8007f0fcfe6db802Ivan Kalvachev unsigned *sel, unsigned *neg, unsigned abs); 284e42111ecbaca8b6dab3c8a7a8cbc295bb6b404ebVadim Girlinvoid r600_bytecode_disasm(struct r600_bytecode *bc); 285022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_alu_read(struct r600_bytecode *bc, 286022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin struct r600_bytecode_alu *alu, uint32_t word0, uint32_t word1); 2874a47662beaa2092447939db7880531fb706afeddMarek Olšák 2884a47662beaa2092447939db7880531fb706afeddMarek Olšákint cm_bytecode_add_cf_end(struct r600_bytecode *bc); 2897779f6d1dffde2c0501e44adc342e52803de08d4Dave Airlie 290a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšákvoid *r600_create_vertex_fetch_shader(struct pipe_context *ctx, 291a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšák unsigned count, 292a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšák const struct pipe_vertex_element *elements); 293e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse 2946abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r700_asm.c */ 295022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r700_bytecode_cf_vtx_build(uint32_t *bytecode, 296022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin const struct r600_bytecode_cf *cf); 297022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r700_bytecode_alu_build(struct r600_bytecode *bc, 298022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin struct r600_bytecode_alu *alu, unsigned id); 299022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r700_bytecode_alu_read(struct r600_bytecode *bc, 300022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin struct r600_bytecode_alu *alu, uint32_t word0, uint32_t word1); 301022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_export_read(struct r600_bytecode *bc, 302022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin struct r600_bytecode_output *output, uint32_t word0, uint32_t word1); 303022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid eg_bytecode_export_read(struct r600_bytecode *bc, 304022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin struct r600_bytecode_output *output, uint32_t word0, uint32_t word1); 3056abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse 306d23aa650015ec017649f5a4ce8cb12d8c314bd3aDave Airlievoid r600_vertex_data_type(enum pipe_format pformat, unsigned *format, 307d23aa650015ec017649f5a4ce8cb12d8c314bd3aDave Airlie unsigned *num_format, unsigned *format_comp, unsigned *endian); 3083be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie 3093be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airliestatic inline int fp64_switch(int i) 3103be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie{ 3113be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie switch (i) { 3123be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie case 0: 3133be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie return 1; 3143be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie case 1: 3153be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie return 0; 3163be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie case 2: 3173be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie return 3; 3183be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie case 3: 3193be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie return 2; 3203be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie } 3213be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie return 0; 3223be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie} 323de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#endif 324