247
231
uint32_t sh_base[SI_NUM_SHADERS];
250
/* The list of registers whose emitted values are remembered by si_context. */
234
/* Context registers whose values are tracked by si_context. */
235
enum si_tracked_context_reg
253
SI_TRACKED_DB_RENDER_CONTROL, /* 2 consecutive registers */
237
/* 2 consecutive registers */
238
SI_TRACKED_DB_RENDER_CONTROL,
254
239
SI_TRACKED_DB_COUNT_CONTROL,
256
SI_TRACKED_DB_RENDER_OVERRIDE2,
257
SI_TRACKED_DB_SHADER_CONTROL,
259
SI_TRACKED_CB_TARGET_MASK,
260
SI_TRACKED_CB_DCC_CONTROL,
262
SI_TRACKED_SX_PS_DOWNCONVERT, /* 3 consecutive registers */
263
SI_TRACKED_SX_BLEND_OPT_EPSILON,
264
SI_TRACKED_SX_BLEND_OPT_CONTROL,
266
SI_TRACKED_PA_SC_LINE_CNTL, /* 2 consecutive registers */
241
/* 2 consecutive registers */
242
SI_TRACKED_PA_SC_LINE_CNTL,
267
243
SI_TRACKED_PA_SC_AA_CONFIG,
270
SI_TRACKED_PA_SC_MODE_CNTL_1,
272
SI_TRACKED_PA_SU_PRIM_FILTER_CNTL,
273
SI_TRACKED_PA_SU_SMALL_PRIM_FILTER_CNTL,
275
SI_TRACKED_PA_CL_VS_OUT_CNTL,
276
SI_TRACKED_PA_CL_CLIP_CNTL,
278
SI_TRACKED_PA_SC_BINNER_CNTL_0,
280
SI_TRACKED_DB_PA_SC_VRS_OVERRIDE_CNTL,
282
SI_TRACKED_PA_SU_VTX_CNTL, /* 5 consecutive registers */
245
/* 5 consecutive registers */
246
SI_TRACKED_PA_SU_VTX_CNTL,
283
247
SI_TRACKED_PA_CL_GB_VERT_CLIP_ADJ,
284
248
SI_TRACKED_PA_CL_GB_VERT_DISC_ADJ,
285
249
SI_TRACKED_PA_CL_GB_HORZ_CLIP_ADJ,
286
250
SI_TRACKED_PA_CL_GB_HORZ_DISC_ADJ,
288
SI_TRACKED_PA_SU_HARDWARE_SCREEN_OFFSET,
252
/* 2 consecutive registers */
253
SI_TRACKED_SPI_SHADER_IDX_FORMAT,
254
SI_TRACKED_SPI_SHADER_POS_FORMAT,
256
/* 2 consecutive registers */
257
SI_TRACKED_SPI_SHADER_Z_FORMAT,
258
SI_TRACKED_SPI_SHADER_COL_FORMAT,
260
SI_TRACKED_SPI_BARYC_CNTL,
262
/* 2 consecutive registers */
263
SI_TRACKED_SPI_PS_INPUT_ENA,
264
SI_TRACKED_SPI_PS_INPUT_ADDR,
267
SI_TRACKED_DB_SHADER_CONTROL,
268
SI_TRACKED_CB_SHADER_MASK,
269
SI_TRACKED_CB_TARGET_MASK,
270
SI_TRACKED_PA_CL_CLIP_CNTL,
271
SI_TRACKED_PA_CL_VS_OUT_CNTL,
272
SI_TRACKED_PA_CL_VTE_CNTL,
290
273
SI_TRACKED_PA_SC_CLIPRECT_RULE,
292
274
SI_TRACKED_PA_SC_LINE_STIPPLE,
294
SI_TRACKED_VGT_ESGS_RING_ITEMSIZE,
296
SI_TRACKED_VGT_GSVS_RING_OFFSET_1, /* 3 consecutive registers */
297
SI_TRACKED_VGT_GSVS_RING_OFFSET_2,
298
SI_TRACKED_VGT_GSVS_RING_OFFSET_3,
300
SI_TRACKED_VGT_GSVS_RING_ITEMSIZE,
275
SI_TRACKED_PA_SC_MODE_CNTL_1,
276
SI_TRACKED_PA_SU_HARDWARE_SCREEN_OFFSET,
277
SI_TRACKED_SPI_PS_IN_CONTROL,
278
SI_TRACKED_VGT_GS_INSTANCE_CNT,
301
279
SI_TRACKED_VGT_GS_MAX_VERT_OUT,
303
SI_TRACKED_VGT_GS_VERT_ITEMSIZE, /* 4 consecutive registers */
304
SI_TRACKED_VGT_GS_VERT_ITEMSIZE_1,
305
SI_TRACKED_VGT_GS_VERT_ITEMSIZE_2,
306
SI_TRACKED_VGT_GS_VERT_ITEMSIZE_3,
308
SI_TRACKED_VGT_GS_INSTANCE_CNT,
309
SI_TRACKED_VGT_GS_ONCHIP_CNTL,
310
SI_TRACKED_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
311
SI_TRACKED_VGT_GS_MODE,
312
SI_TRACKED_VGT_PRIMITIVEID_EN,
313
SI_TRACKED_VGT_REUSE_OFF,
314
SI_TRACKED_SPI_VS_OUT_CONFIG,
315
SI_TRACKED_PA_CL_VTE_CNTL,
316
SI_TRACKED_PA_CL_NGG_CNTL,
317
SI_TRACKED_GE_MAX_OUTPUT_PER_SUBGROUP,
318
SI_TRACKED_GE_NGG_SUBGRP_CNTL,
320
SI_TRACKED_SPI_SHADER_IDX_FORMAT, /* 2 consecutive registers */
321
SI_TRACKED_SPI_SHADER_POS_FORMAT,
323
SI_TRACKED_SPI_PS_INPUT_ENA, /* 2 consecutive registers */
324
SI_TRACKED_SPI_PS_INPUT_ADDR,
326
SI_TRACKED_SPI_BARYC_CNTL,
327
SI_TRACKED_SPI_PS_IN_CONTROL,
329
SI_TRACKED_SPI_SHADER_Z_FORMAT, /* 2 consecutive registers */
330
SI_TRACKED_SPI_SHADER_COL_FORMAT,
332
SI_TRACKED_CB_SHADER_MASK,
280
SI_TRACKED_VGT_SHADER_STAGES_EN,
281
SI_TRACKED_VGT_LS_HS_CONFIG,
333
282
SI_TRACKED_VGT_TF_PARAM,
334
SI_TRACKED_VGT_VERTEX_REUSE_BLOCK_CNTL,
336
/* Non-context registers: */
337
SI_TRACKED_GE_PC_ALLOC,
338
SI_TRACKED_SPI_SHADER_PGM_RSRC3_GS,
339
SI_TRACKED_SPI_SHADER_PGM_RSRC4_GS,
283
SI_TRACKED_PA_SU_SMALL_PRIM_FILTER_CNTL, /* GFX8-9 (only with has_small_prim_filter_sample_loc_bug) */
284
SI_TRACKED_PA_SC_BINNER_CNTL_0, /* GFX9+ */
285
SI_TRACKED_GE_MAX_OUTPUT_PER_SUBGROUP, /* GFX10+ - the SMALL_PRIM_FILTER slot above can be reused */
286
SI_TRACKED_GE_NGG_SUBGRP_CNTL, /* GFX10+ */
287
SI_TRACKED_DB_PA_SC_VRS_OVERRIDE_CNTL, /* GFX10.3+ */
289
/* 3 consecutive registers */
290
SI_TRACKED_SX_PS_DOWNCONVERT, /* GFX8+ */
291
SI_TRACKED_SX_BLEND_OPT_EPSILON, /* GFX8+ */
292
SI_TRACKED_SX_BLEND_OPT_CONTROL, /* GFX8+ */
294
/* The slots below can be reused by other generations. */
295
SI_TRACKED_VGT_ESGS_RING_ITEMSIZE, /* GFX6-8 (GFX9+ can reuse this slot) */
296
SI_TRACKED_VGT_REUSE_OFF, /* GFX6-8 (GFX9+ can reuse this slot) */
297
SI_TRACKED_IA_MULTI_VGT_PARAM, /* GFX6-8 (GFX9+ can reuse this slot) */
299
SI_TRACKED_VGT_GS_MAX_PRIMS_PER_SUBGROUP, /* GFX9-10 - the slots above can be reused */
300
SI_TRACKED_VGT_GS_ONCHIP_CNTL, /* GFX9-10 - the slots above can be reused */
302
SI_TRACKED_VGT_GSVS_RING_ITEMSIZE, /* GFX6-10 (GFX11+ can reuse this slot) */
303
SI_TRACKED_VGT_GS_MODE, /* GFX6-10 (GFX11+ can reuse this slot) */
304
SI_TRACKED_VGT_VERTEX_REUSE_BLOCK_CNTL, /* GFX6-10 (GFX11+ can reuse this slot) */
305
SI_TRACKED_VGT_GS_OUT_PRIM_TYPE, /* GFX6-10 (GFX11+ can reuse this slot) */
307
/* 3 consecutive registers */
308
SI_TRACKED_VGT_GSVS_RING_OFFSET_1, /* GFX6-10 (GFX11+ can reuse this slot) */
309
SI_TRACKED_VGT_GSVS_RING_OFFSET_2, /* GFX6-10 (GFX11+ can reuse this slot) */
310
SI_TRACKED_VGT_GSVS_RING_OFFSET_3, /* GFX6-10 (GFX11+ can reuse this slot) */
312
/* 4 consecutive registers */
313
SI_TRACKED_VGT_GS_VERT_ITEMSIZE, /* GFX6-10 (GFX11+ can reuse this slot) */
314
SI_TRACKED_VGT_GS_VERT_ITEMSIZE_1, /* GFX6-10 (GFX11+ can reuse this slot) */
315
SI_TRACKED_VGT_GS_VERT_ITEMSIZE_2, /* GFX6-10 (GFX11+ can reuse this slot) */
316
SI_TRACKED_VGT_GS_VERT_ITEMSIZE_3, /* GFX6-10 (GFX11+ can reuse this slot) */
318
SI_TRACKED_DB_RENDER_OVERRIDE2, /* GFX6-xx (TBD) */
319
SI_TRACKED_SPI_VS_OUT_CONFIG, /* GFX6-xx (TBD) */
320
SI_TRACKED_VGT_PRIMITIVEID_EN, /* GFX6-xx (TBD) */
321
SI_TRACKED_CB_DCC_CONTROL, /* GFX8-xx (TBD) */
323
SI_NUM_TRACKED_CONTEXT_REGS,
326
/* Non-context registers whose values are tracked by si_context. */
327
enum si_tracked_other_reg {
328
SI_TRACKED_GE_PC_ALLOC, /* GFX10+ */
329
SI_TRACKED_SPI_SHADER_PGM_RSRC3_GS, /* GFX7+ */
330
SI_TRACKED_SPI_SHADER_PGM_RSRC4_GS, /* GFX10+ */
331
SI_TRACKED_VGT_GS_OUT_PRIM_TYPE_UCONFIG, /* GFX11+ */
333
SI_TRACKED_IA_MULTI_VGT_PARAM_UCONFIG, /* GFX9 only */
334
SI_TRACKED_GE_CNTL = SI_TRACKED_IA_MULTI_VGT_PARAM_UCONFIG, /* GFX10+ */
336
SI_TRACKED_SPI_SHADER_PGM_RSRC2_HS, /* GFX9+ (not tracked on previous chips) */
338
/* 3 consecutive registers. */
339
SI_TRACKED_SPI_SHADER_USER_DATA_HS__TCS_OFFCHIP_LAYOUT,
340
SI_TRACKED_SPI_SHADER_USER_DATA_HS__TCS_OFFCHIP_ADDR,
341
SI_TRACKED_SPI_SHADER_USER_DATA_HS__VS_STATE_BITS, /* GFX6-8 */
343
SI_TRACKED_COMPUTE_RESOURCE_LIMITS,
344
SI_TRACKED_COMPUTE_NUM_THREAD_X,
345
SI_TRACKED_COMPUTE_NUM_THREAD_Y,
346
SI_TRACKED_COMPUTE_NUM_THREAD_Z,
347
SI_TRACKED_COMPUTE_TMPRING_SIZE,
348
SI_TRACKED_COMPUTE_PGM_RSRC3, /* GFX11+ */
350
/* 2 consecutive registers. */
351
SI_TRACKED_COMPUTE_PGM_RSRC1,
352
SI_TRACKED_COMPUTE_PGM_RSRC2,
354
/* 2 consecutive registers. */
355
SI_TRACKED_COMPUTE_DISPATCH_SCRATCH_BASE_LO, /* GFX11+ */
356
SI_TRACKED_COMPUTE_DISPATCH_SCRATCH_BASE_HI, /* GFX11+ */
358
SI_NUM_TRACKED_OTHER_REGS,
344
361
struct si_tracked_regs {
346
uint32_t reg_value[SI_NUM_TRACKED_REGS];
362
uint64_t context_reg_saved_mask;
363
uint32_t context_reg_value[SI_NUM_TRACKED_CONTEXT_REGS];
347
364
uint32_t spi_ps_input_cntl[32];
366
uint32_t other_reg_saved_mask;
367
uint32_t other_reg_value[SI_NUM_TRACKED_OTHER_REGS];
350
370
/* Private read-write buffer slots. */