#define ILO_RENDER_H
#include "ilo_common.h"
-#include "ilo_state.h"
-struct intel_bo;
+struct pipe_constant_buffer;
struct ilo_blitter;
-struct ilo_cp;
+struct ilo_builder;
struct ilo_query;
+struct ilo_render;
struct ilo_state_vector;
-enum ilo_render_action {
- ILO_RENDER_DRAW,
-};
-
-/**
- * Render Engine.
- */
-struct ilo_render {
- const struct ilo_dev_info *dev;
- struct ilo_builder *builder;
-
- struct intel_bo *workaround_bo;
-
- uint32_t packed_sample_position_1x;
- uint32_t packed_sample_position_4x;
- uint32_t packed_sample_position_8x[2];
-
- int (*estimate_size)(struct ilo_render *render,
- enum ilo_render_action action,
- const void *arg);
-
- void (*emit_draw)(struct ilo_render *render,
- const struct ilo_state_vector *vec);
-
- bool hw_ctx_changed;
-
- /*
- * Any state that involves resources needs to be re-emitted when the
- * batch bo changed. This is because we do not pin the resources and
- * their offsets (or existence) may change between batch buffers.
- */
- bool batch_bo_changed;
- bool state_bo_changed;
- bool instruction_bo_changed;
-
- /**
- * HW states.
- */
- struct ilo_render_state {
- /*
- * When a WA is needed before some command, we always emit the WA right
- * before the command. Knowing what have already been done since last
- * 3DPRIMITIVE allows us to skip some WAs.
- */
- uint32_t current_pipe_control_dw1;
-
- /*
- * When a WA is needed after some command, we may have the WA follow the
- * command immediately or defer it. If this is non-zero, a PIPE_CONTROL
- * will be emitted before 3DPRIMITIVE.
- */
- uint32_t deferred_pipe_control_dw1;
-
- bool primitive_restart;
- int reduced_prim;
- int so_max_vertices;
-
- uint32_t SF_VIEWPORT;
- uint32_t CLIP_VIEWPORT;
- uint32_t SF_CLIP_VIEWPORT; /* GEN7+ */
- uint32_t CC_VIEWPORT;
-
- uint32_t COLOR_CALC_STATE;
- uint32_t BLEND_STATE;
- uint32_t DEPTH_STENCIL_STATE;
-
- uint32_t SCISSOR_RECT;
-
- struct {
- uint32_t BINDING_TABLE_STATE;
- int BINDING_TABLE_STATE_size;
- uint32_t SURFACE_STATE[ILO_MAX_VS_SURFACES];
- uint32_t SAMPLER_STATE;
- uint32_t SAMPLER_BORDER_COLOR_STATE[ILO_MAX_SAMPLERS];
- uint32_t PUSH_CONSTANT_BUFFER;
- int PUSH_CONSTANT_BUFFER_size;
- } vs;
-
- struct {
- uint32_t BINDING_TABLE_STATE;
- int BINDING_TABLE_STATE_size;
- uint32_t SURFACE_STATE[ILO_MAX_GS_SURFACES];
- bool active;
- } gs;
-
- struct {
- uint32_t BINDING_TABLE_STATE;
- int BINDING_TABLE_STATE_size;
- uint32_t SURFACE_STATE[ILO_MAX_WM_SURFACES];
- uint32_t SAMPLER_STATE;
- uint32_t SAMPLER_BORDER_COLOR_STATE[ILO_MAX_SAMPLERS];
- uint32_t PUSH_CONSTANT_BUFFER;
- int PUSH_CONSTANT_BUFFER_size;
- } wm;
- } state;
-};
-
struct ilo_render *
ilo_render_create(struct ilo_builder *builder);
/**
* Estimate the size of an action.
*/
-static inline int
-ilo_render_estimate_size(struct ilo_render *render,
- enum ilo_render_action action,
- const void *arg)
-{
- return render->estimate_size(render, action, arg);
-}
-
-/**
- * Emit context states and 3DPRIMITIVE.
- */
-static inline void
-ilo_render_emit_draw(struct ilo_render *render,
- const struct ilo_state_vector *vec)
-{
- render->emit_draw(render, vec);
-}
-
void
ilo_render_get_sample_position(const struct ilo_render *render,
unsigned sample_count,
ilo_render_emit_rectlist(struct ilo_render *render,
const struct ilo_blitter *blitter);
+int
+ilo_render_get_draw_len(const struct ilo_render *render,
+ const struct ilo_state_vector *vec);
+
+void
+ilo_render_emit_draw(struct ilo_render *render,
+ const struct ilo_state_vector *vec);
+
+int
+ilo_render_get_launch_grid_len(const struct ilo_render *render,
+ const struct ilo_state_vector *vec);
+
+void
+ilo_render_emit_launch_grid(struct ilo_render *render,
+ const struct ilo_state_vector *vec,
+ const unsigned thread_group_offset[3],
+ const unsigned thread_group_dim[3],
+ unsigned thread_group_size,
+ const struct pipe_constant_buffer *input,
+ uint32_t pc);
+
#endif /* ILO_RENDER_H */