radv: remove GFX6-7 DGC support completely
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31491>
This commit is contained in:
committed by
Marge Bot
parent
e4f67f2106
commit
50f78e4a54
@@ -1,4 +1,2 @@
|
||||
# These vkd3d-proton tests are skipped because they trigger GPU hangs.
|
||||
test_execute_indirect_state
|
||||
test_execute_indirect_state_predication
|
||||
test_undefined_descriptor_heap_mismatch_types
|
||||
|
||||
@@ -11605,7 +11605,6 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPre
|
||||
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
|
||||
const bool compute = layout->pipeline_bind_point == VK_PIPELINE_BIND_POINT_COMPUTE;
|
||||
const bool use_predication = radv_use_dgc_predication(cmd_buffer, pGeneratedCommandsInfo);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
|
||||
/* Secondary command buffers are needed for the full extension but can't use
|
||||
* PKT3_INDIRECT_BUFFER.
|
||||
@@ -11719,13 +11718,7 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPre
|
||||
|
||||
cmd_buffer->push_constant_stages |= graphics_pipeline->active_stages;
|
||||
|
||||
if (!layout->indexed && pdev->info.gfx_level >= GFX7) {
|
||||
/* On GFX7 and later, non-indexed draws overwrite VGT_INDEX_TYPE, so the state must be
|
||||
* re-emitted before the next indexed draw.
|
||||
*/
|
||||
cmd_buffer->state.last_index_type = -1;
|
||||
}
|
||||
|
||||
cmd_buffer->state.last_index_type = -1;
|
||||
cmd_buffer->state.last_num_instances = -1;
|
||||
cmd_buffer->state.last_vertex_offset_valid = false;
|
||||
cmd_buffer->state.last_first_instance = -1;
|
||||
|
||||
@@ -571,22 +571,9 @@ nir_pkt3(nir_builder *b, unsigned op, nir_def *len)
|
||||
return nir_pkt3_base(b, op, len, false);
|
||||
}
|
||||
|
||||
static nir_def *
|
||||
dgc_get_nop_packet(nir_builder *b, const struct radv_device *device)
|
||||
{
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
|
||||
if (pdev->info.gfx_ib_pad_with_type2) {
|
||||
return nir_imm_int(b, PKT2_NOP_PAD);
|
||||
} else {
|
||||
return nir_imm_int(b, PKT3_NOP_PAD);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dgc_emit_userdata_vertex(struct dgc_cmdbuf *cs, nir_def *first_vertex, nir_def *first_instance, nir_def *drawid)
|
||||
{
|
||||
const struct radv_device *device = cs->dev;
|
||||
nir_builder *b = cs->b;
|
||||
|
||||
nir_def *vtx_base_sgpr = load_param16(b, vtx_base_sgpr);
|
||||
@@ -604,15 +591,14 @@ dgc_emit_userdata_vertex(struct dgc_cmdbuf *cs, nir_def *first_vertex, nir_def *
|
||||
dgc_cs_emit(nir_iand_imm(b, vtx_base_sgpr, 0x3FFF));
|
||||
dgc_cs_emit(first_vertex);
|
||||
dgc_cs_emit(nir_bcsel(b, nir_ior(b, has_drawid, has_baseinstance), nir_bcsel(b, has_drawid, drawid, first_instance),
|
||||
dgc_get_nop_packet(b, device)));
|
||||
dgc_cs_emit(nir_bcsel(b, nir_iand(b, has_drawid, has_baseinstance), first_instance, dgc_get_nop_packet(b, device)));
|
||||
nir_imm_int(b, PKT3_NOP_PAD)));
|
||||
dgc_cs_emit(nir_bcsel(b, nir_iand(b, has_drawid, has_baseinstance), first_instance, nir_imm_int(b, PKT3_NOP_PAD)));
|
||||
dgc_cs_end();
|
||||
}
|
||||
|
||||
static void
|
||||
dgc_emit_userdata_mesh(struct dgc_cmdbuf *cs, nir_def *x, nir_def *y, nir_def *z, nir_def *drawid)
|
||||
{
|
||||
const struct radv_device *device = cs->dev;
|
||||
nir_builder *b = cs->b;
|
||||
|
||||
nir_def *vtx_base_sgpr = load_param16(b, vtx_base_sgpr);
|
||||
@@ -632,9 +618,9 @@ dgc_emit_userdata_mesh(struct dgc_cmdbuf *cs, nir_def *x, nir_def *y, nir_def *z
|
||||
dgc_cs_emit(nir_iand_imm(b, vtx_base_sgpr, 0x3FFF));
|
||||
/* DrawID needs to be first if no GridSize. */
|
||||
dgc_cs_emit(nir_bcsel(b, has_grid_size, x, drawid));
|
||||
dgc_cs_emit(nir_bcsel(b, has_grid_size, y, dgc_get_nop_packet(b, device)));
|
||||
dgc_cs_emit(nir_bcsel(b, has_grid_size, z, dgc_get_nop_packet(b, device)));
|
||||
dgc_cs_emit(nir_bcsel(b, has_drawid, drawid, dgc_get_nop_packet(b, device)));
|
||||
dgc_cs_emit(nir_bcsel(b, has_grid_size, y, nir_imm_int(b, PKT3_NOP_PAD)));
|
||||
dgc_cs_emit(nir_bcsel(b, has_grid_size, z, nir_imm_int(b, PKT3_NOP_PAD)));
|
||||
dgc_cs_emit(nir_bcsel(b, has_drawid, drawid, nir_imm_int(b, PKT3_NOP_PAD)));
|
||||
dgc_cs_end();
|
||||
}
|
||||
nir_pop_if(b, NULL);
|
||||
@@ -949,17 +935,12 @@ build_dgc_buffer_tail(nir_builder *b, nir_def *cmd_buf_offset, nir_def *cmd_buf_
|
||||
|
||||
nir_def *packet, *packet_size;
|
||||
|
||||
if (pdev->info.gfx_ib_pad_with_type2) {
|
||||
packet_size = nir_imm_int(b, 4);
|
||||
packet = nir_imm_int(b, PKT2_NOP_PAD);
|
||||
} else {
|
||||
packet_size = nir_isub(b, cmd_buf_size, curr_offset);
|
||||
packet_size = nir_umin(b, packet_size, nir_imm_int(b, MAX_PACKET_WORDS * 4));
|
||||
packet_size = nir_isub(b, cmd_buf_size, curr_offset);
|
||||
packet_size = nir_umin(b, packet_size, nir_imm_int(b, MAX_PACKET_WORDS * 4));
|
||||
|
||||
nir_def *len = nir_ushr_imm(b, packet_size, 2);
|
||||
len = nir_iadd_imm(b, len, -2);
|
||||
packet = nir_pkt3(b, PKT3_NOP, len);
|
||||
}
|
||||
nir_def *len = nir_ushr_imm(b, packet_size, 2);
|
||||
len = nir_iadd_imm(b, len, -2);
|
||||
packet = nir_pkt3(b, PKT3_NOP, len);
|
||||
|
||||
nir_build_store_global(b, packet, nir_iadd(b, va, nir_u2u64(b, nir_iadd(b, curr_offset, cmd_buf_offset))),
|
||||
.access = ACCESS_NON_READABLE);
|
||||
@@ -1166,7 +1147,7 @@ dgc_emit_index_buffer(struct dgc_cmdbuf *cs, nir_def *stream_addr, nir_variable
|
||||
} else {
|
||||
dgc_cs_emit_imm(PKT3(PKT3_INDEX_TYPE, 0, 0));
|
||||
dgc_cs_emit(index_type);
|
||||
dgc_cs_emit(dgc_get_nop_packet(b, device));
|
||||
dgc_cs_emit(nir_imm_int(b, PKT3_NOP_PAD));
|
||||
}
|
||||
|
||||
dgc_cs_emit_imm(PKT3(PKT3_INDEX_BASE, 1, 0));
|
||||
@@ -1902,40 +1883,18 @@ dgc_is_cond_render_enabled(nir_builder *b)
|
||||
static void
|
||||
dgc_pad_cmdbuf(struct dgc_cmdbuf *cs, nir_def *cmd_buf_end)
|
||||
{
|
||||
const struct radv_device *device = cs->dev;
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
nir_builder *b = cs->b;
|
||||
|
||||
nir_push_if(b, nir_ine(b, nir_load_var(b, cs->offset), cmd_buf_end));
|
||||
{
|
||||
if (pdev->info.gfx_ib_pad_with_type2) {
|
||||
nir_push_loop(b);
|
||||
{
|
||||
nir_def *curr_offset = nir_load_var(b, cs->offset);
|
||||
nir_def *cnt = nir_isub(b, cmd_buf_end, nir_load_var(b, cs->offset));
|
||||
cnt = nir_ushr_imm(b, cnt, 2);
|
||||
cnt = nir_iadd_imm(b, cnt, -2);
|
||||
nir_def *pkt = nir_pkt3(b, PKT3_NOP, cnt);
|
||||
|
||||
nir_push_if(b, nir_ieq(b, curr_offset, cmd_buf_end));
|
||||
{
|
||||
nir_jump(b, nir_jump_break);
|
||||
}
|
||||
nir_pop_if(b, NULL);
|
||||
|
||||
nir_def *pkt = nir_imm_int(b, PKT2_NOP_PAD);
|
||||
|
||||
dgc_cs_begin(cs);
|
||||
dgc_cs_emit(pkt);
|
||||
dgc_cs_end();
|
||||
}
|
||||
nir_pop_loop(b, NULL);
|
||||
} else {
|
||||
nir_def *cnt = nir_isub(b, cmd_buf_end, nir_load_var(b, cs->offset));
|
||||
cnt = nir_ushr_imm(b, cnt, 2);
|
||||
cnt = nir_iadd_imm(b, cnt, -2);
|
||||
nir_def *pkt = nir_pkt3(b, PKT3_NOP, cnt);
|
||||
|
||||
dgc_cs_begin(cs);
|
||||
dgc_cs_emit(pkt);
|
||||
dgc_cs_end();
|
||||
}
|
||||
dgc_cs_begin(cs);
|
||||
dgc_cs_emit(pkt);
|
||||
dgc_cs_end();
|
||||
}
|
||||
nir_pop_if(b, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user