lp_bld_sample.h revision 1cd31459afa7ea859a7c1e6abb1fc4ae2f0060ed
1de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/************************************************************************** 2de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 3de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Copyright 2009 VMware, Inc. 4de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * All Rights Reserved. 5de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 6de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * copy of this software and associated documentation files (the 8de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * "Software"), to deal in the Software without restriction, including 9de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * the following conditions: 13de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 14de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * The above copyright notice and this permission notice (including the 15de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * next paragraph) shall be included in all copies or substantial portions 16de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * of the Software. 17de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 18de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 26de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca **************************************************************************/ 27de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 28de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/** 29de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * @file 30de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Texture sampling. 31de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 32de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 33de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */ 34de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 35de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca#ifndef LP_BLD_SAMPLE_H 36de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca#define LP_BLD_SAMPLE_H 37de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 38de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 390d71ba46e613230c84165106c1fcc9027dec4cd3Brian Paul#include "gallivm/lp_bld.h" 40de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 41287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource; 42d67e3487ac4c678892d0aea535cacfd5f1d86a27José Fonsecastruct pipe_sampler_view; 43de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecastruct pipe_sampler_state; 44bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonsecastruct util_format_description; 45b4835ea03d64261da5a892f9590c9977b06920e8José Fonsecastruct lp_type; 46bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonsecastruct lp_build_context; 47de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 48de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 49de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/** 50de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Sampler static state. 51de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 52287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * These are the bits of state from pipe_resource and pipe_sampler_state that 53de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * are embedded in the generated code. 54de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */ 55de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecastruct lp_sampler_static_state 56de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca{ 5781ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca /* pipe_sampler_view's state */ 58de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca enum pipe_format format; 590a0d17616382948092adeb652701681a2ea7753eBrian Paul unsigned swizzle_r:3; /**< PIPE_SWIZZLE_* */ 6081ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca unsigned swizzle_g:3; 6181ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca unsigned swizzle_b:3; 6281ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca unsigned swizzle_a:3; 6381ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca 6481ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca /* pipe_texture's state */ 650a0d17616382948092adeb652701681a2ea7753eBrian Paul unsigned target:3; /**< PIPE_TEXTURE_* */ 660a0d17616382948092adeb652701681a2ea7753eBrian Paul unsigned pot_width:1; /**< is the width a power of two? */ 67de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned pot_height:1; 68de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned pot_depth:1; 69de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 70de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca /* pipe_sampler_state's state */ 71de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned wrap_s:3; 72de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned wrap_t:3; 73de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned wrap_r:3; 74de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned min_img_filter:2; 75de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned min_mip_filter:2; 76de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned mag_img_filter:2; 77de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned compare_mode:1; 78de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned compare_func:3; 79de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned normalized_coords:1; 8036a0c4219deaa1509ae9746abb845f9502ca9f1bBrian Paul float lod_bias, min_lod, max_lod; 81946edea794646443abde05363294fed430d8d6f1Brian Paul float border_color[4]; 82de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca}; 83de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 84de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 85de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/** 86de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Sampler dynamic state. 87de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 88287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * These are the bits of state from pipe_resource and pipe_sampler_state that 89de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * are computed in runtime. 90de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * 91de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * There are obtained through callbacks, as we don't want to tie the texture 92de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * sampling code generation logic to any particular texture layout or pipe 93de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * driver. 94de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */ 95de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecastruct lp_sampler_dynamic_state 96de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca{ 97de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 98de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca /** Obtain the base texture width. */ 99de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMValueRef 1003f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*width)( const struct lp_sampler_dynamic_state *state, 101de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMBuilderRef builder, 102de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned unit); 103de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 104de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca /** Obtain the base texture height. */ 105de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMValueRef 1063f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*height)( const struct lp_sampler_dynamic_state *state, 107de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMBuilderRef builder, 108de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned unit); 109de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 1107f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul /** Obtain the base texture depth. */ 1117f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul LLVMValueRef 1123f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*depth)( const struct lp_sampler_dynamic_state *state, 1137f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul LLVMBuilderRef builder, 1147f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul unsigned unit); 1157f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul 1167f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul /** Obtain the number of mipmap levels (minus one). */ 1177f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul LLVMValueRef 1183f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*last_level)( const struct lp_sampler_dynamic_state *state, 1197f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul LLVMBuilderRef builder, 1207f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul unsigned unit); 1217f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul 122de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMValueRef 1233f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*row_stride)( const struct lp_sampler_dynamic_state *state, 12453efb634a0c134feebb5a3e47fc33660694be9c3Brian Paul LLVMBuilderRef builder, 12553efb634a0c134feebb5a3e47fc33660694be9c3Brian Paul unsigned unit); 126de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 127de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMValueRef 1283f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*img_stride)( const struct lp_sampler_dynamic_state *state, 129079081222a6881655e112351a57e0a07b0c7b031Brian Paul LLVMBuilderRef builder, 130079081222a6881655e112351a57e0a07b0c7b031Brian Paul unsigned unit); 131079081222a6881655e112351a57e0a07b0c7b031Brian Paul 132079081222a6881655e112351a57e0a07b0c7b031Brian Paul LLVMValueRef 1333f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul (*data_ptr)( const struct lp_sampler_dynamic_state *state, 134de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca LLVMBuilderRef builder, 135de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned unit); 136de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 137de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca}; 138de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 139de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 140de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/** 141de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Derive the sampler static state. 142de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */ 143de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecavoid 144de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecalp_sampler_static_state(struct lp_sampler_static_state *state, 145d67e3487ac4c678892d0aea535cacfd5f1d86a27José Fonseca const struct pipe_sampler_view *view, 146de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca const struct pipe_sampler_state *sampler); 147de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 148de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 149b4f6907b8d8a966df56c06155049c52dadea105fJosé FonsecaLLVMValueRef 150b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonsecalp_build_gather(LLVMBuilderRef builder, 151b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca unsigned length, 152b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca unsigned src_width, 153b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca unsigned dst_width, 154b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca LLVMValueRef base_ptr, 155b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca LLVMValueRef offsets); 156b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca 157b4f6907b8d8a966df56c06155049c52dadea105fJosé Fonseca 158bc93e9181cf179a797679d30cd1a3a563e1756c0José FonsecaLLVMValueRef 159bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonsecalp_build_sample_offset(struct lp_build_context *bld, 160bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca const struct util_format_description *format_desc, 161bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca LLVMValueRef x, 162bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca LLVMValueRef y, 16367a2f98be79b368c316ebe6731112734d306b3f6Brian Paul LLVMValueRef z, 16467a2f98be79b368c316ebe6731112734d306b3f6Brian Paul LLVMValueRef y_stride, 16567a2f98be79b368c316ebe6731112734d306b3f6Brian Paul LLVMValueRef z_stride); 166bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca 167bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca 168de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecavoid 169de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecalp_build_sample_soa(LLVMBuilderRef builder, 170de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca const struct lp_sampler_static_state *static_state, 171de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca struct lp_sampler_dynamic_state *dynamic_state, 172b4835ea03d64261da5a892f9590c9977b06920e8José Fonseca struct lp_type fp_type, 173de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned unit, 174de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca unsigned num_coords, 175de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca const LLVMValueRef *coords, 176962558daaed43b0111cd062e32821aad106869d7José Fonseca const LLVMValueRef *ddx, 177962558daaed43b0111cd062e32821aad106869d7José Fonseca const LLVMValueRef *ddy, 178ec43b2eb45a1b2e33f328f76624c987484e329f3José Fonseca LLVMValueRef lod_bias, 179ec43b2eb45a1b2e33f328f76624c987484e329f3José Fonseca LLVMValueRef explicit_lod, 1801cd31459afa7ea859a7c1e6abb1fc4ae2f0060edBrian Paul LLVMValueRef texel_out[4]); 181de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 182de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 183de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca 184de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca#endif /* LP_BLD_SAMPLE_H */ 185