161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu/*
261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * Mesa 3-D graphics library
361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu *
461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * Copyright (C) 2015 LunarG, Inc.
561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu *
661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * copy of this software and associated documentation files (the "Software"),
861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * to deal in the Software without restriction, including without limitation
961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the
1161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * Software is furnished to do so, subject to the following conditions:
1261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu *
1361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * The above copyright notice and this permission notice shall be included
1461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * in all copies or substantial portions of the Software.
1561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu *
1661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * DEALINGS IN THE SOFTWARE.
2361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu *
2461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu * Authors:
2561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu *    Chia-I Wu <olv@lunarg.com>
2661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu */
2761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
2861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu#ifndef ILO_STATE_SAMPLER_H
2961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu#define ILO_STATE_SAMPLER_H
3061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
3161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu#include "genhw/genhw.h"
3261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
3361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu#include "ilo_core.h"
3461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu#include "ilo_dev.h"
3561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
3661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wustruct ilo_state_surface;
3761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
3861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wustruct ilo_state_sampler_info {
3961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   bool non_normalized;
4061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
4161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   float lod_bias;
4261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   float min_lod;
4361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   float max_lod;
4461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
4561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_mip_filter mip_filter;
4661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_map_filter min_filter;
4761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_map_filter mag_filter;
4861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_aniso_ratio max_anisotropy;
4961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
5061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_texcoord_mode tcx_ctrl;
5161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_texcoord_mode tcy_ctrl;
5261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_texcoord_mode tcz_ctrl;
5361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
5461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   enum gen_prefilter_op shadow_func;
5561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu};
5661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
5761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wustruct ilo_state_sampler_border_info {
5861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   union {
5961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu      float f[4];
6061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu      uint32_t ui[4];
6161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   } rgba;
6261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
6361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   bool is_integer;
6461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu};
6561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
6661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wustruct ilo_state_sampler {
6761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t sampler[3];
6861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
6961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t filter_integer;
7061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t filter_3d;
7161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
7261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t addr_ctrl_1d;
7361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t addr_ctrl_2d_3d;
7461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t addr_ctrl_cube;
7561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
7661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   bool non_normalized;
7761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   bool base_to_surf_min_lod;
7861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu};
7961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
8061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wustruct ilo_state_sampler_border {
8161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu   uint32_t color[12];
8261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu};
8361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
8461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wubool
8561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wuilo_state_sampler_init(struct ilo_state_sampler *sampler,
8661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                       const struct ilo_dev *dev,
8761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                       const struct ilo_state_sampler_info *info);
8861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
8961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wubool
9061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wuilo_state_sampler_init_disabled(struct ilo_state_sampler *sampler,
9161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                                const struct ilo_dev *dev);
9261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
9361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wubool
9461fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wuilo_state_sampler_set_surface(struct ilo_state_sampler *sampler,
9561fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                              const struct ilo_dev *dev,
9661fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                              const struct ilo_state_surface *surf);
9761fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
9861fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wubool
9961fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wuilo_state_sampler_border_init(struct ilo_state_sampler_border *border,
10061fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                              const struct ilo_dev *dev,
10161fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu                              const struct ilo_state_sampler_border_info *info);
10261fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu
10361fea171af64288bdf622e7ecf07e3ca42f83974Chia-I Wu#endif /* ILO_STATE_SAMPLER_H */
104