14e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák/* 24e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * Copyright 2016 Advanced Micro Devices, Inc. 34e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * 44e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * Permission is hereby granted, free of charge, to any person obtaining a 54e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * copy of this software and associated documentation files (the "Software"), 64e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * to deal in the Software without restriction, including without limitation 74e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * on the rights to use, copy, modify, merge, publish, distribute, sub 84e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * license, and/or sell copies of the Software, and to permit persons to whom 94e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * the Software is furnished to do so, subject to the following conditions: 104e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * 114e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * The above copyright notice and this permission notice (including the next 124e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * paragraph) shall be included in all copies or substantial portions of the 134e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * Software. 144e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * 154e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 164e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 174e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 184e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 194e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 204e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 214e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák * USE OR OTHER DEALINGS IN THE SOFTWARE. 224e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák */ 234e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák 244e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák#ifndef SI_SHADER_PRIVATE_H 254e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák#define SI_SHADER_PRIVATE_H 264e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák 274e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák#include "si_shader.h" 284e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák#include "gallivm/lp_bld_init.h" 294e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák#include "gallivm/lp_bld_tgsi.h" 305ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#include "tgsi/tgsi_parse.h" 31a0ce09b4b2a3063e49a02de3d12096cf462d10a3Nicolai Hähnle#include "ac_llvm_util.h" 325ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 335ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#include <llvm-c/Core.h> 345ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#include <llvm-c/TargetMachine.h> 355ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 365ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšákstruct pipe_debug_callback; 375ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšákstruct radeon_shader_binary; 385ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 395ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#define RADEON_LLVM_MAX_INPUT_SLOTS 32 405ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#define RADEON_LLVM_MAX_INPUTS 32 * 4 415ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#define RADEON_LLVM_MAX_OUTPUTS 32 * 4 425ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 435ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#define RADEON_LLVM_INITIAL_CF_DEPTH 4 445ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 455ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák#define RADEON_LLVM_MAX_SYSTEM_VALUES 4 46f04088a7ba30f235e4267f9191fc274d39f4412fSamuel Pitoiset#define RADEON_LLVM_MAX_ADDRS 16 475ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 4821af69e7531536ff1564df6f960c51667bffb7efMarek Olšákstruct si_llvm_flow; 495ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 506e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšákstruct si_shader_context { 51e1ea70d9f3317e09104bb7c9f268ef6de9dfb358Samuel Pitoiset struct lp_build_tgsi_context bld_base; 526e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák struct gallivm_state gallivm; 53a0ce09b4b2a3063e49a02de3d12096cf462d10a3Nicolai Hähnle struct ac_llvm_context ac; 546e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák struct si_shader *shader; 556e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák struct si_screen *screen; 565ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 576e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák unsigned type; /* PIPE_SHADER_* specifies the type of shader. */ 5896d60dd9ee6a394671debe60b96db703d9ecd674Nicolai Hähnle 5996d60dd9ee6a394671debe60b96db703d9ecd674Nicolai Hähnle /* Whether the prolog will be compiled separately. */ 6096d60dd9ee6a394671debe60b96db703d9ecd674Nicolai Hähnle bool separate_prolog; 615ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 625ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák /** This function is responsible for initilizing the inputs array and will be 635ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák * called once for each input declared in the TGSI shader. 645ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák */ 656e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák void (*load_input)(struct si_shader_context *, 665ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák unsigned input_index, 675ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák const struct tgsi_full_declaration *decl, 685ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef out[4]); 695ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 706e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák void (*load_system_value)(struct si_shader_context *, 715ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák unsigned index, 725ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák const struct tgsi_full_declaration *decl); 735ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 746e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák void (*declare_memory_region)(struct si_shader_context *, 755ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák const struct tgsi_full_declaration *decl); 765ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 775ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák /** This array contains the input values for the shader. Typically these 785ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák * values will be in the form of a target intrinsic that will inform the 795ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák * backend how to load the actual inputs to the shader. 805ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák */ 815ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák struct tgsi_full_declaration input_decls[RADEON_LLVM_MAX_INPUT_SLOTS]; 825ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef inputs[RADEON_LLVM_MAX_INPUTS]; 835ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef outputs[RADEON_LLVM_MAX_OUTPUTS][TGSI_NUM_CHANNELS]; 84f04088a7ba30f235e4267f9191fc274d39f4412fSamuel Pitoiset LLVMValueRef addrs[RADEON_LLVM_MAX_ADDRS][TGSI_NUM_CHANNELS]; 855ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 865ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák /** This pointer is used to contain the temporary values. 875ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák * The amount of temporary used in tgsi can't be bound to a max value and 885ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák * thus we must allocate this array at runtime. 895ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák */ 905ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef *temps; 915ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák unsigned temps_count; 925ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef system_values[RADEON_LLVM_MAX_SYSTEM_VALUES]; 935ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 946f0d955b6d5017ad76752555c1a4214c16e92622Samuel Pitoiset LLVMValueRef *imms; 956f0d955b6d5017ad76752555c1a4214c16e92622Samuel Pitoiset unsigned imms_num; 966f0d955b6d5017ad76752555c1a4214c16e92622Samuel Pitoiset 9721af69e7531536ff1564df6f960c51667bffb7efMarek Olšák struct si_llvm_flow *flow; 985ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák unsigned flow_depth; 995ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák unsigned flow_depth_max; 1005ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1015ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák struct tgsi_array_info *temp_arrays; 1025ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef *temp_array_allocas; 1035ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1045ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef undef_alloca; 1055ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1065ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef main_fn; 1075ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMTypeRef return_type; 1085ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1096e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_streamout_config; 1106e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_streamout_write_index; 1116e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_streamout_offset[4]; 1126e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_vertex_id; 1136e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_rel_auto_id; 1146e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_vs_prim_id; 1156e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_instance_id; 1166e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_vertex_index0; 1176e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_tes_u; 1186e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_tes_v; 1196e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_tes_rel_patch_id; 1206e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_tes_patch_id; 1216e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_es2gs_offset; 1226e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_oc_lds; 1236e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1246e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák /* Sets a bit if the dynamic HS control word was 0x80000000. The bit is 1256e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák * 0x800000 for VS, 0x1 for ES. 1266e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák */ 1276e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák int param_tess_offchip; 1286e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1296e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTargetMachineRef tm; 1306e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1316e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák unsigned invariant_load_md_kind; 1326e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák unsigned range_md_kind; 1336e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák unsigned uniform_md_kind; 1345ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák unsigned fpmath_md_kind; 1355ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák LLVMValueRef fpmath_md_2p5_ulp; 1366e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef empty_md; 1376e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1386e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák /* Preloaded descriptors. */ 1396e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef esgs_ring; 1406e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef gsvs_ring[4]; 1416e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1426e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef lds; 1436e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef gs_next_vertex[4]; 1446e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef return_value; 1456e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1466e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef voidt; 1476e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef i1; 1486e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef i8; 1496e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef i32; 1506e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef i64; 1516e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef i128; 1526e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef f32; 1536e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef v16i8; 1546e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef v2i32; 1556e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef v4i32; 1566e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef v4f32; 1576e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMTypeRef v8i32; 1586e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák 1596e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák LLVMValueRef shared_memory; 1605ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák}; 1615ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1626e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšákstatic inline struct si_shader_context * 1636e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšáksi_shader_context(struct lp_build_tgsi_context *bld_base) 1645ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák{ 1656e475fefa1fc5e5260169d9b46a33b388aef604dMarek Olšák return (struct si_shader_context*)bld_base; 1665ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák} 1675ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 16821af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_add_attribute(LLVMValueRef F, const char *name, int value); 16921af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_shader_type(LLVMValueRef F, unsigned type); 1705ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 17121af69e7531536ff1564df6f960c51667bffb7efMarek OlšákLLVMTargetRef si_llvm_get_amdgpu_target(const char *triple); 1725ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 17321af69e7531536ff1564df6f960c51667bffb7efMarek Olšákunsigned si_llvm_compile(LLVMModuleRef M, struct radeon_shader_binary *binary, 17421af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMTargetMachineRef tm, 17521af69e7531536ff1564df6f960c51667bffb7efMarek Olšák struct pipe_debug_callback *debug); 1765ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1775ab25bb4ba429a866c2e36bd543bf0405047e325Marek OlšákLLVMTypeRef tgsi2llvmtype(struct lp_build_tgsi_context *bld_base, 1785ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák enum tgsi_opcode_type type); 1795ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 1805ab25bb4ba429a866c2e36bd543bf0405047e325Marek OlšákLLVMValueRef bitcast(struct lp_build_tgsi_context *bld_base, 1815ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák enum tgsi_opcode_type type, LLVMValueRef value); 1825ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 18321af69e7531536ff1564df6f960c51667bffb7efMarek OlšákLLVMValueRef si_llvm_bound_index(struct si_shader_context *ctx, 18421af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMValueRef index, 18521af69e7531536ff1564df6f960c51667bffb7efMarek Olšák unsigned num); 1865ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 18721af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_context_init(struct si_shader_context *ctx, 188171e349782ab6b688c397f6bb76f105ac18a752aMarek Olšák struct si_screen *sscreen, 189171e349782ab6b688c397f6bb76f105ac18a752aMarek Olšák struct si_shader *shader, 190171e349782ab6b688c397f6bb76f105ac18a752aMarek Olšák LLVMTargetMachineRef tm, 19121af69e7531536ff1564df6f960c51667bffb7efMarek Olšák const struct tgsi_shader_info *info, 19221af69e7531536ff1564df6f960c51667bffb7efMarek Olšák const struct tgsi_token *tokens); 1935ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 19421af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_create_func(struct si_shader_context *ctx, 1950b9bba7f6c0fe5b456e7464005063dff8e217847Nicolai Hähnle const char *name, 19621af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMTypeRef *return_types, unsigned num_return_elems, 19721af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMTypeRef *ParamTypes, unsigned ParamCount); 1985ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 19921af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_dispose(struct si_shader_context *ctx); 2005ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 20121af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_finalize_module(struct si_shader_context *ctx, 20221af69e7531536ff1564df6f960c51667bffb7efMarek Olšák bool run_verifier); 2035ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 20421af69e7531536ff1564df6f960c51667bffb7efMarek OlšákLLVMValueRef si_llvm_emit_fetch_64bit(struct lp_build_tgsi_context *bld_base, 20521af69e7531536ff1564df6f960c51667bffb7efMarek Olšák enum tgsi_opcode_type type, 20621af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMValueRef ptr, 20721af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMValueRef ptr2); 2085ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 20921af69e7531536ff1564df6f960c51667bffb7efMarek OlšákLLVMValueRef si_llvm_saturate(struct lp_build_tgsi_context *bld_base, 21021af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMValueRef value); 2115ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 21221af69e7531536ff1564df6f960c51667bffb7efMarek OlšákLLVMValueRef si_llvm_emit_fetch(struct lp_build_tgsi_context *bld_base, 21321af69e7531536ff1564df6f960c51667bffb7efMarek Olšák const struct tgsi_full_src_register *reg, 21421af69e7531536ff1564df6f960c51667bffb7efMarek Olšák enum tgsi_opcode_type type, 21521af69e7531536ff1564df6f960c51667bffb7efMarek Olšák unsigned swizzle); 2165ab25bb4ba429a866c2e36bd543bf0405047e325Marek Olšák 21721af69e7531536ff1564df6f960c51667bffb7efMarek Olšákvoid si_llvm_emit_store(struct lp_build_tgsi_context *bld_base, 21821af69e7531536ff1564df6f960c51667bffb7efMarek Olšák const struct tgsi_full_instruction *inst, 21921af69e7531536ff1564df6f960c51667bffb7efMarek Olšák const struct tgsi_opcode_info *info, 22021af69e7531536ff1564df6f960c51667bffb7efMarek Olšák LLVMValueRef dst[4]); 2214e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák 2224e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšákvoid si_shader_context_init_alu(struct lp_build_tgsi_context *bld_base); 2234e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák 2244e5d076fcf8aae76c553531d713a3c9213fb419dMarek Olšák#endif 225