diff options
author | Chia-I Wu <[email protected]> | 2013-06-20 11:52:03 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2013-06-25 11:51:26 +0800 |
commit | 4d789c76dce580d754fe146041d7a1118524a4ff (patch) | |
tree | 1dfb91a20b86170042dd37a2172c9a554f5912d7 /src/gallium/drivers/ilo/shader | |
parent | e3cbb18321b530ab01f57f21b22d38b89efcaec4 (diff) |
ilo: move internal shader interface to a new header
Move it to ilo_shader_internal.h. The goal is to make files not part of the
compiler include only ilo_shader.h eventually.
Diffstat (limited to 'src/gallium/drivers/ilo/shader')
-rw-r--r-- | src/gallium/drivers/ilo/shader/ilo_shader_cs.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/shader/ilo_shader_fs.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/shader/ilo_shader_gs.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/shader/ilo_shader_internal.h | 212 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/shader/ilo_shader_vs.c | 2 |
5 files changed, 216 insertions, 4 deletions
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_cs.c b/src/gallium/drivers/ilo/shader/ilo_shader_cs.c index 85182f2a1b7..880ec57ae41 100644 --- a/src/gallium/drivers/ilo/shader/ilo_shader_cs.c +++ b/src/gallium/drivers/ilo/shader/ilo_shader_cs.c @@ -25,7 +25,7 @@ * Chia-I Wu <[email protected]> */ -#include "ilo_shader.h" +#include "ilo_shader_internal.h" /** * Compile the compute shader. diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_fs.c b/src/gallium/drivers/ilo/shader/ilo_shader_fs.c index b414b50365c..eca118aa2a1 100644 --- a/src/gallium/drivers/ilo/shader/ilo_shader_fs.c +++ b/src/gallium/drivers/ilo/shader/ilo_shader_fs.c @@ -33,7 +33,7 @@ #include "toy_optimize.h" #include "toy_helpers.h" #include "ilo_context.h" -#include "ilo_shader.h" +#include "ilo_shader_internal.h" struct fs_compile_context { struct ilo_shader *shader; diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_gs.c b/src/gallium/drivers/ilo/shader/ilo_shader_gs.c index caa0b17b9c7..c4266f41b0c 100644 --- a/src/gallium/drivers/ilo/shader/ilo_shader_gs.c +++ b/src/gallium/drivers/ilo/shader/ilo_shader_gs.c @@ -31,7 +31,7 @@ #include "toy_legalize.h" #include "toy_optimize.h" #include "toy_helpers.h" -#include "ilo_shader.h" +#include "ilo_shader_internal.h" /* XXX Below is proof-of-concept code. Skip this file! */ diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_internal.h b/src/gallium/drivers/ilo/shader/ilo_shader_internal.h new file mode 100644 index 00000000000..c444e564dab --- /dev/null +++ b/src/gallium/drivers/ilo/shader/ilo_shader_internal.h @@ -0,0 +1,212 @@ +/* + * Mesa 3-D graphics library + * + * Copyright (C) 2012-2013 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Chia-I Wu <[email protected]> + */ + +#ifndef ILO_SHADER_INTERNAL_H +#define ILO_SHADER_INTERNAL_H + +#include "ilo_common.h" +#include "ilo_context.h" + +/* XXX The interface needs to be reworked */ + +/** + * A shader variant. It consists of non-orthogonal states of the pipe context + * affecting the compilation of a shader. + */ +struct ilo_shader_variant { + union { + struct { + bool rasterizer_discard; + int num_ucps; + } vs; + + struct { + bool rasterizer_discard; + int num_inputs; + int semantic_names[PIPE_MAX_SHADER_INPUTS]; + int semantic_indices[PIPE_MAX_SHADER_INPUTS]; + } gs; + + struct { + bool flatshade; + int fb_height; + int num_cbufs; + } fs; + } u; + + int num_sampler_views; + struct { + unsigned r:3; + unsigned g:3; + unsigned b:3; + unsigned a:3; + } sampler_view_swizzles[ILO_MAX_SAMPLER_VIEWS]; + + uint32_t saturate_tex_coords[3]; +}; + +/** + * A compiled shader. + */ +struct ilo_shader { + struct ilo_shader_variant variant; + + struct { + int semantic_names[PIPE_MAX_SHADER_INPUTS]; + int semantic_indices[PIPE_MAX_SHADER_INPUTS]; + int interp[PIPE_MAX_SHADER_INPUTS]; + bool centroid[PIPE_MAX_SHADER_INPUTS]; + int count; + + int start_grf; + bool has_pos; + bool has_linear_interp; + int barycentric_interpolation_mode; + bool discard_adj; + } in; + + struct { + int register_indices[PIPE_MAX_SHADER_OUTPUTS]; + int semantic_names[PIPE_MAX_SHADER_OUTPUTS]; + int semantic_indices[PIPE_MAX_SHADER_OUTPUTS]; + int count; + + bool has_pos; + } out; + + bool has_kill; + bool dispatch_16; + + bool stream_output; + int svbi_post_inc; + /* for VS stream output / rasterizer discard */ + int gs_offsets[3]; + int gs_start_grf; + + void *kernel; + int kernel_size; + + /* what does the push constant buffer consist of? */ + struct { + int clip_state_size; + } pcb; + + struct list_head list; + + /* managed by shader cache */ + bool uploaded; + uint32_t cache_offset; +}; + +/** + * Information about a shader state. + */ +struct ilo_shader_info { + const struct ilo_dev_info *dev; + int type; + + const struct tgsi_token *tokens; + + struct pipe_stream_output_info stream_output; + struct { + unsigned req_local_mem; + unsigned req_private_mem; + unsigned req_input_mem; + } compute; + + bool has_color_interp; + bool has_pos; + bool has_vertexid; + bool has_instanceid; + bool fs_color0_writes_all_cbufs; + + int edgeflag_in; + int edgeflag_out; + + uint32_t shadow_samplers; + int num_samplers; +}; + +/** + * A shader state. + */ +struct ilo_shader_state { + struct ilo_shader_info info; + + struct list_head variants; + int num_variants, total_size; + + struct ilo_shader *shader; + + /* managed by shader cache */ + struct ilo_shader_cache *cache; + struct list_head list; +}; + +void +ilo_shader_variant_init(struct ilo_shader_variant *variant, + const struct ilo_shader_info *info, + const struct ilo_context *ilo); + +struct ilo_shader * +ilo_shader_state_add_variant(struct ilo_shader_state *state, + const struct ilo_shader_variant *variant); + +bool +ilo_shader_state_use_variant(struct ilo_shader_state *state, + const struct ilo_shader_variant *variant); + +struct ilo_shader * +ilo_shader_compile_vs(const struct ilo_shader_state *state, + const struct ilo_shader_variant *variant); + +struct ilo_shader * +ilo_shader_compile_gs(const struct ilo_shader_state *state, + const struct ilo_shader_variant *variant); + +bool +ilo_shader_compile_gs_passthrough(const struct ilo_shader_state *vs_state, + const struct ilo_shader_variant *vs_variant, + const int *so_mapping, + struct ilo_shader *vs); + +struct ilo_shader * +ilo_shader_compile_fs(const struct ilo_shader_state *state, + const struct ilo_shader_variant *variant); + +struct ilo_shader * +ilo_shader_compile_cs(const struct ilo_shader_state *state, + const struct ilo_shader_variant *variant); + +static inline void +ilo_shader_destroy(struct ilo_shader *sh) +{ + FREE(sh->kernel); + FREE(sh); +} + +#endif /* ILO_SHADER_INTERNAL_H */ diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_vs.c b/src/gallium/drivers/ilo/shader/ilo_shader_vs.c index 3563d0b9114..fcb9cb53e55 100644 --- a/src/gallium/drivers/ilo/shader/ilo_shader_vs.c +++ b/src/gallium/drivers/ilo/shader/ilo_shader_vs.c @@ -33,7 +33,7 @@ #include "toy_optimize.h" #include "toy_helpers.h" #include "ilo_context.h" -#include "ilo_shader.h" +#include "ilo_shader_internal.h" struct vs_compile_context { struct ilo_shader *shader; |