mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
radv/llvm: fix GS shaders on GFX8/9
6698753cdbswitched our GS output stores to use MUBUF. The stride doesn't matter for the ESGS descriptor (because idxen=false and the index stride is 64), but this fixes it anyway. This also changes ACO to use MUBUF store too, since MTBUF doesn't seem to work correctly with an invalid data format in the descriptor. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Fixes:6698753cdb("ac/llvm: don't use tbuffer_store as a fallback for swizzled stores") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18885>
This commit is contained in:
parent
6014a642ae
commit
a71d068fd0
2 changed files with 20 additions and 14 deletions
|
|
@ -7823,20 +7823,18 @@ visit_emit_vertex_with_counter(isel_context* ctx, nir_intrinsic_instr* instr)
|
|||
const_offset %= 4096u;
|
||||
}
|
||||
|
||||
aco_ptr<MTBUF_instruction> mtbuf{create_instruction<MTBUF_instruction>(
|
||||
aco_opcode::tbuffer_store_format_x, Format::MTBUF, 4, 0)};
|
||||
mtbuf->operands[0] = Operand(gsvs_ring);
|
||||
mtbuf->operands[1] = vaddr_offset;
|
||||
mtbuf->operands[2] = Operand(get_arg(ctx, ctx->args->ac.gs2vs_offset));
|
||||
mtbuf->operands[3] = Operand(ctx->outputs.temps[i * 4u + j]);
|
||||
mtbuf->offen = !vaddr_offset.isUndefined();
|
||||
mtbuf->dfmt = V_008F0C_BUF_DATA_FORMAT_32;
|
||||
mtbuf->nfmt = V_008F0C_BUF_NUM_FORMAT_UINT;
|
||||
mtbuf->offset = const_offset;
|
||||
mtbuf->glc = ctx->program->gfx_level < GFX11;
|
||||
mtbuf->slc = true;
|
||||
mtbuf->sync = memory_sync_info(storage_vmem_output, semantic_can_reorder);
|
||||
bld.insert(std::move(mtbuf));
|
||||
aco_ptr<MUBUF_instruction> mubuf{create_instruction<MUBUF_instruction>(
|
||||
aco_opcode::buffer_store_dword, Format::MUBUF, 4, 0)};
|
||||
mubuf->operands[0] = Operand(gsvs_ring);
|
||||
mubuf->operands[1] = vaddr_offset;
|
||||
mubuf->operands[2] = Operand(get_arg(ctx, ctx->args->ac.gs2vs_offset));
|
||||
mubuf->operands[3] = Operand(ctx->outputs.temps[i * 4u + j]);
|
||||
mubuf->offen = !vaddr_offset.isUndefined();
|
||||
mubuf->offset = const_offset;
|
||||
mubuf->glc = ctx->program->gfx_level < GFX11;
|
||||
mubuf->slc = true;
|
||||
mubuf->sync = memory_sync_info(storage_vmem_output, semantic_can_reorder);
|
||||
bld.insert(std::move(mubuf));
|
||||
}
|
||||
|
||||
offset += ctx->shader->info.gs.vertices_out;
|
||||
|
|
|
|||
|
|
@ -4061,6 +4061,10 @@ radv_fill_shader_rings(struct radv_device *device, uint32_t *map, bool add_sampl
|
|||
} else if (device->physical_device->rad_info.gfx_level >= GFX10) {
|
||||
desc[3] |= S_008F0C_FORMAT(V_008F0C_GFX10_FORMAT_32_FLOAT) |
|
||||
S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_DISABLED) | S_008F0C_RESOURCE_LEVEL(1);
|
||||
} else if (device->physical_device->rad_info.gfx_level >= GFX8) {
|
||||
/* DATA_FORMAT is STRIDE[14:17] for MUBUF with ADD_TID_ENABLE=1 */
|
||||
desc[3] |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
|
||||
S_008F0C_DATA_FORMAT(0) | S_008F0C_ELEMENT_SIZE(1);
|
||||
} else {
|
||||
desc[3] |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
|
||||
S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32) | S_008F0C_ELEMENT_SIZE(1);
|
||||
|
|
@ -4133,6 +4137,10 @@ radv_fill_shader_rings(struct radv_device *device, uint32_t *map, bool add_sampl
|
|||
} else if (device->physical_device->rad_info.gfx_level >= GFX10) {
|
||||
desc[7] |= S_008F0C_FORMAT(V_008F0C_GFX10_FORMAT_32_FLOAT) |
|
||||
S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_DISABLED) | S_008F0C_RESOURCE_LEVEL(1);
|
||||
} else if (device->physical_device->rad_info.gfx_level >= GFX8) {
|
||||
/* DATA_FORMAT is STRIDE[14:17] for MUBUF with ADD_TID_ENABLE=1 */
|
||||
desc[7] |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
|
||||
S_008F0C_DATA_FORMAT(0) | S_008F0C_ELEMENT_SIZE(1);
|
||||
} else {
|
||||
desc[7] |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
|
||||
S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32) | S_008F0C_ELEMENT_SIZE(1);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue