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