};
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 {
struct ilo_scissor_state {
/* SCISSOR_RECT */
uint32_t payload[ILO_MAX_VIEWPORTS * 2];
+
+ struct pipe_scissor_state scissor0;
};
struct ilo_rasterizer_clip {
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 {
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];
- unsigned count;
+ uint32_t enabled_mask;
};
struct ilo_resource_state {
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 {
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,
{
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
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
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
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,
+ enum pipe_format format, unsigned level,
unsigned first_layer, unsigned num_layers,
- struct ilo_zs_surface *zs);
+ 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 */