#define ILO_3D_PIPELINE_H
#include "ilo_common.h"
-#include "ilo_context.h"
-#include "ilo_gpe_gen6.h"
+#include "ilo_gpe.h"
-struct pipe_draw_info;
struct intel_bo;
+struct ilo_blitter;
struct ilo_cp;
struct ilo_context;
ILO_3D_PIPELINE_FLUSH,
ILO_3D_PIPELINE_WRITE_TIMESTAMP,
ILO_3D_PIPELINE_WRITE_DEPTH_COUNT,
+ ILO_3D_PIPELINE_WRITE_STATISTICS,
+ ILO_3D_PIPELINE_RECTLIST,
};
/**
*/
struct ilo_3d_pipeline {
struct ilo_cp *cp;
- int gen;
-
- struct ilo_gpe gpe;
+ const struct ilo_dev_info *dev;
uint32_t invalidate_flags;
const void *arg);
void (*emit_draw)(struct ilo_3d_pipeline *pipeline,
- const struct ilo_context *ilo,
- const struct pipe_draw_info *info);
+ const struct ilo_context *ilo);
void (*emit_flush)(struct ilo_3d_pipeline *pipeline);
void (*emit_write_depth_count)(struct ilo_3d_pipeline *pipeline,
struct intel_bo *bo, int index);
- /**
- * all GPE functions of all GENs
- */
-#define GEN6_EMIT(name) ilo_gpe_gen6_ ## name gen6_ ## name
- GEN6_EMIT(STATE_BASE_ADDRESS);
- GEN6_EMIT(STATE_SIP);
- GEN6_EMIT(PIPELINE_SELECT);
- GEN6_EMIT(3DSTATE_BINDING_TABLE_POINTERS);
- GEN6_EMIT(3DSTATE_SAMPLER_STATE_POINTERS);
- GEN6_EMIT(3DSTATE_URB);
- GEN6_EMIT(3DSTATE_VERTEX_BUFFERS);
- GEN6_EMIT(3DSTATE_VERTEX_ELEMENTS);
- GEN6_EMIT(3DSTATE_INDEX_BUFFER);
- GEN6_EMIT(3DSTATE_VF_STATISTICS);
- GEN6_EMIT(3DSTATE_VIEWPORT_STATE_POINTERS);
- GEN6_EMIT(3DSTATE_CC_STATE_POINTERS);
- GEN6_EMIT(3DSTATE_SCISSOR_STATE_POINTERS);
- GEN6_EMIT(3DSTATE_VS);
- GEN6_EMIT(3DSTATE_GS);
- GEN6_EMIT(3DSTATE_CLIP);
- GEN6_EMIT(3DSTATE_SF);
- GEN6_EMIT(3DSTATE_WM);
- GEN6_EMIT(3DSTATE_CONSTANT_VS);
- GEN6_EMIT(3DSTATE_CONSTANT_GS);
- GEN6_EMIT(3DSTATE_CONSTANT_PS);
- GEN6_EMIT(3DSTATE_SAMPLE_MASK);
- GEN6_EMIT(3DSTATE_DRAWING_RECTANGLE);
- GEN6_EMIT(3DSTATE_DEPTH_BUFFER);
- GEN6_EMIT(3DSTATE_POLY_STIPPLE_OFFSET);
- GEN6_EMIT(3DSTATE_POLY_STIPPLE_PATTERN);
- GEN6_EMIT(3DSTATE_LINE_STIPPLE);
- GEN6_EMIT(3DSTATE_AA_LINE_PARAMETERS);
- GEN6_EMIT(3DSTATE_GS_SVB_INDEX);
- GEN6_EMIT(3DSTATE_MULTISAMPLE);
- GEN6_EMIT(3DSTATE_STENCIL_BUFFER);
- GEN6_EMIT(3DSTATE_HIER_DEPTH_BUFFER);
- GEN6_EMIT(3DSTATE_CLEAR_PARAMS);
- GEN6_EMIT(PIPE_CONTROL);
- GEN6_EMIT(3DPRIMITIVE);
- GEN6_EMIT(INTERFACE_DESCRIPTOR_DATA);
- GEN6_EMIT(SF_VIEWPORT);
- GEN6_EMIT(CLIP_VIEWPORT);
- GEN6_EMIT(CC_VIEWPORT);
- GEN6_EMIT(COLOR_CALC_STATE);
- GEN6_EMIT(BLEND_STATE);
- GEN6_EMIT(DEPTH_STENCIL_STATE);
- GEN6_EMIT(SCISSOR_RECT);
- GEN6_EMIT(BINDING_TABLE_STATE);
- GEN6_EMIT(surf_SURFACE_STATE);
- GEN6_EMIT(view_SURFACE_STATE);
- GEN6_EMIT(cbuf_SURFACE_STATE);
- GEN6_EMIT(so_SURFACE_STATE);
- GEN6_EMIT(SAMPLER_STATE);
- GEN6_EMIT(SAMPLER_BORDER_COLOR_STATE);
- GEN6_EMIT(push_constant_buffer);
-#undef GEN6_EMIT
+ void (*emit_write_statistics)(struct ilo_3d_pipeline *pipeline,
+ struct intel_bo *bo, int index);
+
+ void (*emit_rectlist)(struct ilo_3d_pipeline *pipeline,
+ const struct ilo_blitter *blitter);
/**
* HW states.
struct ilo_3d_pipeline_state {
bool has_gen6_wa_pipe_control;
+ bool primitive_restart;
int reduced_prim;
int so_num_vertices, 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 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_3d_pipeline *
-ilo_3d_pipeline_create(struct ilo_cp *cp, int gen, int gt);
+ilo_3d_pipeline_create(struct ilo_cp *cp, const struct ilo_dev_info *dev);
void
ilo_3d_pipeline_destroy(struct ilo_3d_pipeline *pipeline);
bool
ilo_3d_pipeline_emit_draw(struct ilo_3d_pipeline *p,
const struct ilo_context *ilo,
- const struct pipe_draw_info *info,
int *prim_generated, int *prim_emitted);
void
ilo_3d_pipeline_emit_write_depth_count(struct ilo_3d_pipeline *p,
struct intel_bo *bo, int index);
+void
+ilo_3d_pipeline_emit_write_statistics(struct ilo_3d_pipeline *p,
+ struct intel_bo *bo, int index);
+
+void
+ilo_3d_pipeline_emit_rectlist(struct ilo_3d_pipeline *p,
+ const struct ilo_blitter *blitter);
+
void
ilo_3d_pipeline_get_sample_position(struct ilo_3d_pipeline *p,
unsigned sample_count,