mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 16:48:07 +02:00
turnip: don't emit tess consts if they are not used
If tess consts aren't used they don't get included in constlen, and we risk overrunning consts of the next stage. Fixes: dEQP-VK.tessellation.invariance.outer_edge_index_independence.quads_fractional_even_spacing_ccw dEQP-VK.tessellation.invariance.outer_triangle_set.quads_fractional_odd_spacing dEQP-VK.tessellation.invariance.primitive_set.isolines_fractional_odd_spacing_ccw dEQP-VK.tessellation.invariance.primitive_set.quads_fractional_odd_spacing_cw Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4117 Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8578>
This commit is contained in:
parent
212b1516df
commit
fa74389485
3 changed files with 36 additions and 25 deletions
|
|
@ -38,7 +38,3 @@ dEQP-VK.spirv_assembly.instruction.graphics.opquantize.negative_too_small_tesse,
|
|||
dEQP-VK.spirv_assembly.instruction.graphics.opquantize.round_to_inf_tesse,Fail
|
||||
dEQP-VK.spirv_assembly.instruction.graphics.opquantize.spec_const_carry_to_exponent_tesse,Fail
|
||||
dEQP-VK.spirv_assembly.instruction.graphics.opquantize.spec_const_negative_round_up_or_round_down_tesse,Fail
|
||||
dEQP-VK.tessellation.invariance.outer_edge_index_independence.quads_fractional_even_spacing_ccw,Fail
|
||||
dEQP-VK.tessellation.invariance.outer_triangle_set.quads_fractional_odd_spacing,Fail
|
||||
dEQP-VK.tessellation.invariance.primitive_set.isolines_fractional_odd_spacing_ccw,Fail
|
||||
dEQP-VK.tessellation.invariance.primitive_set.quads_fractional_odd_spacing_cw,Fail
|
||||
|
|
|
|||
|
|
@ -26,3 +26,6 @@ dEQP-VK.geometry.layered.cube_array.64_64_12.readback
|
|||
|
||||
# Crashes likely caused by https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2701
|
||||
dEQP-VK.synchronization.cross_instance.*binary_semaphore_fence_fd
|
||||
|
||||
# Timeouts, passes otherwise
|
||||
dEQP-VK.tessellation.invariance.outer_triangle_set.quads_fractional_odd_spacing
|
||||
|
|
|
|||
|
|
@ -3182,10 +3182,18 @@ tu6_emit_tess_consts(struct tu_cmd_buffer *cmd,
|
|||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
const struct tu_program_descriptor_linkage *hs_link =
|
||||
&pipeline->program.link[MESA_SHADER_TESS_CTRL];
|
||||
bool hs_uses_bo = pipeline->tess.hs_bo_regid < hs_link->constlen;
|
||||
|
||||
const struct tu_program_descriptor_linkage *ds_link =
|
||||
&pipeline->program.link[MESA_SHADER_TESS_EVAL];
|
||||
bool ds_uses_bo = pipeline->tess.ds_bo_regid < ds_link->constlen;
|
||||
|
||||
uint64_t tess_factor_size = get_tess_factor_bo_size(pipeline, draw_count);
|
||||
uint64_t tess_param_size = get_tess_param_bo_size(pipeline, draw_count);
|
||||
uint64_t tess_bo_size = tess_factor_size + tess_param_size;
|
||||
if (tess_bo_size > 0) {
|
||||
if ((hs_uses_bo || ds_uses_bo) && tess_bo_size > 0) {
|
||||
struct tu_bo *tess_bo;
|
||||
result = tu_get_scratch_bo(cmd->device, tess_bo_size, &tess_bo);
|
||||
if (result != VK_SUCCESS)
|
||||
|
|
@ -3194,27 +3202,31 @@ tu6_emit_tess_consts(struct tu_cmd_buffer *cmd,
|
|||
uint64_t tess_factor_iova = tess_bo->iova;
|
||||
uint64_t tess_param_iova = tess_factor_iova + tess_factor_size;
|
||||
|
||||
tu_cs_emit_pkt7(&cs, CP_LOAD_STATE6_GEOM, 3 + 4);
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_0_DST_OFF(pipeline->tess.hs_bo_regid) |
|
||||
CP_LOAD_STATE6_0_STATE_TYPE(ST6_CONSTANTS) |
|
||||
CP_LOAD_STATE6_0_STATE_SRC(SS6_DIRECT) |
|
||||
CP_LOAD_STATE6_0_STATE_BLOCK(SB6_HS_SHADER) |
|
||||
CP_LOAD_STATE6_0_NUM_UNIT(1));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_1_EXT_SRC_ADDR(0));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI(0));
|
||||
tu_cs_emit_qw(&cs, tess_param_iova);
|
||||
tu_cs_emit_qw(&cs, tess_factor_iova);
|
||||
if (hs_uses_bo) {
|
||||
tu_cs_emit_pkt7(&cs, CP_LOAD_STATE6_GEOM, 3 + 4);
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_0_DST_OFF(pipeline->tess.hs_bo_regid) |
|
||||
CP_LOAD_STATE6_0_STATE_TYPE(ST6_CONSTANTS) |
|
||||
CP_LOAD_STATE6_0_STATE_SRC(SS6_DIRECT) |
|
||||
CP_LOAD_STATE6_0_STATE_BLOCK(SB6_HS_SHADER) |
|
||||
CP_LOAD_STATE6_0_NUM_UNIT(1));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_1_EXT_SRC_ADDR(0));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI(0));
|
||||
tu_cs_emit_qw(&cs, tess_param_iova);
|
||||
tu_cs_emit_qw(&cs, tess_factor_iova);
|
||||
}
|
||||
|
||||
tu_cs_emit_pkt7(&cs, CP_LOAD_STATE6_GEOM, 3 + 4);
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_0_DST_OFF(pipeline->tess.ds_bo_regid) |
|
||||
CP_LOAD_STATE6_0_STATE_TYPE(ST6_CONSTANTS) |
|
||||
CP_LOAD_STATE6_0_STATE_SRC(SS6_DIRECT) |
|
||||
CP_LOAD_STATE6_0_STATE_BLOCK(SB6_DS_SHADER) |
|
||||
CP_LOAD_STATE6_0_NUM_UNIT(1));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_1_EXT_SRC_ADDR(0));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI(0));
|
||||
tu_cs_emit_qw(&cs, tess_param_iova);
|
||||
tu_cs_emit_qw(&cs, tess_factor_iova);
|
||||
if (ds_uses_bo) {
|
||||
tu_cs_emit_pkt7(&cs, CP_LOAD_STATE6_GEOM, 3 + 4);
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_0_DST_OFF(pipeline->tess.ds_bo_regid) |
|
||||
CP_LOAD_STATE6_0_STATE_TYPE(ST6_CONSTANTS) |
|
||||
CP_LOAD_STATE6_0_STATE_SRC(SS6_DIRECT) |
|
||||
CP_LOAD_STATE6_0_STATE_BLOCK(SB6_DS_SHADER) |
|
||||
CP_LOAD_STATE6_0_NUM_UNIT(1));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_1_EXT_SRC_ADDR(0));
|
||||
tu_cs_emit(&cs, CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI(0));
|
||||
tu_cs_emit_qw(&cs, tess_param_iova);
|
||||
tu_cs_emit_qw(&cs, tess_factor_iova);
|
||||
}
|
||||
|
||||
*factor_iova = tess_factor_iova;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue