diff options
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r-- | src/gallium/drivers/ilo/Makefile.sources | 1 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_3d_pipeline.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_blit.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_blitter.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_blitter_rectlist.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_builder_3d_top.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_context.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_gpe.h | 535 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_shader.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_state.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_state.h | 258 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_state_gen.h | 246 | ||||
-rw-r--r-- | src/gallium/drivers/ilo/ilo_state_gen7.c | 2 |
13 files changed, 513 insertions, 544 deletions
diff --git a/src/gallium/drivers/ilo/Makefile.sources b/src/gallium/drivers/ilo/Makefile.sources index de3bb67cd72..f88e0d56d59 100644 --- a/src/gallium/drivers/ilo/Makefile.sources +++ b/src/gallium/drivers/ilo/Makefile.sources @@ -31,7 +31,6 @@ C_SOURCES := \ ilo_cp.h \ ilo_format.c \ ilo_format.h \ - ilo_gpe.h \ ilo_gpgpu.c \ ilo_gpgpu.h \ ilo_layout.c \ diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline.h b/src/gallium/drivers/ilo/ilo_3d_pipeline.h index d5771c49641..5c41b0bb32b 100644 --- a/src/gallium/drivers/ilo/ilo_3d_pipeline.h +++ b/src/gallium/drivers/ilo/ilo_3d_pipeline.h @@ -29,7 +29,7 @@ #define ILO_3D_PIPELINE_H #include "ilo_common.h" -#include "ilo_gpe.h" +#include "ilo_state.h" struct intel_bo; struct ilo_blitter; diff --git a/src/gallium/drivers/ilo/ilo_blit.h b/src/gallium/drivers/ilo/ilo_blit.h index 1e954083983..fe228f879b9 100644 --- a/src/gallium/drivers/ilo/ilo_blit.h +++ b/src/gallium/drivers/ilo/ilo_blit.h @@ -30,7 +30,7 @@ #include "ilo_common.h" #include "ilo_context.h" -#include "ilo_gpe.h" +#include "ilo_state.h" #include "ilo_resource.h" struct ilo_context; diff --git a/src/gallium/drivers/ilo/ilo_blitter.h b/src/gallium/drivers/ilo/ilo_blitter.h index c2c86c04e90..9ace52d3071 100644 --- a/src/gallium/drivers/ilo/ilo_blitter.h +++ b/src/gallium/drivers/ilo/ilo_blitter.h @@ -30,7 +30,7 @@ #include "ilo_common.h" #include "ilo_context.h" -#include "ilo_gpe.h" +#include "ilo_state.h" enum ilo_blitter_uses { ILO_BLITTER_USE_DSA = 1 << 0, diff --git a/src/gallium/drivers/ilo/ilo_blitter_rectlist.c b/src/gallium/drivers/ilo/ilo_blitter_rectlist.c index a243507e844..ced28518ebd 100644 --- a/src/gallium/drivers/ilo/ilo_blitter_rectlist.c +++ b/src/gallium/drivers/ilo/ilo_blitter_rectlist.c @@ -31,9 +31,9 @@ #include "ilo_3d.h" #include "ilo_3d_pipeline.h" #include "ilo_builder_3d_top.h" /* for ve_init_cso_with_components() */ +#include "ilo_state.h" #include "ilo_state_gen.h" /* for zs_align_surface() */ #include "ilo_blit.h" -#include "ilo_gpe.h" #include "ilo_blitter.h" /** diff --git a/src/gallium/drivers/ilo/ilo_builder_3d_top.h b/src/gallium/drivers/ilo/ilo_builder_3d_top.h index 8bce317bc33..4b08b829141 100644 --- a/src/gallium/drivers/ilo/ilo_builder_3d_top.h +++ b/src/gallium/drivers/ilo/ilo_builder_3d_top.h @@ -32,9 +32,10 @@ #include "intel_winsys.h" #include "ilo_common.h" -#include "ilo_gpe.h" #include "ilo_resource.h" #include "ilo_shader.h" +#include "ilo_state.h" +#include "ilo_state_gen.h" #include "ilo_builder.h" static inline void diff --git a/src/gallium/drivers/ilo/ilo_context.h b/src/gallium/drivers/ilo/ilo_context.h index d3c74a4db1b..d9607a51052 100644 --- a/src/gallium/drivers/ilo/ilo_context.h +++ b/src/gallium/drivers/ilo/ilo_context.h @@ -31,8 +31,8 @@ #include "pipe/p_context.h" #include "util/u_slab.h" -#include "ilo_gpe.h" #include "ilo_common.h" +#include "ilo_state.h" struct pipe_draw_info; struct u_upload_mgr; diff --git a/src/gallium/drivers/ilo/ilo_gpe.h b/src/gallium/drivers/ilo/ilo_gpe.h deleted file mode 100644 index f3d1bb53d3e..00000000000 --- a/src/gallium/drivers/ilo/ilo_gpe.h +++ /dev/null @@ -1,535 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 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_GPE_H -#define ILO_GPE_H - -#include "ilo_common.h" - -/** - * \see brw_context.h - */ -#define ILO_MAX_DRAW_BUFFERS 8 -#define ILO_MAX_CONST_BUFFERS (1 + 12) -#define ILO_MAX_SAMPLER_VIEWS 16 -#define ILO_MAX_SAMPLERS 16 -#define ILO_MAX_SO_BINDINGS 64 -#define ILO_MAX_SO_BUFFERS 4 -#define ILO_MAX_VIEWPORTS 1 - -#define ILO_MAX_VS_SURFACES (ILO_MAX_CONST_BUFFERS + ILO_MAX_SAMPLER_VIEWS) -#define ILO_VS_CONST_SURFACE(i) (i) -#define ILO_VS_TEXTURE_SURFACE(i) (ILO_MAX_CONST_BUFFERS + i) - -#define ILO_MAX_GS_SURFACES (ILO_MAX_SO_BINDINGS) -#define ILO_GS_SO_SURFACE(i) (i) - -#define ILO_MAX_WM_SURFACES (ILO_MAX_DRAW_BUFFERS + ILO_MAX_CONST_BUFFERS + ILO_MAX_SAMPLER_VIEWS) -#define ILO_WM_DRAW_SURFACE(i) (i) -#define ILO_WM_CONST_SURFACE(i) (ILO_MAX_DRAW_BUFFERS + i) -#define ILO_WM_TEXTURE_SURFACE(i) (ILO_MAX_DRAW_BUFFERS + ILO_MAX_CONST_BUFFERS + i) - -struct ilo_buffer; -struct ilo_texture; -struct ilo_shader_state; - -struct ilo_vb_state { - struct pipe_vertex_buffer states[PIPE_MAX_ATTRIBS]; - uint32_t enabled_mask; -}; - -struct ilo_ib_state { - struct pipe_resource *buffer; - const void *user_buffer; - unsigned offset; - unsigned index_size; - - /* these are not valid until the state is finalized */ - struct pipe_resource *hw_resource; - unsigned hw_index_size; - /* an offset to be added to pipe_draw_info::start */ - int64_t draw_start_offset; -}; - -struct ilo_ve_cso { - /* VERTEX_ELEMENT_STATE */ - uint32_t payload[2]; -}; - -struct ilo_ve_state { - struct ilo_ve_cso cso[PIPE_MAX_ATTRIBS]; - unsigned count; - - unsigned instance_divisors[PIPE_MAX_ATTRIBS]; - unsigned vb_mapping[PIPE_MAX_ATTRIBS]; - unsigned vb_count; -}; - -struct ilo_so_state { - struct pipe_stream_output_target *states[ILO_MAX_SO_BUFFERS]; - unsigned count; - unsigned append_bitmask; - - bool enabled; -}; - -struct ilo_viewport_cso { - /* matrix form */ - float m00, m11, m22, m30, m31, m32; - - /* guardband in NDC space */ - float min_gbx, min_gby, max_gbx, max_gby; - - /* viewport in screen space */ - float min_x, min_y, min_z; - float max_x, max_y, max_z; -}; - -struct ilo_viewport_state { - struct ilo_viewport_cso cso[ILO_MAX_VIEWPORTS]; - unsigned count; - - struct pipe_viewport_state viewport0; -}; - -struct ilo_scissor_state { - /* SCISSOR_RECT */ - uint32_t payload[ILO_MAX_VIEWPORTS * 2]; - - struct pipe_scissor_state scissor0; -}; - -struct ilo_rasterizer_clip { - /* 3DSTATE_CLIP */ - uint32_t payload[3]; - - uint32_t can_enable_guardband; -}; - -struct ilo_rasterizer_sf { - /* 3DSTATE_SF */ - uint32_t payload[6]; - uint32_t dw_msaa; -}; - -struct ilo_rasterizer_wm { - /* 3DSTATE_WM */ - uint32_t payload[2]; - uint32_t dw_msaa_rast; - uint32_t dw_msaa_disp; -}; - -struct ilo_rasterizer_state { - struct pipe_rasterizer_state state; - - struct ilo_rasterizer_clip clip; - struct ilo_rasterizer_sf sf; - struct ilo_rasterizer_wm wm; -}; - -struct ilo_dsa_state { - /* DEPTH_STENCIL_STATE */ - uint32_t payload[3]; - - uint32_t dw_alpha; - ubyte alpha_ref; -}; - -struct ilo_blend_cso { - /* BLEND_STATE */ - uint32_t payload[2]; - - uint32_t dw_blend; - uint32_t dw_blend_dst_alpha_forced_one; - - uint32_t dw_logicop; - uint32_t dw_alpha_mod; -}; - -struct ilo_blend_state { - struct ilo_blend_cso cso[ILO_MAX_DRAW_BUFFERS]; - - bool independent_blend_enable; - bool dual_blend; - bool alpha_to_coverage; -}; - -struct ilo_sampler_cso { - /* SAMPLER_STATE and SAMPLER_BORDER_COLOR_STATE */ - uint32_t payload[15]; - - uint32_t dw_filter; - uint32_t dw_filter_aniso; - uint32_t dw_wrap; - uint32_t dw_wrap_1d; - uint32_t dw_wrap_cube; - - bool anisotropic; - bool saturate_r; - bool saturate_s; - bool saturate_t; -}; - -struct ilo_sampler_state { - const struct ilo_sampler_cso *cso[ILO_MAX_SAMPLERS]; - unsigned count; -}; - -struct ilo_view_surface { - /* SURFACE_STATE */ - uint32_t payload[8]; - struct intel_bo *bo; -}; - -struct ilo_view_cso { - struct pipe_sampler_view base; - - struct ilo_view_surface surface; -}; - -struct ilo_view_state { - struct pipe_sampler_view *states[ILO_MAX_SAMPLER_VIEWS]; - unsigned count; -}; - -struct ilo_cbuf_cso { - struct pipe_resource *resource; - struct ilo_view_surface surface; - - /* - * this CSO is not so constant because user buffer needs to be uploaded in - * finalize_constant_buffers() - */ - const void *user_buffer; - unsigned user_buffer_size; -}; - -struct ilo_cbuf_state { - struct ilo_cbuf_cso cso[ILO_MAX_CONST_BUFFERS]; - uint32_t enabled_mask; -}; - -struct ilo_resource_state { - struct pipe_surface *states[PIPE_MAX_SHADER_RESOURCES]; - unsigned count; -}; - -struct ilo_surface_cso { - struct pipe_surface base; - - bool is_rt; - union { - struct ilo_view_surface rt; - struct ilo_zs_surface { - uint32_t payload[10]; - struct intel_bo *bo; - struct intel_bo *hiz_bo; - struct intel_bo *separate_s8_bo; - } zs; - } u; -}; - -struct ilo_fb_state { - struct pipe_framebuffer_state state; - - struct ilo_view_surface null_rt; - struct ilo_zs_surface null_zs; - - unsigned num_samples; -}; - -struct ilo_global_binding { - /* - * XXX These should not be treated as real resources (and there could be - * thousands of them). They should be treated as regions in GLOBAL - * resource, which is the only real resource. - * - * That is, a resource here should instead be - * - * struct ilo_global_region { - * struct pipe_resource base; - * int offset; - * int size; - * }; - * - * and it describes the region [offset, offset + size) in GLOBAL - * resource. - */ - struct pipe_resource *resources[PIPE_MAX_SHADER_RESOURCES]; - uint32_t *handles[PIPE_MAX_SHADER_RESOURCES]; - unsigned count; -}; - -struct ilo_shader_cso { - uint32_t payload[5]; -}; - -void -ilo_gpe_init_ve(const struct ilo_dev_info *dev, - unsigned num_states, - const struct pipe_vertex_element *states, - struct ilo_ve_state *ve); - -void -ilo_gpe_set_viewport_cso(const struct ilo_dev_info *dev, - const struct pipe_viewport_state *state, - struct ilo_viewport_cso *vp); - -void -ilo_gpe_set_scissor(const struct ilo_dev_info *dev, - unsigned start_slot, - unsigned num_states, - const struct pipe_scissor_state *states, - struct ilo_scissor_state *scissor); - -void -ilo_gpe_set_scissor_null(const struct ilo_dev_info *dev, - struct ilo_scissor_state *scissor); - -void -ilo_gpe_init_rasterizer_clip(const struct ilo_dev_info *dev, - const struct pipe_rasterizer_state *state, - struct ilo_rasterizer_clip *clip); - -void -ilo_gpe_init_rasterizer_sf(const struct ilo_dev_info *dev, - const struct pipe_rasterizer_state *state, - struct ilo_rasterizer_sf *sf); - -void -ilo_gpe_init_rasterizer_wm_gen6(const struct ilo_dev_info *dev, - const struct pipe_rasterizer_state *state, - struct ilo_rasterizer_wm *wm); - -void -ilo_gpe_init_rasterizer_wm_gen7(const struct ilo_dev_info *dev, - const struct pipe_rasterizer_state *state, - struct ilo_rasterizer_wm *wm); - -static inline void -ilo_gpe_init_rasterizer(const struct ilo_dev_info *dev, - const struct pipe_rasterizer_state *state, - struct ilo_rasterizer_state *rasterizer) -{ - ilo_gpe_init_rasterizer_clip(dev, state, &rasterizer->clip); - ilo_gpe_init_rasterizer_sf(dev, state, &rasterizer->sf); - - if (ilo_dev_gen(dev) >= ILO_GEN(7)) - ilo_gpe_init_rasterizer_wm_gen7(dev, state, &rasterizer->wm); - else - ilo_gpe_init_rasterizer_wm_gen6(dev, state, &rasterizer->wm); -} - -void -ilo_gpe_init_dsa(const struct ilo_dev_info *dev, - const struct pipe_depth_stencil_alpha_state *state, - struct ilo_dsa_state *dsa); - -void -ilo_gpe_init_blend(const struct ilo_dev_info *dev, - const struct pipe_blend_state *state, - struct ilo_blend_state *blend); - -void -ilo_gpe_init_sampler_cso(const struct ilo_dev_info *dev, - const struct pipe_sampler_state *state, - struct ilo_sampler_cso *sampler); - -void -ilo_gpe_init_view_surface_null_gen6(const struct ilo_dev_info *dev, - unsigned width, unsigned height, - unsigned depth, unsigned level, - struct ilo_view_surface *surf); - -void -ilo_gpe_init_view_surface_for_buffer_gen6(const struct ilo_dev_info *dev, - const struct ilo_buffer *buf, - unsigned offset, unsigned size, - unsigned struct_size, - enum pipe_format elem_format, - bool is_rt, bool render_cache_rw, - struct ilo_view_surface *surf); - -void -ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev, - const struct ilo_texture *tex, - enum pipe_format format, - unsigned first_level, - unsigned num_levels, - unsigned first_layer, - unsigned num_layers, - bool is_rt, - struct ilo_view_surface *surf); - -void -ilo_gpe_init_view_surface_null_gen7(const struct ilo_dev_info *dev, - unsigned width, unsigned height, - unsigned depth, unsigned level, - struct ilo_view_surface *surf); - -void -ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev, - const struct ilo_buffer *buf, - unsigned offset, unsigned size, - unsigned struct_size, - enum pipe_format elem_format, - bool is_rt, bool render_cache_rw, - struct ilo_view_surface *surf); - -void -ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, - const struct ilo_texture *tex, - enum pipe_format format, - unsigned first_level, - unsigned num_levels, - unsigned first_layer, - unsigned num_layers, - bool is_rt, - struct ilo_view_surface *surf); - -static inline void -ilo_gpe_init_view_surface_null(const struct ilo_dev_info *dev, - unsigned width, unsigned height, - unsigned depth, unsigned level, - struct ilo_view_surface *surf) -{ - if (ilo_dev_gen(dev) >= ILO_GEN(7)) { - ilo_gpe_init_view_surface_null_gen7(dev, - width, height, depth, level, surf); - } - else { - ilo_gpe_init_view_surface_null_gen6(dev, - width, height, depth, level, surf); - } -} - -static inline void -ilo_gpe_init_view_surface_for_buffer(const struct ilo_dev_info *dev, - const struct ilo_buffer *buf, - unsigned offset, unsigned size, - unsigned struct_size, - enum pipe_format elem_format, - bool is_rt, bool render_cache_rw, - struct ilo_view_surface *surf) -{ - if (ilo_dev_gen(dev) >= ILO_GEN(7)) { - ilo_gpe_init_view_surface_for_buffer_gen7(dev, buf, offset, size, - struct_size, elem_format, is_rt, render_cache_rw, surf); - } - else { - ilo_gpe_init_view_surface_for_buffer_gen6(dev, buf, offset, size, - struct_size, elem_format, is_rt, render_cache_rw, surf); - } -} - -static inline void -ilo_gpe_init_view_surface_for_texture(const struct ilo_dev_info *dev, - const struct ilo_texture *tex, - enum pipe_format format, - unsigned first_level, - unsigned num_levels, - unsigned first_layer, - unsigned num_layers, - bool is_rt, - struct ilo_view_surface *surf) -{ - if (ilo_dev_gen(dev) >= ILO_GEN(7)) { - ilo_gpe_init_view_surface_for_texture_gen7(dev, tex, format, - first_level, num_levels, first_layer, num_layers, - is_rt, surf); - } - else { - ilo_gpe_init_view_surface_for_texture_gen6(dev, tex, format, - first_level, num_levels, first_layer, num_layers, - is_rt, surf); - } -} - -void -ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev, - const struct ilo_texture *tex, - enum pipe_format format, unsigned level, - unsigned first_layer, unsigned num_layers, - struct ilo_zs_surface *zs); - -void -ilo_gpe_init_vs_cso(const struct ilo_dev_info *dev, - const struct ilo_shader_state *vs, - struct ilo_shader_cso *cso); - -void -ilo_gpe_init_gs_cso_gen6(const struct ilo_dev_info *dev, - const struct ilo_shader_state *gs, - struct ilo_shader_cso *cso); - -void -ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev, - const struct ilo_shader_state *gs, - struct ilo_shader_cso *cso); - -static inline void -ilo_gpe_init_gs_cso(const struct ilo_dev_info *dev, - const struct ilo_shader_state *gs, - struct ilo_shader_cso *cso) -{ - if (ilo_dev_gen(dev) >= ILO_GEN(7)) { - ilo_gpe_init_gs_cso_gen7(dev, gs, cso); - } - else { - ilo_gpe_init_gs_cso_gen6(dev, gs, cso); - } -} - -void -ilo_gpe_init_fs_cso_gen6(const struct ilo_dev_info *dev, - const struct ilo_shader_state *fs, - struct ilo_shader_cso *cso); - -void -ilo_gpe_init_fs_cso_gen7(const struct ilo_dev_info *dev, - const struct ilo_shader_state *fs, - struct ilo_shader_cso *cso); - -static inline void -ilo_gpe_init_fs_cso(const struct ilo_dev_info *dev, - const struct ilo_shader_state *fs, - struct ilo_shader_cso *cso) -{ - if (ilo_dev_gen(dev) >= ILO_GEN(7)) { - ilo_gpe_init_fs_cso_gen7(dev, fs, cso); - } - else { - ilo_gpe_init_fs_cso_gen6(dev, fs, cso); - } -} - -void -ilo_gpe_set_fb(const struct ilo_dev_info *dev, - const struct pipe_framebuffer_state *state, - struct ilo_fb_state *fb); - -#endif /* ILO_GPE_H */ diff --git a/src/gallium/drivers/ilo/ilo_shader.c b/src/gallium/drivers/ilo/ilo_shader.c index cbc0fa39aeb..d2cacf36f1b 100644 --- a/src/gallium/drivers/ilo/ilo_shader.c +++ b/src/gallium/drivers/ilo/ilo_shader.c @@ -32,6 +32,7 @@ #include "shader/ilo_shader_internal.h" #include "ilo_builder.h" #include "ilo_state.h" +#include "ilo_state_gen.h" #include "ilo_shader.h" struct ilo_shader_cache { diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c index df36de8a766..1e427edc231 100644 --- a/src/gallium/drivers/ilo/ilo_state.c +++ b/src/gallium/drivers/ilo/ilo_state.c @@ -32,6 +32,7 @@ #include "ilo_resource.h" #include "ilo_shader.h" #include "ilo_state.h" +#include "ilo_state_gen.h" static void finalize_shader_states(struct ilo_context *ilo) diff --git a/src/gallium/drivers/ilo/ilo_state.h b/src/gallium/drivers/ilo/ilo_state.h index 588a1b9660a..a14c3fbb28e 100644 --- a/src/gallium/drivers/ilo/ilo_state.h +++ b/src/gallium/drivers/ilo/ilo_state.h @@ -31,6 +31,29 @@ #include "ilo_common.h" /** + * \see brw_context.h + */ +#define ILO_MAX_DRAW_BUFFERS 8 +#define ILO_MAX_CONST_BUFFERS (1 + 12) +#define ILO_MAX_SAMPLER_VIEWS 16 +#define ILO_MAX_SAMPLERS 16 +#define ILO_MAX_SO_BINDINGS 64 +#define ILO_MAX_SO_BUFFERS 4 +#define ILO_MAX_VIEWPORTS 1 + +#define ILO_MAX_VS_SURFACES (ILO_MAX_CONST_BUFFERS + ILO_MAX_SAMPLER_VIEWS) +#define ILO_VS_CONST_SURFACE(i) (i) +#define ILO_VS_TEXTURE_SURFACE(i) (ILO_MAX_CONST_BUFFERS + i) + +#define ILO_MAX_GS_SURFACES (ILO_MAX_SO_BINDINGS) +#define ILO_GS_SO_SURFACE(i) (i) + +#define ILO_MAX_WM_SURFACES (ILO_MAX_DRAW_BUFFERS + ILO_MAX_CONST_BUFFERS + ILO_MAX_SAMPLER_VIEWS) +#define ILO_WM_DRAW_SURFACE(i) (i) +#define ILO_WM_CONST_SURFACE(i) (ILO_MAX_DRAW_BUFFERS + i) +#define ILO_WM_TEXTURE_SURFACE(i) (ILO_MAX_DRAW_BUFFERS + ILO_MAX_CONST_BUFFERS + i) + +/** * States that we track. * * XXX Do we want to count each sampler or vertex buffer as a state? If that @@ -117,7 +140,242 @@ enum ilo_dirty_flags { struct pipe_draw_info; struct pipe_resource; + +struct ilo_buffer; struct ilo_context; +struct ilo_shader_state; +struct ilo_texture; + +struct ilo_vb_state { + struct pipe_vertex_buffer states[PIPE_MAX_ATTRIBS]; + uint32_t enabled_mask; +}; + +struct ilo_ib_state { + struct pipe_resource *buffer; + const void *user_buffer; + unsigned offset; + unsigned index_size; + + /* these are not valid until the state is finalized */ + struct pipe_resource *hw_resource; + unsigned hw_index_size; + /* an offset to be added to pipe_draw_info::start */ + int64_t draw_start_offset; +}; + +struct ilo_ve_cso { + /* VERTEX_ELEMENT_STATE */ + uint32_t payload[2]; +}; + +struct ilo_ve_state { + struct ilo_ve_cso cso[PIPE_MAX_ATTRIBS]; + unsigned count; + + unsigned instance_divisors[PIPE_MAX_ATTRIBS]; + unsigned vb_mapping[PIPE_MAX_ATTRIBS]; + unsigned vb_count; +}; + +struct ilo_so_state { + struct pipe_stream_output_target *states[ILO_MAX_SO_BUFFERS]; + unsigned count; + unsigned append_bitmask; + + bool enabled; +}; + +struct ilo_viewport_cso { + /* matrix form */ + float m00, m11, m22, m30, m31, m32; + + /* guardband in NDC space */ + float min_gbx, min_gby, max_gbx, max_gby; + + /* viewport in screen space */ + float min_x, min_y, min_z; + float max_x, max_y, max_z; +}; + +struct ilo_viewport_state { + struct ilo_viewport_cso cso[ILO_MAX_VIEWPORTS]; + unsigned count; + + struct pipe_viewport_state viewport0; +}; + +struct ilo_scissor_state { + /* SCISSOR_RECT */ + uint32_t payload[ILO_MAX_VIEWPORTS * 2]; + + struct pipe_scissor_state scissor0; +}; + +struct ilo_rasterizer_clip { + /* 3DSTATE_CLIP */ + uint32_t payload[3]; + + uint32_t can_enable_guardband; +}; + +struct ilo_rasterizer_sf { + /* 3DSTATE_SF */ + uint32_t payload[6]; + uint32_t dw_msaa; +}; + +struct ilo_rasterizer_wm { + /* 3DSTATE_WM */ + uint32_t payload[2]; + uint32_t dw_msaa_rast; + uint32_t dw_msaa_disp; +}; + +struct ilo_rasterizer_state { + struct pipe_rasterizer_state state; + + struct ilo_rasterizer_clip clip; + struct ilo_rasterizer_sf sf; + struct ilo_rasterizer_wm wm; +}; + +struct ilo_dsa_state { + /* DEPTH_STENCIL_STATE */ + uint32_t payload[3]; + + uint32_t dw_alpha; + ubyte alpha_ref; +}; + +struct ilo_blend_cso { + /* BLEND_STATE */ + uint32_t payload[2]; + + uint32_t dw_blend; + uint32_t dw_blend_dst_alpha_forced_one; + + uint32_t dw_logicop; + uint32_t dw_alpha_mod; +}; + +struct ilo_blend_state { + struct ilo_blend_cso cso[ILO_MAX_DRAW_BUFFERS]; + + bool independent_blend_enable; + bool dual_blend; + bool alpha_to_coverage; +}; + +struct ilo_sampler_cso { + /* SAMPLER_STATE and SAMPLER_BORDER_COLOR_STATE */ + uint32_t payload[15]; + + uint32_t dw_filter; + uint32_t dw_filter_aniso; + uint32_t dw_wrap; + uint32_t dw_wrap_1d; + uint32_t dw_wrap_cube; + + bool anisotropic; + bool saturate_r; + bool saturate_s; + bool saturate_t; +}; + +struct ilo_sampler_state { + const struct ilo_sampler_cso *cso[ILO_MAX_SAMPLERS]; + unsigned count; +}; + +struct ilo_view_surface { + /* SURFACE_STATE */ + uint32_t payload[8]; + struct intel_bo *bo; +}; + +struct ilo_view_cso { + struct pipe_sampler_view base; + + struct ilo_view_surface surface; +}; + +struct ilo_view_state { + struct pipe_sampler_view *states[ILO_MAX_SAMPLER_VIEWS]; + unsigned count; +}; + +struct ilo_cbuf_cso { + struct pipe_resource *resource; + struct ilo_view_surface surface; + + /* + * this CSO is not so constant because user buffer needs to be uploaded in + * finalize_constant_buffers() + */ + const void *user_buffer; + unsigned user_buffer_size; +}; + +struct ilo_cbuf_state { + struct ilo_cbuf_cso cso[ILO_MAX_CONST_BUFFERS]; + uint32_t enabled_mask; +}; + +struct ilo_resource_state { + struct pipe_surface *states[PIPE_MAX_SHADER_RESOURCES]; + unsigned count; +}; + +struct ilo_surface_cso { + struct pipe_surface base; + + bool is_rt; + union { + struct ilo_view_surface rt; + struct ilo_zs_surface { + uint32_t payload[10]; + struct intel_bo *bo; + struct intel_bo *hiz_bo; + struct intel_bo *separate_s8_bo; + } zs; + } u; +}; + +struct ilo_fb_state { + struct pipe_framebuffer_state state; + + struct ilo_view_surface null_rt; + struct ilo_zs_surface null_zs; + + unsigned num_samples; +}; + +struct ilo_global_binding { + /* + * XXX These should not be treated as real resources (and there could be + * thousands of them). They should be treated as regions in GLOBAL + * resource, which is the only real resource. + * + * That is, a resource here should instead be + * + * struct ilo_global_region { + * struct pipe_resource base; + * int offset; + * int size; + * }; + * + * and it describes the region [offset, offset + size) in GLOBAL + * resource. + */ + struct pipe_resource *resources[PIPE_MAX_SHADER_RESOURCES]; + uint32_t *handles[PIPE_MAX_SHADER_RESOURCES]; + unsigned count; +}; + +struct ilo_shader_cso { + uint32_t payload[5]; +}; void ilo_init_state_functions(struct ilo_context *ilo); diff --git a/src/gallium/drivers/ilo/ilo_state_gen.h b/src/gallium/drivers/ilo/ilo_state_gen.h index 33b762835f1..9e4f0ebaafd 100644 --- a/src/gallium/drivers/ilo/ilo_state_gen.h +++ b/src/gallium/drivers/ilo/ilo_state_gen.h @@ -32,7 +32,7 @@ #include "intel_winsys.h" #include "ilo_common.h" -#include "ilo_gpe.h" +#include "ilo_state.h" /** * Translate winsys tiling to hardware tiling. @@ -115,4 +115,248 @@ zs_align_surface(const struct ilo_dev_info *dev, zs->payload[2] = dw3; } +void +ilo_gpe_init_ve(const struct ilo_dev_info *dev, + unsigned num_states, + const struct pipe_vertex_element *states, + struct ilo_ve_state *ve); + +void +ilo_gpe_set_viewport_cso(const struct ilo_dev_info *dev, + const struct pipe_viewport_state *state, + struct ilo_viewport_cso *vp); + +void +ilo_gpe_set_scissor(const struct ilo_dev_info *dev, + unsigned start_slot, + unsigned num_states, + const struct pipe_scissor_state *states, + struct ilo_scissor_state *scissor); + +void +ilo_gpe_set_scissor_null(const struct ilo_dev_info *dev, + struct ilo_scissor_state *scissor); + +void +ilo_gpe_init_rasterizer_clip(const struct ilo_dev_info *dev, + const struct pipe_rasterizer_state *state, + struct ilo_rasterizer_clip *clip); + +void +ilo_gpe_init_rasterizer_sf(const struct ilo_dev_info *dev, + const struct pipe_rasterizer_state *state, + struct ilo_rasterizer_sf *sf); + +void +ilo_gpe_init_rasterizer_wm_gen6(const struct ilo_dev_info *dev, + const struct pipe_rasterizer_state *state, + struct ilo_rasterizer_wm *wm); + +void +ilo_gpe_init_rasterizer_wm_gen7(const struct ilo_dev_info *dev, + const struct pipe_rasterizer_state *state, + struct ilo_rasterizer_wm *wm); + +static inline void +ilo_gpe_init_rasterizer(const struct ilo_dev_info *dev, + const struct pipe_rasterizer_state *state, + struct ilo_rasterizer_state *rasterizer) +{ + ilo_gpe_init_rasterizer_clip(dev, state, &rasterizer->clip); + ilo_gpe_init_rasterizer_sf(dev, state, &rasterizer->sf); + + if (ilo_dev_gen(dev) >= ILO_GEN(7)) + ilo_gpe_init_rasterizer_wm_gen7(dev, state, &rasterizer->wm); + else + ilo_gpe_init_rasterizer_wm_gen6(dev, state, &rasterizer->wm); +} + +void +ilo_gpe_init_dsa(const struct ilo_dev_info *dev, + const struct pipe_depth_stencil_alpha_state *state, + struct ilo_dsa_state *dsa); + +void +ilo_gpe_init_blend(const struct ilo_dev_info *dev, + const struct pipe_blend_state *state, + struct ilo_blend_state *blend); + +void +ilo_gpe_init_sampler_cso(const struct ilo_dev_info *dev, + const struct pipe_sampler_state *state, + struct ilo_sampler_cso *sampler); + +void +ilo_gpe_init_view_surface_null_gen6(const struct ilo_dev_info *dev, + unsigned width, unsigned height, + unsigned depth, unsigned level, + struct ilo_view_surface *surf); + +void +ilo_gpe_init_view_surface_for_buffer_gen6(const struct ilo_dev_info *dev, + const struct ilo_buffer *buf, + unsigned offset, unsigned size, + unsigned struct_size, + enum pipe_format elem_format, + bool is_rt, bool render_cache_rw, + struct ilo_view_surface *surf); + +void +ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev, + const struct ilo_texture *tex, + enum pipe_format format, + unsigned first_level, + unsigned num_levels, + unsigned first_layer, + unsigned num_layers, + bool is_rt, + struct ilo_view_surface *surf); + +void +ilo_gpe_init_view_surface_null_gen7(const struct ilo_dev_info *dev, + unsigned width, unsigned height, + unsigned depth, unsigned level, + struct ilo_view_surface *surf); + +void +ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev, + const struct ilo_buffer *buf, + unsigned offset, unsigned size, + unsigned struct_size, + enum pipe_format elem_format, + bool is_rt, bool render_cache_rw, + struct ilo_view_surface *surf); + +void +ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, + const struct ilo_texture *tex, + enum pipe_format format, + unsigned first_level, + unsigned num_levels, + unsigned first_layer, + unsigned num_layers, + bool is_rt, + struct ilo_view_surface *surf); + +static inline void +ilo_gpe_init_view_surface_null(const struct ilo_dev_info *dev, + unsigned width, unsigned height, + unsigned depth, unsigned level, + struct ilo_view_surface *surf) +{ + if (ilo_dev_gen(dev) >= ILO_GEN(7)) { + ilo_gpe_init_view_surface_null_gen7(dev, + width, height, depth, level, surf); + } + else { + ilo_gpe_init_view_surface_null_gen6(dev, + width, height, depth, level, surf); + } +} + +static inline void +ilo_gpe_init_view_surface_for_buffer(const struct ilo_dev_info *dev, + const struct ilo_buffer *buf, + unsigned offset, unsigned size, + unsigned struct_size, + enum pipe_format elem_format, + bool is_rt, bool render_cache_rw, + struct ilo_view_surface *surf) +{ + if (ilo_dev_gen(dev) >= ILO_GEN(7)) { + ilo_gpe_init_view_surface_for_buffer_gen7(dev, buf, offset, size, + struct_size, elem_format, is_rt, render_cache_rw, surf); + } + else { + ilo_gpe_init_view_surface_for_buffer_gen6(dev, buf, offset, size, + struct_size, elem_format, is_rt, render_cache_rw, surf); + } +} + +static inline void +ilo_gpe_init_view_surface_for_texture(const struct ilo_dev_info *dev, + const struct ilo_texture *tex, + enum pipe_format format, + unsigned first_level, + unsigned num_levels, + unsigned first_layer, + unsigned num_layers, + bool is_rt, + struct ilo_view_surface *surf) +{ + if (ilo_dev_gen(dev) >= ILO_GEN(7)) { + ilo_gpe_init_view_surface_for_texture_gen7(dev, tex, format, + first_level, num_levels, first_layer, num_layers, + is_rt, surf); + } + else { + ilo_gpe_init_view_surface_for_texture_gen6(dev, tex, format, + first_level, num_levels, first_layer, num_layers, + is_rt, surf); + } +} + +void +ilo_gpe_init_zs_surface(const struct ilo_dev_info *dev, + const struct ilo_texture *tex, + enum pipe_format format, unsigned level, + unsigned first_layer, unsigned num_layers, + struct ilo_zs_surface *zs); + +void +ilo_gpe_init_vs_cso(const struct ilo_dev_info *dev, + const struct ilo_shader_state *vs, + struct ilo_shader_cso *cso); + +void +ilo_gpe_init_gs_cso_gen6(const struct ilo_dev_info *dev, + const struct ilo_shader_state *gs, + struct ilo_shader_cso *cso); + +void +ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev, + const struct ilo_shader_state *gs, + struct ilo_shader_cso *cso); + +static inline void +ilo_gpe_init_gs_cso(const struct ilo_dev_info *dev, + const struct ilo_shader_state *gs, + struct ilo_shader_cso *cso) +{ + if (ilo_dev_gen(dev) >= ILO_GEN(7)) { + ilo_gpe_init_gs_cso_gen7(dev, gs, cso); + } + else { + ilo_gpe_init_gs_cso_gen6(dev, gs, cso); + } +} + +void +ilo_gpe_init_fs_cso_gen6(const struct ilo_dev_info *dev, + const struct ilo_shader_state *fs, + struct ilo_shader_cso *cso); + +void +ilo_gpe_init_fs_cso_gen7(const struct ilo_dev_info *dev, + const struct ilo_shader_state *fs, + struct ilo_shader_cso *cso); + +static inline void +ilo_gpe_init_fs_cso(const struct ilo_dev_info *dev, + const struct ilo_shader_state *fs, + struct ilo_shader_cso *cso) +{ + if (ilo_dev_gen(dev) >= ILO_GEN(7)) { + ilo_gpe_init_fs_cso_gen7(dev, fs, cso); + } + else { + ilo_gpe_init_fs_cso_gen6(dev, fs, cso); + } +} + +void +ilo_gpe_set_fb(const struct ilo_dev_info *dev, + const struct pipe_framebuffer_state *state, + struct ilo_fb_state *fb); + #endif /* ILO_STATE_GEN_H */ diff --git a/src/gallium/drivers/ilo/ilo_state_gen7.c b/src/gallium/drivers/ilo/ilo_state_gen7.c index 3814de02e9c..53c3aebc634 100644 --- a/src/gallium/drivers/ilo/ilo_state_gen7.c +++ b/src/gallium/drivers/ilo/ilo_state_gen7.c @@ -31,8 +31,8 @@ #include "ilo_format.h" #include "ilo_resource.h" #include "ilo_shader.h" +#include "ilo_state.h" #include "ilo_state_gen.h" -#include "ilo_gpe.h" void ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev, |