18ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin/************************************************************************** 28ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * 38ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * Copyright 2010 VMware, Inc. 48ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * All Rights Reserved. 58ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * 68ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * Permission is hereby granted, free of charge, to any person obtaining a 78ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * copy of this software and associated documentation files (the 88ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * "Software"), to deal in the Software without restriction, including 98ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * without limitation the rights to use, copy, modify, merge, publish, 108ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * distribute, sub license, and/or sell copies of the Software, and to 118ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * permit persons to whom the Software is furnished to do so, subject to 128ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * the following conditions: 138ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * 148ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * The above copyright notice and this permission notice (including the 158ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * next paragraph) shall be included in all copies or substantial portions 168ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * of the Software. 178ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * 188ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 198ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 218ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 228ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 238ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 248ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin * 268ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin **************************************************************************/ 278ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 2801eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin#ifndef DRAW_LLVM_H 2901eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin#define DRAW_LLVM_H 30c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 31c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin#include "draw/draw_private.h" 32c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 338ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin#include "draw/draw_vs.h" 3401eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin#include "gallivm/lp_bld_sample.h" 358ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 36c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin#include "pipe/p_context.h" 378ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin#include "util/u_simple_list.h" 38c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 3901eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin 408ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinstruct draw_llvm; 418ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinstruct llvm_vertex_shader; 428ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 43c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinstruct draw_jit_texture 44c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin{ 45c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin uint32_t width; 46c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin uint32_t height; 4701eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin uint32_t depth; 4808070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler uint32_t first_level; 4901eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin uint32_t last_level; 50048a90c1cb926fdeae47392582cb91b0a689905fBrian Paul uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS]; 51048a90c1cb926fdeae47392582cb91b0a689905fBrian Paul uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS]; 52048a90c1cb926fdeae47392582cb91b0a689905fBrian Paul const void *data[PIPE_MAX_TEXTURE_LEVELS]; 53998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca float min_lod; 54998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca float max_lod; 55998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca float lod_bias; 56998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca float border_color[4]; 57c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin}; 58c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 59c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinenum { 60c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin DRAW_JIT_TEXTURE_WIDTH = 0, 61c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin DRAW_JIT_TEXTURE_HEIGHT, 6201eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin DRAW_JIT_TEXTURE_DEPTH, 6308070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler DRAW_JIT_TEXTURE_FIRST_LEVEL, 6401eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin DRAW_JIT_TEXTURE_LAST_LEVEL, 6501eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin DRAW_JIT_TEXTURE_ROW_STRIDE, 6601eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin DRAW_JIT_TEXTURE_IMG_STRIDE, 6701eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin DRAW_JIT_TEXTURE_DATA, 68998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca DRAW_JIT_TEXTURE_MIN_LOD, 69998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca DRAW_JIT_TEXTURE_MAX_LOD, 70998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca DRAW_JIT_TEXTURE_LOD_BIAS, 71998cf11e1387b3b0f774426eb7b52abfebbb20d3José Fonseca DRAW_JIT_TEXTURE_BORDER_COLOR, 7201eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin DRAW_JIT_TEXTURE_NUM_FIELDS /* number of fields above */ 73c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin}; 74c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 75c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinenum { 76c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin DRAW_JIT_VERTEX_VERTEX_ID = 0, 77c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin DRAW_JIT_VERTEX_CLIP, 7840c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie DRAW_JIT_VERTEX_PRE_CLIP_POS, 79c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin DRAW_JIT_VERTEX_DATA 80c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin}; 81c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 82c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin/** 83c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * This structure is passed directly to the generated vertex shader. 84c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * 85c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * It contains the derived state. 86c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * 87c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * Changes here must be reflected in the draw_jit_context_* macros. 88c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * Changes to the ordering should be avoided. 89c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * 90c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * Only use types with a clear size and padding here, in particular prefer the 91c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin * stdint.h types to the basic integer types. 92c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin */ 93c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinstruct draw_jit_context 94c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin{ 95c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin const float *vs_constants; 96c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin const float *gs_constants; 97e6c237cfd6f53ff569f68255d5d6da15148cd0f5Brian Paul float (*planes) [DRAW_TOTAL_CLIP_PLANES][4]; 9805921fd4e5305da68bb269748cb0ef059e1db417Keith Whitwell float *viewport; 99c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 100cab2fed135bc1edf7b65ddca3236020638427061Brian Paul struct draw_jit_texture textures[PIPE_MAX_SAMPLERS]; 101c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin}; 102c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 103c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 104efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_context_vs_constants(_gallivm, _ptr) \ 105efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_struct_get(_gallivm, _ptr, 0, "vs_constants") 106c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 107efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_context_gs_constants(_gallivm, _ptr) \ 108efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_struct_get(_gallivm, _ptr, 1, "gs_constants") 109c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 110efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_context_planes(_gallivm, _ptr) \ 111efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_struct_get(_gallivm, _ptr, 2, "planes") 11208f890d4c3b8376d1840f90474f7c56329432d95delphi 113efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_context_viewport(_gallivm, _ptr) \ 114efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_struct_get(_gallivm, _ptr, 3, "viewport") 11505921fd4e5305da68bb269748cb0ef059e1db417Keith Whitwell 11605921fd4e5305da68bb269748cb0ef059e1db417Keith Whitwell#define DRAW_JIT_CTX_TEXTURES 4 117c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 118efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_context_textures(_gallivm, _ptr) \ 119efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_CTX_TEXTURES, "textures") 120c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 121efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_header_id(_gallivm, _ptr) \ 12240c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_VERTEX_VERTEX_ID, "id") 123ab5c09738760bc1b665b9809eaf921f4ac27057eZack Rusin 124efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_header_clip(_gallivm, _ptr) \ 12540c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_VERTEX_CLIP, "clip") 12640c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie 12740c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie#define draw_jit_header_pre_clip_pos(_gallivm, _ptr) \ 12840c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_VERTEX_PRE_CLIP_POS, "pre_clip_pos") 129ab5c09738760bc1b665b9809eaf921f4ac27057eZack Rusin 130efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_header_data(_gallivm, _ptr) \ 13140c5987ed84f9f0b8bb1f707bb13c1aafc39330aDave Airlie lp_build_struct_get_ptr(_gallivm, _ptr, DRAW_JIT_VERTEX_DATA, "data") 132ab5c09738760bc1b665b9809eaf921f4ac27057eZack Rusin 133c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 134efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_vbuffer_stride(_gallivm, _ptr) \ 135efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_struct_get(_gallivm, _ptr, 0, "stride") 136c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 137efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#define draw_jit_vbuffer_offset(_gallivm, _ptr) \ 138cdca3c58aa2d9549f5188910e2a77b438516714fMarek Olšák lp_build_struct_get(_gallivm, _ptr, 1, "buffer_offset") 139c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 140c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 14194f65d095a1365b69a041302b473e40c6ccae3c3Hui Qi Taytypedef int 142c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin(*draw_jit_vert_func)(struct draw_jit_context *context, 143c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin struct vertex_header *io, 1441963112f9d0a2ed8e237641eef8eb384365d1375Zack Rusin const char *vbuffers[PIPE_MAX_ATTRIBS], 145c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin unsigned start, 146c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin unsigned count, 147821abff8c03031603111abc17dabe7cfa28a31e1Zack Rusin unsigned stride, 148fab4ac9e942465cb184a74b3abc57c2e5353c5bfZack Rusin struct pipe_vertex_buffer *vertex_buffers, 149fab4ac9e942465cb184a74b3abc57c2e5353c5bfZack Rusin unsigned instance_id); 150c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 15152f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin 15294f65d095a1365b69a041302b473e40c6ccae3c3Hui Qi Taytypedef int 15352f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin(*draw_jit_vert_func_elts)(struct draw_jit_context *context, 15452f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin struct vertex_header *io, 15552f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin const char *vbuffers[PIPE_MAX_ATTRIBS], 15652f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin const unsigned *fetch_elts, 15752f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin unsigned fetch_count, 15852f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin unsigned stride, 159fab4ac9e942465cb184a74b3abc57c2e5353c5bfZack Rusin struct pipe_vertex_buffer *vertex_buffers, 160fab4ac9e942465cb184a74b3abc57c2e5353c5bfZack Rusin unsigned instance_id); 16152f145a186b8e47439fb4a96d04a099d439477b7Zack Rusin 1628ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinstruct draw_llvm_variant_key 1638ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin{ 164b5236f3da482665567a9d53264e6203092120c31Keith Whitwell unsigned nr_vertex_elements:8; 165b5236f3da482665567a9d53264e6203092120c31Keith Whitwell unsigned nr_samplers:8; 1665f996e2b1d09dad64c088ccabb1a4a53ebfb8102Luca Barbieri unsigned clamp_vertex_color:1; 16725bb05fef075a87ec6e5f2a989049faff2afedd2delphi unsigned clip_xy:1; 16825bb05fef075a87ec6e5f2a989049faff2afedd2delphi unsigned clip_z:1; 16925bb05fef075a87ec6e5f2a989049faff2afedd2delphi unsigned clip_user:1; 170b5236f3da482665567a9d53264e6203092120c31Keith Whitwell unsigned clip_halfz:1; 17125bb05fef075a87ec6e5f2a989049faff2afedd2delphi unsigned bypass_viewport:1; 17225bb05fef075a87ec6e5f2a989049faff2afedd2delphi unsigned need_edgeflags:1; 173dc4c821f0817a3db716f965692fb701079f66340Marek Olšák unsigned ucp_enable:PIPE_MAX_CLIP_PLANES; 174dc4c821f0817a3db716f965692fb701079f66340Marek Olšák unsigned pad:9-PIPE_MAX_CLIP_PLANES; 175a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 176a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell /* Variable number of vertex elements: 177a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell */ 178a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell struct pipe_vertex_element vertex_element[1]; 179a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 180a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell /* Followed by variable number of samplers: 181a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell */ 182a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell/* struct lp_sampler_static_state sampler; */ 1838ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin}; 1848ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 185a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell#define DRAW_LLVM_MAX_VARIANT_KEY_SIZE \ 186a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell (sizeof(struct draw_llvm_variant_key) + \ 187cab2fed135bc1edf7b65ddca3236020638427061Brian Paul PIPE_MAX_SAMPLERS * sizeof(struct lp_sampler_static_state) + \ 188a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell (PIPE_MAX_ATTRIBS-1) * sizeof(struct pipe_vertex_element)) 189a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 190a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 191a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwellstatic INLINE size_t 192a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwelldraw_llvm_variant_key_size(unsigned nr_vertex_elements, 193a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell unsigned nr_samplers) 194a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell{ 195a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell return (sizeof(struct draw_llvm_variant_key) + 196a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell nr_samplers * sizeof(struct lp_sampler_static_state) + 197a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell (nr_vertex_elements - 1) * sizeof(struct pipe_vertex_element)); 198a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell} 199a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 200a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 201a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwellstatic INLINE struct lp_sampler_static_state * 202a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwelldraw_llvm_variant_key_samplers(struct draw_llvm_variant_key *key) 203a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell{ 204a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell return (struct lp_sampler_static_state *) 205a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell &key->vertex_element[key->nr_vertex_elements]; 206a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell} 207a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 208a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 209a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 2108ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinstruct draw_llvm_variant_list_item 2118ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin{ 2128ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm_variant *base; 2138ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm_variant_list_item *next, *prev; 2148ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin}; 2158ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 2168ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinstruct draw_llvm_variant 2178ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin{ 2183469715a8a171512cf9b528702e70393f01c6041José Fonseca struct gallivm_state *gallivm; 2193469715a8a171512cf9b528702e70393f01c6041José Fonseca 2203469715a8a171512cf9b528702e70393f01c6041José Fonseca /* LLVM JIT builder types */ 2213469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMTypeRef context_ptr_type; 2223469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMTypeRef buffer_ptr_type; 2233469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMTypeRef vb_ptr_type; 2243469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMTypeRef vertex_header_ptr_type; 2253469715a8a171512cf9b528702e70393f01c6041José Fonseca 2268ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin LLVMValueRef function; 2278ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin LLVMValueRef function_elts; 2288ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin draw_jit_vert_func jit_func; 2298ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin draw_jit_vert_func_elts jit_func_elts; 2308ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 2318ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct llvm_vertex_shader *shader; 2328ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 2338ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm *llvm; 2348ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm_variant_list_item list_item_global; 2358ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm_variant_list_item list_item_local; 236a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell 237a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell /* key is variable-sized, must be last */ 238a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell struct draw_llvm_variant_key key; 2398ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin}; 2408ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 2418ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinstruct llvm_vertex_shader { 2428ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_vertex_shader base; 2438ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 244a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell unsigned variant_key_size; 2458ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm_variant_list_item variants; 2468ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin unsigned variants_created; 2478ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin unsigned variants_cached; 2488ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin}; 2498ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 250c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinstruct draw_llvm { 251c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin struct draw_context *draw; 252c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 253c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin struct draw_jit_context jit_context; 254c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 2558ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin struct draw_llvm_variant_list_item vs_variants_list; 2568ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin int nr_variants; 257c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin}; 258c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 259efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul 260bb6ca7b3f74b63d45532108730b5c93a57926662José Fonsecastatic INLINE struct llvm_vertex_shader * 2618ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinllvm_vertex_shader(struct draw_vertex_shader *vs) 262323fdd8ae5baf16df6c57754e58adc8e22d28e10Zack Rusin{ 2638ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin return (struct llvm_vertex_shader *)vs; 2648ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin} 265323fdd8ae5baf16df6c57754e58adc8e22d28e10Zack Rusin 266323fdd8ae5baf16df6c57754e58adc8e22d28e10Zack Rusin 267c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinstruct draw_llvm * 2683469715a8a171512cf9b528702e70393f01c6041José Fonsecadraw_llvm_create(struct draw_context *draw); 269c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 270c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusinvoid 271c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusindraw_llvm_destroy(struct draw_llvm *llvm); 272c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 273323fdd8ae5baf16df6c57754e58adc8e22d28e10Zack Rusinstruct draw_llvm_variant * 274a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwelldraw_llvm_create_variant(struct draw_llvm *llvm, 275a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell unsigned num_vertex_header_attribs, 276a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwell const struct draw_llvm_variant_key *key); 2778ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusin 2788ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusinvoid 2798ebfcf31eb905b7d47e520c04420620ae21bdf4eZack Rusindraw_llvm_destroy_variant(struct draw_llvm_variant *variant); 280c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 281a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwellstruct draw_llvm_variant_key * 282a1de6f48c3fa79bbc8f2514da19b3e01138e7093Keith Whitwelldraw_llvm_make_variant_key(struct draw_llvm *llvm, char *store); 283c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin 28401eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusinstruct lp_build_sampler_soa * 28501eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusindraw_llvm_sampler_soa_create(const struct lp_sampler_static_state *static_state, 28601eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin LLVMValueRef context_ptr); 28701eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin 28801eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusinvoid 2890cb545a7f2e823c85309013c4c41e9461f297d06Brian Pauldraw_llvm_set_sampler_state(struct draw_context *draw); 2900cb545a7f2e823c85309013c4c41e9461f297d06Brian Paul 2910cb545a7f2e823c85309013c4c41e9461f297d06Brian Paulvoid 29201eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusindraw_llvm_set_mapped_texture(struct draw_context *draw, 29301eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin unsigned sampler_idx, 29401eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin uint32_t width, uint32_t height, uint32_t depth, 29508070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler uint32_t first_level, uint32_t last_level, 296048a90c1cb926fdeae47392582cb91b0a689905fBrian Paul uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS], 297048a90c1cb926fdeae47392582cb91b0a689905fBrian Paul uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS], 298048a90c1cb926fdeae47392582cb91b0a689905fBrian Paul const void *data[PIPE_MAX_TEXTURE_LEVELS]); 29901eebfe1b6de2e36dd3af0952fc8329b7073a100Zack Rusin 300c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7Zack Rusin#endif 301