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
39deffeba17204c249cac698a516a210e364d2cf55Vinson Lee#include "pipe/p_format.h"
400a7824862eb753878fa79b153b2a111884ff1197Brian Paul#include "util/u_debug.h"
410d71ba46e613230c84165106c1fcc9027dec4cd3Brian Paul#include "gallivm/lp_bld.h"
420a7824862eb753878fa79b153b2a111884ff1197Brian Paul#include "gallivm/lp_bld_type.h"
430a7824862eb753878fa79b153b2a111884ff1197Brian Paul#include "gallivm/lp_bld_swizzle.h"
440a7824862eb753878fa79b153b2a111884ff1197Brian Paul
45de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
46287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource;
47d67e3487ac4c678892d0aea535cacfd5f1d86a27José Fonsecastruct pipe_sampler_view;
48de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecastruct pipe_sampler_state;
49bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonsecastruct util_format_description;
50b4835ea03d64261da5a892f9590c9977b06920e8José Fonsecastruct lp_type;
51bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonsecastruct lp_build_context;
52de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
53de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
54de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/**
553469715a8a171512cf9b528702e70393f01c6041José Fonseca * Helper struct holding all derivatives needed for sampling
563469715a8a171512cf9b528702e70393f01c6041José Fonseca */
573469715a8a171512cf9b528702e70393f01c6041José Fonsecastruct lp_derivatives
583469715a8a171512cf9b528702e70393f01c6041José Fonseca{
593469715a8a171512cf9b528702e70393f01c6041José Fonseca   LLVMValueRef ddx_ddy[2];
603469715a8a171512cf9b528702e70393f01c6041José Fonseca};
613469715a8a171512cf9b528702e70393f01c6041José Fonseca
623469715a8a171512cf9b528702e70393f01c6041José Fonseca
633469715a8a171512cf9b528702e70393f01c6041José Fonseca/**
64de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Sampler static state.
65de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca *
66287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * These are the bits of state from pipe_resource and pipe_sampler_state that
67de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * are embedded in the generated code.
68de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */
69de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecastruct lp_sampler_static_state
70de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca{
7181ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca   /* pipe_sampler_view's state */
72de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   enum pipe_format format;
730a0d17616382948092adeb652701681a2ea7753eBrian Paul   unsigned swizzle_r:3;     /**< PIPE_SWIZZLE_* */
7481ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca   unsigned swizzle_g:3;
7581ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca   unsigned swizzle_b:3;
7681ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca   unsigned swizzle_a:3;
7781ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca
7881ab19de04e623d24cb65ad1ed3b240bce78235bJosé Fonseca   /* pipe_texture's state */
790a0d17616382948092adeb652701681a2ea7753eBrian Paul   unsigned target:3;        /**< PIPE_TEXTURE_* */
800a0d17616382948092adeb652701681a2ea7753eBrian Paul   unsigned pot_width:1;     /**< is the width a power of two? */
81de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned pot_height:1;
82de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned pot_depth:1;
83de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
84de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   /* pipe_sampler_state's state */
85de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned wrap_s:3;
86de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned wrap_t:3;
87de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned wrap_r:3;
88de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned min_img_filter:2;
89de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned min_mip_filter:2;
90de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned mag_img_filter:2;
91de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned compare_mode:1;
92de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned compare_func:3;
93de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   unsigned normalized_coords:1;
9461b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   unsigned min_max_lod_equal:1;  /**< min_lod == max_lod ? */
955849a6ab6412eddd4552329178e6edb0bea92977Keith Whitwell   unsigned lod_bias_non_zero:1;
961c32583581ef5aee59901d9dd8e56cc1a125f0d4José Fonseca   unsigned apply_min_lod:1;  /**< min_lod > 0 ? */
971c32583581ef5aee59901d9dd8e56cc1a125f0d4José Fonseca   unsigned apply_max_lod:1;  /**< max_lod < last_level ? */
98ba9c1773d77afc71adc7bad3d8c326b104c5e094José Fonseca
99ba9c1773d77afc71adc7bad3d8c326b104c5e094José Fonseca   /* Hacks */
100ba9c1773d77afc71adc7bad3d8c326b104c5e094José Fonseca   unsigned force_nearest_s:1;
101ba9c1773d77afc71adc7bad3d8c326b104c5e094José Fonseca   unsigned force_nearest_t:1;
102de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca};
103de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
104de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
105de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/**
106de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Sampler dynamic state.
107de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca *
108287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * These are the bits of state from pipe_resource and pipe_sampler_state that
109de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * are computed in runtime.
110de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca *
111de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * There are obtained through callbacks, as we don't want to tie the texture
112de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * sampling code generation logic to any particular texture layout or pipe
113de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * driver.
114de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */
115de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecastruct lp_sampler_dynamic_state
116de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca{
117de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
118542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain the base texture width (returns int32) */
119de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   LLVMValueRef
1203f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*width)( const struct lp_sampler_dynamic_state *state,
121efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul             struct gallivm_state *gallivm,
122de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca             unsigned unit);
123de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
124542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain the base texture height (returns int32) */
125de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   LLVMValueRef
1263f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*height)( const struct lp_sampler_dynamic_state *state,
127efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul              struct gallivm_state *gallivm,
128de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca              unsigned unit);
129de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
130542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain the base texture depth (returns int32) */
1317f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul   LLVMValueRef
1323f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*depth)( const struct lp_sampler_dynamic_state *state,
133efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul             struct gallivm_state *gallivm,
1347f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul             unsigned unit);
1357f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul
13608070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler   /** Obtain the first mipmap level (base level) (returns int32) */
13708070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler   LLVMValueRef
13808070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler   (*first_level)( const struct lp_sampler_dynamic_state *state,
13908070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler                   struct gallivm_state *gallivm,
14008070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler                   unsigned unit);
14108070cead0bb79d4441d8c5b900d1571bb63c670Fabian Bieler
142542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain the number of mipmap levels minus one (returns int32) */
1437f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul   LLVMValueRef
1443f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*last_level)( const struct lp_sampler_dynamic_state *state,
145efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul                  struct gallivm_state *gallivm,
1467f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul                  unsigned unit);
1477f4b5c5387a3a8e3c5f31f0badc943c43857683aBrian Paul
148542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain stride in bytes between image rows/blocks (returns int32) */
149de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   LLVMValueRef
1503f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*row_stride)( const struct lp_sampler_dynamic_state *state,
151efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul                  struct gallivm_state *gallivm,
15253efb634a0c134feebb5a3e47fc33660694be9c3Brian Paul                  unsigned unit);
153de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
154542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain stride in bytes between image slices (returns int32) */
155de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca   LLVMValueRef
1563f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*img_stride)( const struct lp_sampler_dynamic_state *state,
157efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul                  struct gallivm_state *gallivm,
158079081222a6881655e112351a57e0a07b0c7b031Brian Paul                  unsigned unit);
159079081222a6881655e112351a57e0a07b0c7b031Brian Paul
160542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain pointer to array of pointers to mimpap levels */
161079081222a6881655e112351a57e0a07b0c7b031Brian Paul   LLVMValueRef
1623f6dc8e79d918283a6dfcf9c8937a6d52f3bb4f5Brian Paul   (*data_ptr)( const struct lp_sampler_dynamic_state *state,
163efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul                struct gallivm_state *gallivm,
164de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                unsigned unit);
165de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
166542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain texture min lod (returns float) */
16761b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   LLVMValueRef
16861b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   (*min_lod)(const struct lp_sampler_dynamic_state *state,
169efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul              struct gallivm_state *gallivm, unsigned unit);
17061b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul
171542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain texture max lod (returns float) */
17261b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   LLVMValueRef
17361b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   (*max_lod)(const struct lp_sampler_dynamic_state *state,
174efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul              struct gallivm_state *gallivm, unsigned unit);
17561b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul
176542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain texture lod bias (returns float) */
17761b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   LLVMValueRef
17861b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul   (*lod_bias)(const struct lp_sampler_dynamic_state *state,
179efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul               struct gallivm_state *gallivm, unsigned unit);
180d1a4dd4217a4b8b018d4d9a161afece640d75694Brian Paul
181542d6cb1b8a87615b4c4498ce1fcbf39d743f963Brian Paul   /** Obtain texture border color (returns ptr to float[4]) */
182d1a4dd4217a4b8b018d4d9a161afece640d75694Brian Paul   LLVMValueRef
183d1a4dd4217a4b8b018d4d9a161afece640d75694Brian Paul   (*border_color)(const struct lp_sampler_dynamic_state *state,
184efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul                   struct gallivm_state *gallivm, unsigned unit);
185de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca};
186de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
187de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
188de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca/**
1890a7824862eb753878fa79b153b2a111884ff1197Brian Paul * Keep all information for sampling code generation in a single place.
1900a7824862eb753878fa79b153b2a111884ff1197Brian Paul */
1910a7824862eb753878fa79b153b2a111884ff1197Brian Paulstruct lp_build_sample_context
1920a7824862eb753878fa79b153b2a111884ff1197Brian Paul{
193efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul   struct gallivm_state *gallivm;
1940a7824862eb753878fa79b153b2a111884ff1197Brian Paul
1950a7824862eb753878fa79b153b2a111884ff1197Brian Paul   const struct lp_sampler_static_state *static_state;
1960a7824862eb753878fa79b153b2a111884ff1197Brian Paul
1970a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_sampler_dynamic_state *dynamic_state;
1980a7824862eb753878fa79b153b2a111884ff1197Brian Paul
1990a7824862eb753878fa79b153b2a111884ff1197Brian Paul   const struct util_format_description *format_desc;
2000a7824862eb753878fa79b153b2a111884ff1197Brian Paul
201f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca   /* See texture_dims() */
202f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca   unsigned dims;
203f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca
2043469715a8a171512cf9b528702e70393f01c6041José Fonseca   /** SIMD vector width */
2053469715a8a171512cf9b528702e70393f01c6041José Fonseca   unsigned vector_width;
2063469715a8a171512cf9b528702e70393f01c6041José Fonseca
2070a7824862eb753878fa79b153b2a111884ff1197Brian Paul   /** regular scalar float type */
2080a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_type float_type;
2090a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_build_context float_bld;
2100a7824862eb753878fa79b153b2a111884ff1197Brian Paul
211d1a4dd4217a4b8b018d4d9a161afece640d75694Brian Paul   /** float vector type */
212d1a4dd4217a4b8b018d4d9a161afece640d75694Brian Paul   struct lp_build_context float_vec_bld;
213d1a4dd4217a4b8b018d4d9a161afece640d75694Brian Paul
2143469715a8a171512cf9b528702e70393f01c6041José Fonseca   /** regular scalar int type */
2150a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_type int_type;
2160a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_build_context int_bld;
2170a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2180a7824862eb753878fa79b153b2a111884ff1197Brian Paul   /** Incoming coordinates type and build context */
2190a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_type coord_type;
2200a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_build_context coord_bld;
2210a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2220a7824862eb753878fa79b153b2a111884ff1197Brian Paul   /** Signed integer coordinates */
2230a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_type int_coord_type;
2240a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_build_context int_coord_bld;
2250a7824862eb753878fa79b153b2a111884ff1197Brian Paul
226321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca   /** Unsigned integer texture size */
227438390418d27838bcfcb5bbb4c486db45dbaa44dJosé Fonseca   struct lp_type int_size_type;
228438390418d27838bcfcb5bbb4c486db45dbaa44dJosé Fonseca   struct lp_build_context int_size_bld;
229321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca
230321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca   /** Unsigned integer texture size */
231321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca   struct lp_type float_size_type;
232321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca   struct lp_build_context float_size_bld;
233321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca
2340a7824862eb753878fa79b153b2a111884ff1197Brian Paul   /** Output texels type and build context */
2350a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_type texel_type;
2360a7824862eb753878fa79b153b2a111884ff1197Brian Paul   struct lp_build_context texel_bld;
237321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonseca
2383469715a8a171512cf9b528702e70393f01c6041José Fonseca   /** Float per-quad type */
2393469715a8a171512cf9b528702e70393f01c6041José Fonseca   struct lp_type perquadf_type;
2403469715a8a171512cf9b528702e70393f01c6041José Fonseca   struct lp_build_context perquadf_bld;
2413469715a8a171512cf9b528702e70393f01c6041José Fonseca
2423469715a8a171512cf9b528702e70393f01c6041José Fonseca   /** Int per-quad type */
2433469715a8a171512cf9b528702e70393f01c6041José Fonseca   struct lp_type perquadi_type;
2443469715a8a171512cf9b528702e70393f01c6041José Fonseca   struct lp_build_context perquadi_bld;
2453469715a8a171512cf9b528702e70393f01c6041José Fonseca
246f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca   /* Common dynamic state values */
247f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca   LLVMValueRef row_stride_array;
248f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca   LLVMValueRef img_stride_array;
249f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca   LLVMValueRef data_array;
250f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca
251438390418d27838bcfcb5bbb4c486db45dbaa44dJosé Fonseca   /** Integer vector with texture width, height, depth */
252438390418d27838bcfcb5bbb4c486db45dbaa44dJosé Fonseca   LLVMValueRef int_size;
2530a7824862eb753878fa79b153b2a111884ff1197Brian Paul};
2540a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2550a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2560a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2570a7824862eb753878fa79b153b2a111884ff1197Brian Paul/**
2580a7824862eb753878fa79b153b2a111884ff1197Brian Paul * We only support a few wrap modes in lp_build_sample_wrap_linear_int() at
2590a7824862eb753878fa79b153b2a111884ff1197Brian Paul * this time.  Return whether the given mode is supported by that function.
2600a7824862eb753878fa79b153b2a111884ff1197Brian Paul */
2610a7824862eb753878fa79b153b2a111884ff1197Brian Paulstatic INLINE boolean
2620a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_is_simple_wrap_mode(unsigned mode)
2630a7824862eb753878fa79b153b2a111884ff1197Brian Paul{
2640a7824862eb753878fa79b153b2a111884ff1197Brian Paul   switch (mode) {
2650a7824862eb753878fa79b153b2a111884ff1197Brian Paul   case PIPE_TEX_WRAP_REPEAT:
2660a7824862eb753878fa79b153b2a111884ff1197Brian Paul   case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
2670a7824862eb753878fa79b153b2a111884ff1197Brian Paul      return TRUE;
2680a7824862eb753878fa79b153b2a111884ff1197Brian Paul   default:
2690a7824862eb753878fa79b153b2a111884ff1197Brian Paul      return FALSE;
2700a7824862eb753878fa79b153b2a111884ff1197Brian Paul   }
2710a7824862eb753878fa79b153b2a111884ff1197Brian Paul}
2720a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2730a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2740a7824862eb753878fa79b153b2a111884ff1197Brian Paulstatic INLINE void
2750a7824862eb753878fa79b153b2a111884ff1197Brian Paulapply_sampler_swizzle(struct lp_build_sample_context *bld,
2760a7824862eb753878fa79b153b2a111884ff1197Brian Paul                      LLVMValueRef *texel)
2770a7824862eb753878fa79b153b2a111884ff1197Brian Paul{
2780a7824862eb753878fa79b153b2a111884ff1197Brian Paul   unsigned char swizzles[4];
2790a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2800a7824862eb753878fa79b153b2a111884ff1197Brian Paul   swizzles[0] = bld->static_state->swizzle_r;
2810a7824862eb753878fa79b153b2a111884ff1197Brian Paul   swizzles[1] = bld->static_state->swizzle_g;
2820a7824862eb753878fa79b153b2a111884ff1197Brian Paul   swizzles[2] = bld->static_state->swizzle_b;
2830a7824862eb753878fa79b153b2a111884ff1197Brian Paul   swizzles[3] = bld->static_state->swizzle_a;
2840a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2850a7824862eb753878fa79b153b2a111884ff1197Brian Paul   lp_build_swizzle_soa_inplace(&bld->texel_bld, texel, swizzles);
2860a7824862eb753878fa79b153b2a111884ff1197Brian Paul}
2870a7824862eb753878fa79b153b2a111884ff1197Brian Paul
2880a7824862eb753878fa79b153b2a111884ff1197Brian Paul
289321ec1a22468c1f23bbbf7d5c9de53d4687fec0cJosé Fonsecastatic INLINE unsigned
2900a7824862eb753878fa79b153b2a111884ff1197Brian Paultexture_dims(enum pipe_texture_target tex)
2910a7824862eb753878fa79b153b2a111884ff1197Brian Paul{
2920a7824862eb753878fa79b153b2a111884ff1197Brian Paul   switch (tex) {
2930a7824862eb753878fa79b153b2a111884ff1197Brian Paul   case PIPE_TEXTURE_1D:
2940a7824862eb753878fa79b153b2a111884ff1197Brian Paul      return 1;
2950a7824862eb753878fa79b153b2a111884ff1197Brian Paul   case PIPE_TEXTURE_2D:
296c70d539e24c901c54f427b91997f8ca566847f33Brian Paul   case PIPE_TEXTURE_RECT:
2970a7824862eb753878fa79b153b2a111884ff1197Brian Paul   case PIPE_TEXTURE_CUBE:
2980a7824862eb753878fa79b153b2a111884ff1197Brian Paul      return 2;
2990a7824862eb753878fa79b153b2a111884ff1197Brian Paul   case PIPE_TEXTURE_3D:
3000a7824862eb753878fa79b153b2a111884ff1197Brian Paul      return 3;
3010a7824862eb753878fa79b153b2a111884ff1197Brian Paul   default:
3020a7824862eb753878fa79b153b2a111884ff1197Brian Paul      assert(0 && "bad texture target in texture_dims()");
3030a7824862eb753878fa79b153b2a111884ff1197Brian Paul      return 2;
3040a7824862eb753878fa79b153b2a111884ff1197Brian Paul   }
3050a7824862eb753878fa79b153b2a111884ff1197Brian Paul}
3060a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3070a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3084e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013José Fonsecaboolean
3094e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013José Fonsecalp_sampler_wrap_mode_uses_border_color(unsigned mode,
3104e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013José Fonseca                                       unsigned min_img_filter,
3114e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013José Fonseca                                       unsigned mag_img_filter);
3124e6f5e8d43ee87c6f8cdc75de2eeb96f70beb013José Fonseca
3130a7824862eb753878fa79b153b2a111884ff1197Brian Paul/**
314de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca * Derive the sampler static state.
315de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca */
316de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecavoid
317de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecalp_sampler_static_state(struct lp_sampler_static_state *state,
318d67e3487ac4c678892d0aea535cacfd5f1d86a27José Fonseca                        const struct pipe_sampler_view *view,
319de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                        const struct pipe_sampler_state *sampler);
320de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
321de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
32287dd859b342b844add906358810445da21b6b092José Fonsecavoid
3230a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_build_lod_selector(struct lp_build_sample_context *bld,
32461b7da074e2faebf03d3dfc30e910ee1367bcd5aBrian Paul                      unsigned unit,
3253469715a8a171512cf9b528702e70393f01c6041José Fonseca                      const struct lp_derivatives *derivs,
3260a7824862eb753878fa79b153b2a111884ff1197Brian Paul                      LLVMValueRef lod_bias, /* optional */
3270a7824862eb753878fa79b153b2a111884ff1197Brian Paul                      LLVMValueRef explicit_lod, /* optional */
32887dd859b342b844add906358810445da21b6b092José Fonseca                      unsigned mip_filter,
32987dd859b342b844add906358810445da21b6b092José Fonseca                      LLVMValueRef *out_lod_ipart,
33087dd859b342b844add906358810445da21b6b092José Fonseca                      LLVMValueRef *out_lod_fpart);
3310a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3320a7824862eb753878fa79b153b2a111884ff1197Brian Paulvoid
3330a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_build_nearest_mip_level(struct lp_build_sample_context *bld,
3340a7824862eb753878fa79b153b2a111884ff1197Brian Paul                           unsigned unit,
3350a7824862eb753878fa79b153b2a111884ff1197Brian Paul                           LLVMValueRef lod,
3360a7824862eb753878fa79b153b2a111884ff1197Brian Paul                           LLVMValueRef *level_out);
3370a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3380a7824862eb753878fa79b153b2a111884ff1197Brian Paulvoid
3390a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_build_linear_mip_levels(struct lp_build_sample_context *bld,
3400a7824862eb753878fa79b153b2a111884ff1197Brian Paul                           unsigned unit,
34187dd859b342b844add906358810445da21b6b092José Fonseca                           LLVMValueRef lod_ipart,
342df7a2451b1a7b9ce8cc389b20bb707cf951f8d4eJosé Fonseca                           LLVMValueRef *lod_fpart_inout,
3430a7824862eb753878fa79b153b2a111884ff1197Brian Paul                           LLVMValueRef *level0_out,
34487dd859b342b844add906358810445da21b6b092José Fonseca                           LLVMValueRef *level1_out);
3450a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3460a7824862eb753878fa79b153b2a111884ff1197Brian PaulLLVMValueRef
3470a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_build_get_mipmap_level(struct lp_build_sample_context *bld,
348f5b5fb32d3a9eb8667f91907bcf065fe8bd4988dJosé Fonseca                          LLVMValueRef level);
3490a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3500a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3510a7824862eb753878fa79b153b2a111884ff1197Brian Paulvoid
3520a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_build_mipmap_level_sizes(struct lp_build_sample_context *bld,
35305fe33b71cd913876184d1aa4086e4e3f8636eb1José Fonseca                            LLVMValueRef ilevel,
35434c11c87e4e3b5639764abee413c45e918749477José Fonseca                            LLVMValueRef *out_size_vec,
35505fe33b71cd913876184d1aa4086e4e3f8636eb1José Fonseca                            LLVMValueRef *row_stride_vec,
35605fe33b71cd913876184d1aa4086e4e3f8636eb1José Fonseca                            LLVMValueRef *img_stride_vec);
3570a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3580a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3590a7824862eb753878fa79b153b2a111884ff1197Brian Paulvoid
36034c11c87e4e3b5639764abee413c45e918749477José Fonsecalp_build_extract_image_sizes(struct lp_build_sample_context *bld,
36134c11c87e4e3b5639764abee413c45e918749477José Fonseca                             struct lp_type size_type,
36234c11c87e4e3b5639764abee413c45e918749477José Fonseca                             struct lp_type coord_type,
36334c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef size,
36434c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef *out_width,
36534c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef *out_height,
36634c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef *out_depth);
36734c11c87e4e3b5639764abee413c45e918749477José Fonseca
36834c11c87e4e3b5639764abee413c45e918749477José Fonseca
36934c11c87e4e3b5639764abee413c45e918749477José Fonsecavoid
37034c11c87e4e3b5639764abee413c45e918749477José Fonsecalp_build_unnormalized_coords(struct lp_build_sample_context *bld,
37134c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef flt_size,
37234c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef *s,
37334c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef *t,
37434c11c87e4e3b5639764abee413c45e918749477José Fonseca                             LLVMValueRef *r);
37534c11c87e4e3b5639764abee413c45e918749477José Fonseca
37634c11c87e4e3b5639764abee413c45e918749477José Fonseca
37734c11c87e4e3b5639764abee413c45e918749477José Fonsecavoid
3780a7824862eb753878fa79b153b2a111884ff1197Brian Paullp_build_cube_lookup(struct lp_build_sample_context *bld,
3790a7824862eb753878fa79b153b2a111884ff1197Brian Paul                     LLVMValueRef s,
3800a7824862eb753878fa79b153b2a111884ff1197Brian Paul                     LLVMValueRef t,
3810a7824862eb753878fa79b153b2a111884ff1197Brian Paul                     LLVMValueRef r,
3820a7824862eb753878fa79b153b2a111884ff1197Brian Paul                     LLVMValueRef *face,
3830a7824862eb753878fa79b153b2a111884ff1197Brian Paul                     LLVMValueRef *face_s,
3840a7824862eb753878fa79b153b2a111884ff1197Brian Paul                     LLVMValueRef *face_t);
3850a7824862eb753878fa79b153b2a111884ff1197Brian Paul
3860a7824862eb753878fa79b153b2a111884ff1197Brian Paul
387d981bde38472d8d3bb74dab67eccd7c82915a566José Fonsecavoid
3880a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonsecalp_build_sample_partial_offset(struct lp_build_context *bld,
3890a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca                               unsigned block_length,
3900a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca                               LLVMValueRef coord,
3910a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca                               LLVMValueRef stride,
3920a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca                               LLVMValueRef *out_offset,
3930a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca                               LLVMValueRef *out_i);
3940a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca
3950a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonseca
3960a6c908e0d2d1721421f7b26d73975f4f61e24a2José Fonsecavoid
397bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonsecalp_build_sample_offset(struct lp_build_context *bld,
398bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca                       const struct util_format_description *format_desc,
399bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca                       LLVMValueRef x,
400bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca                       LLVMValueRef y,
40167a2f98be79b368c316ebe6731112734d306b3f6Brian Paul                       LLVMValueRef z,
40267a2f98be79b368c316ebe6731112734d306b3f6Brian Paul                       LLVMValueRef y_stride,
403d981bde38472d8d3bb74dab67eccd7c82915a566José Fonseca                       LLVMValueRef z_stride,
404d981bde38472d8d3bb74dab67eccd7c82915a566José Fonseca                       LLVMValueRef *out_offset,
405d981bde38472d8d3bb74dab67eccd7c82915a566José Fonseca                       LLVMValueRef *out_i,
406d981bde38472d8d3bb74dab67eccd7c82915a566José Fonseca                       LLVMValueRef *out_j);
407bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca
408bc93e9181cf179a797679d30cd1a3a563e1756c0José Fonseca
409de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonsecavoid
410efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_sample_soa(struct gallivm_state *gallivm,
411de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                    const struct lp_sampler_static_state *static_state,
412de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                    struct lp_sampler_dynamic_state *dynamic_state,
413b4835ea03d64261da5a892f9590c9977b06920e8José Fonseca                    struct lp_type fp_type,
414de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                    unsigned unit,
415de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                    unsigned num_coords,
416de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca                    const LLVMValueRef *coords,
4173469715a8a171512cf9b528702e70393f01c6041José Fonseca                    const struct lp_derivatives *derivs,
418ec43b2eb45a1b2e33f328f76624c987484e329f3José Fonseca                    LLVMValueRef lod_bias,
419ec43b2eb45a1b2e33f328f76624c987484e329f3José Fonseca                    LLVMValueRef explicit_lod,
4201cd31459afa7ea859a7c1e6abb1fc4ae2f0060edBrian Paul                    LLVMValueRef texel_out[4]);
421de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
4223469715a8a171512cf9b528702e70393f01c6041José Fonseca
4233469715a8a171512cf9b528702e70393f01c6041José Fonsecavoid
4243469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_coord_repeat_npot_linear(struct lp_build_sample_context *bld,
4253469715a8a171512cf9b528702e70393f01c6041José Fonseca                                  LLVMValueRef coord_f,
4263469715a8a171512cf9b528702e70393f01c6041José Fonseca                                  LLVMValueRef length_i,
4273469715a8a171512cf9b528702e70393f01c6041José Fonseca                                  LLVMValueRef length_f,
4283469715a8a171512cf9b528702e70393f01c6041José Fonseca                                  LLVMValueRef *coord0_i,
4293469715a8a171512cf9b528702e70393f01c6041José Fonseca                                  LLVMValueRef *weight_f);
4303469715a8a171512cf9b528702e70393f01c6041José Fonseca
4313469715a8a171512cf9b528702e70393f01c6041José Fonseca
432045ee4601179c44f815ce3842ef900b36d54c914Keith Whitwellvoid
4335d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibertlp_build_size_query_soa(struct gallivm_state *gallivm,
4345d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                        const struct lp_sampler_static_state *static_state,
4355d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                        struct lp_sampler_dynamic_state *dynamic_state,
4363469715a8a171512cf9b528702e70393f01c6041José Fonseca                        struct lp_type int_type,
4375d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                        unsigned unit,
4385d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                        LLVMValueRef explicit_lod,
4395d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                        LLVMValueRef *sizes_out);
4405d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert
4415d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibertvoid
4423469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_sample_nop(struct gallivm_state *gallivm,
4433469715a8a171512cf9b528702e70393f01c6041José Fonseca                    struct lp_type type,
4443469715a8a171512cf9b528702e70393f01c6041José Fonseca                    unsigned num_coords,
4453469715a8a171512cf9b528702e70393f01c6041José Fonseca                    const LLVMValueRef *coords,
446045ee4601179c44f815ce3842ef900b36d54c914Keith Whitwell                    LLVMValueRef texel_out[4]);
447de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
448de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca
4495d10d757276a599a60a68b88b21087b5824a8df7Olivier GalibertLLVMValueRef
4505d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibertlp_build_minify(struct lp_build_context *bld,
4515d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                LLVMValueRef base_size,
4525d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert                LLVMValueRef level);
4535d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert
4545d10d757276a599a60a68b88b21087b5824a8df7Olivier Galibert
455de8376e2f22a59a0bc18bb7ddab88ee3153678b8José Fonseca#endif /* LP_BLD_SAMPLE_H */
456