X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Filo%2Filo_gpe.h;h=684626d885608959443ba1a1bcf8267491016051;hb=d2a3de19c6aa5881228734c73df706483a4aecf9;hp=1b5a38f5d3c8e88a80498c0f20f862865b0544b9;hpb=2d82885d3cd9c5ab90e4777da8dfd723da273cd8;p=mesa.git diff --git a/src/gallium/drivers/ilo/ilo_gpe.h b/src/gallium/drivers/ilo/ilo_gpe.h index 1b5a38f5d3c..684626d8856 100644 --- a/src/gallium/drivers/ilo/ilo_gpe.h +++ b/src/gallium/drivers/ilo/ilo_gpe.h @@ -55,6 +55,7 @@ struct ilo_buffer; struct ilo_texture; +struct ilo_shader_state; struct ilo_vb_state { struct pipe_vertex_buffer states[PIPE_MAX_ATTRIBS]; @@ -62,7 +63,16 @@ struct ilo_vb_state { }; struct ilo_ib_state { - struct pipe_index_buffer 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 { @@ -109,17 +119,44 @@ struct ilo_viewport_state { 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]; - struct pipe_alpha_state alpha; + uint32_t dw_alpha; + ubyte alpha_ref; }; struct ilo_blend_cso { @@ -179,9 +216,21 @@ struct ilo_view_state { 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 pipe_constant_buffer states[ILO_MAX_CONST_BUFFERS]; - unsigned count; + struct ilo_cbuf_cso cso[ILO_MAX_CONST_BUFFERS]; + uint32_t enabled_mask; }; struct ilo_resource_state { @@ -189,10 +238,29 @@ struct ilo_resource_state { 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; + bool offset_to_layers; }; struct ilo_global_binding { @@ -217,6 +285,10 @@ struct ilo_global_binding { unsigned count; }; +struct ilo_shader_cso { + uint32_t payload[5]; +}; + void ilo_gpe_init_ve(const struct ilo_dev_info *dev, unsigned num_states, @@ -239,6 +311,40 @@ 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 (dev->gen >= 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, @@ -277,7 +383,7 @@ ilo_gpe_init_view_surface_for_texture_gen6(const struct ilo_dev_info *dev, unsigned num_levels, unsigned first_layer, unsigned num_layers, - bool is_rt, bool render_cache_rw, + bool is_rt, bool offset_to_layer, struct ilo_view_surface *surf); void @@ -303,7 +409,7 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, unsigned num_levels, unsigned first_layer, unsigned num_layers, - bool is_rt, bool render_cache_rw, + bool is_rt, bool offset_to_layer, struct ilo_view_surface *surf); static inline void @@ -349,19 +455,82 @@ ilo_gpe_init_view_surface_for_texture(const struct ilo_dev_info *dev, unsigned num_levels, unsigned first_layer, unsigned num_layers, - bool is_rt, bool render_cache_rw, + bool is_rt, bool offset_to_layer, struct ilo_view_surface *surf) { if (dev->gen >= ILO_GEN(7)) { ilo_gpe_init_view_surface_for_texture_gen7(dev, tex, format, first_level, num_levels, first_layer, num_layers, - is_rt, render_cache_rw, surf); + is_rt, offset_to_layer, surf); } else { ilo_gpe_init_view_surface_for_texture_gen6(dev, tex, format, first_level, num_levels, first_layer, num_layers, - is_rt, render_cache_rw, surf); + is_rt, offset_to_layer, 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, + bool offset_to_layer, 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 (dev->gen >= 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 (dev->gen >= 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 */