From 4d789c76dce580d754fe146041d7a1118524a4ff Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 20 Jun 2013 11:52:03 +0800 Subject: [PATCH] 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. --- .../drivers/ilo/ilo_3d_pipeline_gen6.c | 1 + .../drivers/ilo/ilo_3d_pipeline_gen7.c | 1 + src/gallium/drivers/ilo/ilo_gpe_gen6.c | 1 + src/gallium/drivers/ilo/ilo_gpe_gen6.h | 1 + src/gallium/drivers/ilo/ilo_gpe_gen7.c | 1 + src/gallium/drivers/ilo/ilo_shader.c | 1 + src/gallium/drivers/ilo/ilo_shader.h | 182 +-------------- src/gallium/drivers/ilo/ilo_state.c | 1 + .../drivers/ilo/shader/ilo_shader_cs.c | 2 +- .../drivers/ilo/shader/ilo_shader_fs.c | 2 +- .../drivers/ilo/shader/ilo_shader_gs.c | 2 +- .../drivers/ilo/shader/ilo_shader_internal.h | 212 ++++++++++++++++++ .../drivers/ilo/shader/ilo_shader_vs.c | 2 +- 13 files changed, 226 insertions(+), 183 deletions(-) create mode 100644 src/gallium/drivers/ilo/shader/ilo_shader_internal.h diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c index 1f855dc34d0..228131c2612 100644 --- a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c +++ b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c @@ -29,6 +29,7 @@ #include "util/u_prim.h" #include "intel_reg.h" +#include "shader/ilo_shader_internal.h" #include "ilo_3d.h" #include "ilo_context.h" #include "ilo_cp.h" diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c index 1c7260f7fd1..ed88f465d86 100644 --- a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c +++ b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c @@ -28,6 +28,7 @@ #include "util/u_dual_blend.h" #include "intel_reg.h" +#include "shader/ilo_shader_internal.h" #include "ilo_common.h" #include "ilo_context.h" #include "ilo_cp.h" diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen6.c b/src/gallium/drivers/ilo/ilo_gpe_gen6.c index 56db7da8ee3..5a18fead0f3 100644 --- a/src/gallium/drivers/ilo/ilo_gpe_gen6.c +++ b/src/gallium/drivers/ilo/ilo_gpe_gen6.c @@ -30,6 +30,7 @@ #include "brw_defines.h" #include "intel_reg.h" +#include "shader/ilo_shader_internal.h" #include "ilo_context.h" #include "ilo_cp.h" #include "ilo_format.h" diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen6.h b/src/gallium/drivers/ilo/ilo_gpe_gen6.h index 6e273645471..5f2b85aebb3 100644 --- a/src/gallium/drivers/ilo/ilo_gpe_gen6.h +++ b/src/gallium/drivers/ilo/ilo_gpe_gen6.h @@ -29,6 +29,7 @@ #define ILO_GPE_GEN6_H #include "ilo_common.h" +#include "ilo_gpe.h" #define ILO_GPE_VALID_GEN(dev, min_gen, max_gen) \ assert((dev)->gen >= ILO_GEN(min_gen) && (dev)->gen <= ILO_GEN(max_gen)) diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen7.c b/src/gallium/drivers/ilo/ilo_gpe_gen7.c index c3211b53873..74ba793dea1 100644 --- a/src/gallium/drivers/ilo/ilo_gpe_gen7.c +++ b/src/gallium/drivers/ilo/ilo_gpe_gen7.c @@ -29,6 +29,7 @@ #include "brw_defines.h" #include "intel_reg.h" +#include "shader/ilo_shader_internal.h" #include "ilo_cp.h" #include "ilo_format.h" #include "ilo_resource.h" diff --git a/src/gallium/drivers/ilo/ilo_shader.c b/src/gallium/drivers/ilo/ilo_shader.c index 584e1301f35..765cc037806 100644 --- a/src/gallium/drivers/ilo/ilo_shader.c +++ b/src/gallium/drivers/ilo/ilo_shader.c @@ -28,6 +28,7 @@ #include "tgsi/tgsi_parse.h" #include "intel_winsys.h" +#include "shader/ilo_shader_internal.h" #include "ilo_shader.h" struct ilo_shader_cache { diff --git a/src/gallium/drivers/ilo/ilo_shader.h b/src/gallium/drivers/ilo/ilo_shader.h index 9318785adbd..f286a9f785f 100644 --- a/src/gallium/drivers/ilo/ilo_shader.h +++ b/src/gallium/drivers/ilo/ilo_shader.h @@ -29,145 +29,11 @@ #define ILO_SHADER_H #include "ilo_common.h" -#include "ilo_context.h" +struct intel_bo; +struct ilo_context; struct ilo_shader_cache; - -/* 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; -}; +struct ilo_shader_state; struct ilo_shader_cache * ilo_shader_cache_create(void); @@ -188,11 +54,6 @@ ilo_shader_cache_upload(struct ilo_shader_cache *shc, struct intel_bo *bo, unsigned offset, bool incremental); -void -ilo_shader_variant_init(struct ilo_shader_variant *variant, - const struct ilo_shader_info *info, - const struct ilo_context *ilo); - struct ilo_shader_state * ilo_shader_state_create(const struct ilo_context *ilo, int type, const void *templ); @@ -200,41 +61,4 @@ ilo_shader_state_create(const struct ilo_context *ilo, void ilo_shader_state_destroy(struct ilo_shader_state *state); -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_H */ diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c index b284e7c112b..80fa7414e82 100644 --- a/src/gallium/drivers/ilo/ilo_state.c +++ b/src/gallium/drivers/ilo/ilo_state.c @@ -28,6 +28,7 @@ #include "util/u_framebuffer.h" #include "util/u_helpers.h" +#include "shader/ilo_shader_internal.h" #include "ilo_context.h" #include "ilo_resource.h" #include "ilo_shader.h" 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 */ -#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 + */ + +#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;