anv: categorize partial/final pipeline instruction
The old gfx8 field doesn't apply anymore. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24536>
This commit is contained in:
committed by
Marge Bot
parent
b1614c4e22
commit
19c3f3ede4
@@ -3572,6 +3572,12 @@ struct anv_graphics_pipeline {
|
||||
*/
|
||||
uint32_t batch_data[416];
|
||||
|
||||
/* Fully backed instructions, ready to be emitted in the anv_cmd_buffer */
|
||||
struct {
|
||||
uint32_t hs[9];
|
||||
uint32_t ds[11];
|
||||
} final;
|
||||
|
||||
/* Pre packed CS instructions & structures that need to be merged later
|
||||
* with dynamic state.
|
||||
*/
|
||||
@@ -3581,10 +3587,8 @@ struct anv_graphics_pipeline {
|
||||
uint32_t raster[5];
|
||||
uint32_t wm[2];
|
||||
uint32_t streamout_state[5];
|
||||
uint32_t hs[9];
|
||||
uint32_t ds[11];
|
||||
uint32_t gs[10];
|
||||
} gfx8;
|
||||
} partial;
|
||||
};
|
||||
|
||||
struct anv_compute_pipeline {
|
||||
|
||||
@@ -2997,7 +2997,7 @@ genX(emit_hs)(struct anv_cmd_buffer *cmd_buffer)
|
||||
uint32_t *dw =
|
||||
anv_batch_emitn(&cmd_buffer->batch, GENX(3DSTATE_HS_length),
|
||||
GENX(3DSTATE_HS));
|
||||
memcpy(dw, &pipeline->gfx8.hs, sizeof(pipeline->gfx8.hs));
|
||||
memcpy(dw, &pipeline->final.hs, sizeof(pipeline->final.hs));
|
||||
}
|
||||
|
||||
ALWAYS_INLINE static void
|
||||
@@ -3025,7 +3025,7 @@ genX(emit_ds)(struct anv_cmd_buffer *cmd_buffer)
|
||||
uint32_t *dw =
|
||||
anv_batch_emitn(&cmd_buffer->batch, GENX(3DSTATE_DS_length),
|
||||
GENX(3DSTATE_DS));
|
||||
memcpy(dw, &pipeline->gfx8.ds, sizeof(pipeline->gfx8.ds));
|
||||
memcpy(dw, &pipeline->final.ds, sizeof(pipeline->final.ds));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@ genX(emit_gs)(struct anv_cmd_buffer *cmd_buffer)
|
||||
const struct vk_dynamic_graphics_state *dyn =
|
||||
&cmd_buffer->vk.dynamic_graphics_state;
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, GENX(3DSTATE_GS),
|
||||
pipeline->gfx8.gs, gs) {
|
||||
pipeline->partial.gs, gs) {
|
||||
switch (dyn->rs.provoking_vertex) {
|
||||
case VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT:
|
||||
gs.ReorderMode = LEADING;
|
||||
@@ -506,7 +506,7 @@ cmd_buffer_emit_clip(struct anv_cmd_buffer *cmd_buffer)
|
||||
return;
|
||||
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, GENX(3DSTATE_CLIP),
|
||||
pipeline->gfx8.clip, clip) {
|
||||
pipeline->partial.clip, clip) {
|
||||
/* Take dynamic primitive topology in to account with
|
||||
* 3DSTATE_CLIP::ViewportXYClipTestEnable
|
||||
*/
|
||||
@@ -575,7 +575,7 @@ cmd_buffer_emit_streamout(struct anv_cmd_buffer *cmd_buffer)
|
||||
genX(streamout_prologue)(cmd_buffer);
|
||||
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, GENX(3DSTATE_STREAMOUT),
|
||||
pipeline->gfx8.streamout_state, so) {
|
||||
pipeline->partial.streamout_state, so) {
|
||||
so.RenderingDisable = dyn->rs.rasterizer_discard_enable;
|
||||
so.RenderStreamSelect = dyn->rs.rasterization_stream;
|
||||
#if INTEL_NEEDS_WA_18022508906
|
||||
@@ -939,7 +939,7 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_RS_PROVOKING_VERTEX) ||
|
||||
BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_RS_DEPTH_BIAS_FACTORS)) {
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, GENX(3DSTATE_SF),
|
||||
pipeline->gfx8.sf, sf) {
|
||||
pipeline->partial.sf, sf) {
|
||||
ANV_SETUP_PROVOKING_VERTEX(sf, dyn->rs.provoking_vertex);
|
||||
|
||||
sf.LineWidth = dyn->rs.line.width;
|
||||
@@ -1021,7 +1021,7 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
vk_rasterization_state_depth_clip_enable(&dyn->rs);
|
||||
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, GENX(3DSTATE_RASTER),
|
||||
pipeline->gfx8.raster, raster) {
|
||||
pipeline->partial.raster, raster) {
|
||||
raster.APIMode = api_mode;
|
||||
raster.DXMultisampleRasterizationEnable = msaa_raster_enable;
|
||||
raster.AntialiasingEnable = aa_enable;
|
||||
@@ -1205,7 +1205,7 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
* threads.
|
||||
*/
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, GENX(3DSTATE_WM),
|
||||
pipeline->gfx8.wm, wm) {
|
||||
pipeline->partial.wm, wm) {
|
||||
wm.ForceThreadDispatchEnable = anv_pipeline_has_stage(pipeline, MESA_SHADER_FRAGMENT) &&
|
||||
(pipeline->force_fragment_thread_dispatch ||
|
||||
anv_cmd_buffer_all_color_write_masked(cmd_buffer)) ?
|
||||
|
||||
@@ -746,8 +746,8 @@ emit_rs_state(struct anv_graphics_pipeline *pipeline,
|
||||
|
||||
raster.ScissorRectangleEnable = true;
|
||||
|
||||
GENX(3DSTATE_SF_pack)(NULL, pipeline->gfx8.sf, &sf);
|
||||
GENX(3DSTATE_RASTER_pack)(NULL, pipeline->gfx8.raster, &raster);
|
||||
GENX(3DSTATE_SF_pack)(NULL, pipeline->partial.sf, &sf);
|
||||
GENX(3DSTATE_RASTER_pack)(NULL, pipeline->partial.raster, &raster);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -890,7 +890,7 @@ emit_3dstate_clip(struct anv_graphics_pipeline *pipeline,
|
||||
clip.NonPerspectiveBarycentricEnable = wm_prog_data ?
|
||||
wm_prog_data->uses_nonperspective_interp_modes : 0;
|
||||
|
||||
GENX(3DSTATE_CLIP_pack)(NULL, pipeline->gfx8.clip, &clip);
|
||||
GENX(3DSTATE_CLIP_pack)(NULL, pipeline->partial.clip, &clip);
|
||||
|
||||
#if GFX_VERx10 >= 125
|
||||
if (anv_pipeline_is_mesh(pipeline)) {
|
||||
@@ -1073,7 +1073,7 @@ emit_3dstate_streamout(struct anv_graphics_pipeline *pipeline,
|
||||
so.Stream3VertexReadLength = urb_entry_read_length - 1;
|
||||
}
|
||||
|
||||
GENX(3DSTATE_STREAMOUT_pack)(NULL, pipeline->gfx8.streamout_state, &so);
|
||||
GENX(3DSTATE_STREAMOUT_pack)(NULL, pipeline->partial.streamout_state, &so);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
@@ -1277,8 +1277,8 @@ emit_3dstate_hs_ds(struct anv_graphics_pipeline *pipeline,
|
||||
hs.DispatchMode = tcs_prog_data->base.dispatch_mode;
|
||||
hs.IncludePrimitiveID = tcs_prog_data->include_primitive_id;
|
||||
|
||||
STATIC_ASSERT(ARRAY_SIZE(pipeline->gfx8.hs) == GENX(3DSTATE_HS_length));
|
||||
GENX(3DSTATE_HS_pack)(&pipeline->base.base.batch, pipeline->gfx8.hs, &hs);
|
||||
STATIC_ASSERT(ARRAY_SIZE(pipeline->final.hs) == GENX(3DSTATE_HS_length));
|
||||
GENX(3DSTATE_HS_pack)(&pipeline->base.base.batch, pipeline->final.hs, &hs);
|
||||
|
||||
struct GENX(3DSTATE_DS) ds = {
|
||||
GENX(3DSTATE_DS_header),
|
||||
@@ -1332,12 +1332,12 @@ emit_3dstate_hs_ds(struct anv_graphics_pipeline *pipeline,
|
||||
* We need to both emit 3DSTATE_DS now, and before each 3DPRIMITIVE, so
|
||||
* we pack it to have it later, and memcpy into the current batch.
|
||||
*/
|
||||
STATIC_ASSERT(ARRAY_SIZE(pipeline->gfx8.ds) == GENX(3DSTATE_DS_length));
|
||||
GENX(3DSTATE_DS_pack)(&pipeline->base.base.batch, pipeline->gfx8.ds, &ds);
|
||||
STATIC_ASSERT(ARRAY_SIZE(pipeline->final.ds) == GENX(3DSTATE_DS_length));
|
||||
GENX(3DSTATE_DS_pack)(&pipeline->base.base.batch, pipeline->final.ds, &ds);
|
||||
|
||||
uint32_t *dw =
|
||||
anv_batch_emitn(batch, GENX(3DSTATE_DS_length), GENX(3DSTATE_DS));
|
||||
memcpy(dw, &pipeline->gfx8.ds, sizeof(pipeline->gfx8.ds));
|
||||
memcpy(dw, &pipeline->final.ds, sizeof(pipeline->final.ds));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1400,7 +1400,7 @@ emit_3dstate_gs(struct anv_graphics_pipeline *pipeline)
|
||||
#endif
|
||||
}
|
||||
|
||||
GENX(3DSTATE_GS_pack)(&pipeline->base.base.batch, pipeline->gfx8.gs, &gs);
|
||||
GENX(3DSTATE_GS_pack)(&pipeline->base.base.batch, pipeline->partial.gs, &gs);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -1462,7 +1462,7 @@ emit_3dstate_wm(struct anv_graphics_pipeline *pipeline,
|
||||
pipeline->fs_msaa_flags);
|
||||
}
|
||||
|
||||
GENX(3DSTATE_WM_pack)(NULL, pipeline->gfx8.wm, &wm);
|
||||
GENX(3DSTATE_WM_pack)(NULL, pipeline->partial.wm, &wm);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user