1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2009 VMware, Inc. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @file 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture sampling. 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @author Jose Fonseca <jfonseca@vmware.com> 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef LP_BLD_SAMPLE_H 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define LP_BLD_SAMPLE_H 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_format.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "gallivm/lp_bld.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "gallivm/lp_bld_type.h" 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "gallivm/lp_bld_swizzle.h" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_view; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_state; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct util_format_description; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct lp_type; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct lp_build_context; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper struct holding all derivatives needed for sampling 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct lp_derivatives 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef ddx_ddy[2]; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Sampler static state. 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are the bits of state from pipe_resource and pipe_sampler_state that 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * are embedded in the generated code. 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct lp_sampler_static_state 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* pipe_sampler_view's state */ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_r:3; /**< PIPE_SWIZZLE_* */ 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_g:3; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_b:3; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_a:3; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* pipe_texture's state */ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned target:3; /**< PIPE_TEXTURE_* */ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pot_width:1; /**< is the width a power of two? */ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pot_height:1; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pot_depth:1; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* pipe_sampler_state's state */ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_s:3; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_t:3; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned wrap_r:3; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_img_filter:2; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_mip_filter:2; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mag_img_filter:2; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned compare_mode:1; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned compare_func:3; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned normalized_coords:1; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_max_lod_equal:1; /**< min_lod == max_lod ? */ 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned lod_bias_non_zero:1; 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned apply_min_lod:1; /**< min_lod > 0 ? */ 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned apply_max_lod:1; /**< max_lod < last_level ? */ 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Hacks */ 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned force_nearest_s:1; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned force_nearest_t:1; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Sampler dynamic state. 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are the bits of state from pipe_resource and pipe_sampler_state that 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * are computed in runtime. 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * There are obtained through callbacks, as we don't want to tie the texture 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sampling code generation logic to any particular texture layout or pipe 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * driver. 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct lp_sampler_dynamic_state 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain the base texture width (returns int32) */ 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*width)( const struct lp_sampler_dynamic_state *state, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain the base texture height (returns int32) */ 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*height)( const struct lp_sampler_dynamic_state *state, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain the base texture depth (returns int32) */ 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*depth)( const struct lp_sampler_dynamic_state *state, 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain the first mipmap level (base level) (returns int32) */ 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*first_level)( const struct lp_sampler_dynamic_state *state, 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain the number of mipmap levels minus one (returns int32) */ 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*last_level)( const struct lp_sampler_dynamic_state *state, 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain stride in bytes between image rows/blocks (returns int32) */ 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*row_stride)( const struct lp_sampler_dynamic_state *state, 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain stride in bytes between image slices (returns int32) */ 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*img_stride)( const struct lp_sampler_dynamic_state *state, 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain pointer to array of pointers to mimpap levels */ 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*data_ptr)( const struct lp_sampler_dynamic_state *state, 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain texture min lod (returns float) */ 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*min_lod)(const struct lp_sampler_dynamic_state *state, 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, unsigned unit); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain texture max lod (returns float) */ 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*max_lod)(const struct lp_sampler_dynamic_state *state, 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, unsigned unit); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain texture lod bias (returns float) */ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*lod_bias)(const struct lp_sampler_dynamic_state *state, 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, unsigned unit); 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Obtain texture border color (returns ptr to float[4]) */ 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*border_color)(const struct lp_sampler_dynamic_state *state, 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm, unsigned unit); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Keep all information for sampling code generation in a single place. 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct lp_build_sample_context 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gallivm_state *gallivm; 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct lp_sampler_static_state *static_state; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_sampler_dynamic_state *dynamic_state; 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct util_format_description *format_desc; 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* See texture_dims() */ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dims; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** SIMD vector width */ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned vector_width; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** regular scalar float type */ 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type float_type; 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context float_bld; 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** float vector type */ 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context float_vec_bld; 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** regular scalar int type */ 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type int_type; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context int_bld; 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Incoming coordinates type and build context */ 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type coord_type; 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context coord_bld; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Signed integer coordinates */ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type int_coord_type; 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context int_coord_bld; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Unsigned integer texture size */ 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type int_size_type; 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context int_size_bld; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Unsigned integer texture size */ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type float_size_type; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context float_size_bld; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Output texels type and build context */ 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type texel_type; 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context texel_bld; 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Float per-quad type */ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type perquadf_type; 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context perquadf_bld; 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Int per-quad type */ 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type perquadi_type; 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_build_context perquadi_bld; 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Common dynamic state values */ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef row_stride_array; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef img_stride_array; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef data_array; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Integer vector with texture width, height, depth */ 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef int_size; 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * We only support a few wrap modes in lp_build_sample_wrap_linear_int() at 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this time. Return whether the given mode is supported by that function. 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE boolean 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_is_simple_wrap_mode(unsigned mode) 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (mode) { 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEX_WRAP_REPEAT: 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEX_WRAP_CLAMP_TO_EDGE: 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgapply_sampler_swizzle(struct lp_build_sample_context *bld, 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *texel) 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char swizzles[4]; 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[0] = bld->static_state->swizzle_r; 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[1] = bld->static_state->swizzle_g; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[2] = bld->static_state->swizzle_b; 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org swizzles[3] = bld->static_state->swizzle_a; 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org lp_build_swizzle_soa_inplace(&bld->texel_bld, texel, swizzles); 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE unsigned 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtexture_dims(enum pipe_texture_target tex) 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (tex) { 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEXTURE_1D: 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEXTURE_2D: 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEXTURE_RECT: 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEXTURE_CUBE: 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 2; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_TEXTURE_3D: 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 3; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0 && "bad texture target in texture_dims()"); 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 2; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_sampler_wrap_mode_uses_border_color(unsigned mode, 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned min_img_filter, 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mag_img_filter); 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Derive the sampler static state. 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_sampler_static_state(struct lp_sampler_static_state *state, 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_view *view, 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_state *sampler); 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_lod_selector(struct lp_build_sample_context *bld, 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct lp_derivatives *derivs, 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef lod_bias, /* optional */ 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef explicit_lod, /* optional */ 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mip_filter, 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_lod_ipart, 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_lod_fpart); 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_nearest_mip_level(struct lp_build_sample_context *bld, 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef lod, 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *level_out); 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_linear_mip_levels(struct lp_build_sample_context *bld, 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef lod_ipart, 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *lod_fpart_inout, 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *level0_out, 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *level1_out); 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgLLVMValueRef 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_get_mipmap_level(struct lp_build_sample_context *bld, 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef level); 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_mipmap_level_sizes(struct lp_build_sample_context *bld, 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef ilevel, 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_size_vec, 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *row_stride_vec, 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *img_stride_vec); 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_extract_image_sizes(struct lp_build_sample_context *bld, 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type size_type, 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type coord_type, 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef size, 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_width, 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_height, 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_depth); 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_unnormalized_coords(struct lp_build_sample_context *bld, 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef flt_size, 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *s, 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *t, 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *r); 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_cube_lookup(struct lp_build_sample_context *bld, 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef s, 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef t, 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef r, 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *face, 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *face_s, 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *face_t); 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_sample_partial_offset(struct lp_build_context *bld, 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned block_length, 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef coord, 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef stride, 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_offset, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_i); 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_sample_offset(struct lp_build_context *bld, 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct util_format_description *format_desc, 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef x, 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef y, 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef z, 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef y_stride, 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef z_stride, 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_offset, 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_i, 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *out_j); 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_sample_soa(struct gallivm_state *gallivm, 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct lp_sampler_static_state *static_state, 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_sampler_dynamic_state *dynamic_state, 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type fp_type, 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_coords, 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const LLVMValueRef *coords, 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct lp_derivatives *derivs, 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef lod_bias, 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef explicit_lod, 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef texel_out[4]); 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_coord_repeat_npot_linear(struct lp_build_sample_context *bld, 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef coord_f, 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef length_i, 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef length_f, 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *coord0_i, 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *weight_f); 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_size_query_soa(struct gallivm_state *gallivm, 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct lp_sampler_static_state *static_state, 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_sampler_dynamic_state *dynamic_state, 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type int_type, 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned unit, 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef explicit_lod, 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef *sizes_out); 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_sample_nop(struct gallivm_state *gallivm, 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct lp_type type, 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_coords, 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const LLVMValueRef *coords, 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef texel_out[4]); 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgLLVMValueRef 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglp_build_minify(struct lp_build_context *bld, 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef base_size, 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LLVMValueRef level); 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* LP_BLD_SAMPLE_H */ 456