mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
tu: Lower ViewIndex to 0 when multiview is disabled
This is an optimization, but it also seems to be required because the HW
sometimes fails to set ViewIndex to 0. This fixes flakes with
dEQP-VK.renderpass2.fragment_density_map.*multiviewport where the VS for
the main renderpass is reused for the copy renderpass afterwards and it
copies ViewIndex to ViewportIndex expecting it to be 0 since multiview
is disabled for the copy renderpass.
Closes: #13534
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37206>
(cherry picked from commit 7527ad001a)
This commit is contained in:
parent
81b4015c0e
commit
4d60b13dee
5 changed files with 28 additions and 35 deletions
|
|
@ -8284,7 +8284,7 @@
|
|||
"description": "tu: Lower ViewIndex to 0 when multiview is disabled",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null,
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -274,7 +274,6 @@ dEQP-VK.tessellation.invariance.*
|
|||
# Updated by ci-collate
|
||||
spec@arb_gpu_shader_fp64@execution@arb_gpu_shader_fp64-wrong-type-setter
|
||||
spec@ext_external_objects@vk-image-display-overwrite
|
||||
bypass-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
|
||||
# SKQP test which seems to flake out
|
||||
SRGBReadWritePixels
|
||||
|
|
|
|||
|
|
@ -2,9 +2,6 @@ KHR-GL46.buffer_storage.map_persistent_dispatch
|
|||
KHR-GL46.buffer_storage.map_persistent_flush
|
||||
KHR-GL46.shader_subroutine.control_flow_and_returned_subroutine_values_used_as_subroutine_input
|
||||
|
||||
# Updated by ci-collate, found in this job run: https://gitlab.freedesktop.org/mesa/mesa/-/jobs/56164989
|
||||
bypass-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
|
||||
# a618 and a660 seem to have some general instability in tesselation and GS.
|
||||
# Some tess tests also use the GS (tesselation.invariance), but others
|
||||
# don't (spirv_assembly). They don't appear to be correlated to any GPU
|
||||
|
|
@ -57,8 +54,6 @@ dEQP-VK.subgroups.clustered.compute.subgroupclusteredmax_i64vec3
|
|||
dEQP-VK.subgroups.clustered.graphics.subgroupclusteredmul_u64vec4
|
||||
|
||||
# Updated by ci-collate
|
||||
bypass-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
dEQP-VK.reconvergence.workgroup_uniform_control_flow_ballot.compute.nesting4.7.38
|
||||
dEQP-VK.query_pool.statistics_query.host_query_reset.geometry_shader_primitives.secondary.64bits_cmdcopyquerypoolresults_triangle_list_clear_depth
|
||||
|
||||
|
|
@ -68,19 +63,9 @@ dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8_snorm_single_layer
|
|||
# glcts update
|
||||
KHR-GL46.texture_view.view_classes
|
||||
|
||||
# Appeared after decreasing the fraction
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
bypass-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_2_multiviewportg
|
||||
gmem-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
gmem-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
|
||||
# Random flakes, unkown when they started appearing
|
||||
dEQP-VK.subgroups.shuffle.graphics.subgroupshufflexor_int64_t_constant
|
||||
dEQP-VK.subgroups.shuffle.framebuffer.subgroupshuffle_bool_tess_control
|
||||
bypass-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
bypass-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
|
||||
# New flake with GL CTS 4.6.6.0
|
||||
KHR-GL46.gpu_shader_fp64.builtin.smoothstep_dvec4
|
||||
|
|
|
|||
|
|
@ -199,14 +199,7 @@ dEQP-VK.query_pool.occlusion_query.get_results_size_32_stride_12_with_availabili
|
|||
dEQP-VK.query_pool.statistics_query.fragment_shader_invocations.primary.64bits_dstoffset_cmdcopyquerypoolresults_triangle_fan_clear_depth
|
||||
|
||||
dEQP-VK.renderpass.suballocation.multisample_resolve.layers_6.r16_sfloat.samples_4_resolve_level_2
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_1_1_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_1_1_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
|
||||
dEQP-VK.renderpass2.suballocation.multisample_resolve.layers_6.r8g8b8a8_snorm.samples_4_resolve_level_2
|
||||
dEQP-VK.renderpass2.suballocation.multisample_resolve.r32g32b32a32_sfloat.max_attachments_8_samples_4
|
||||
|
||||
|
|
@ -279,16 +272,6 @@ dEQP-VK.ubo.2_level_array.scalar.column_major_mat3.fragment
|
|||
dEQP-VK.ubo.3_level_array.std430.mat4x2.both_comp_access
|
||||
|
||||
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_1_1_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_1_1_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_1_2_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_1_multiviewport
|
||||
dynamic-dEQP-VK.renderpass2.fragment_density_map.2_views.render.non_divisible_density_size.2_samples.static_subsampled_2_2_multiviewport
|
||||
|
||||
|
||||
gmem-dEQP-VK.api.image_clearing.dedicated_allocation.clear_color_image.2d.linear.remaining_array_layers.r16g16_unorm_33x128
|
||||
|
||||
gmem-dEQP-VK.binding_model.descriptor_buffer.embedded_imm_samplers.graphics_geom_buffers1_samplers4
|
||||
|
|
|
|||
|
|
@ -1217,6 +1217,29 @@ tu_nir_lower_layered_fdm(nir_shader *shader,
|
|||
nir_metadata_control_flow, &state);
|
||||
}
|
||||
|
||||
static bool
|
||||
lower_view_to_zero_filter(const nir_instr *instr, const void *cb)
|
||||
{
|
||||
return instr->type == nir_instr_type_intrinsic;
|
||||
}
|
||||
|
||||
static nir_def *
|
||||
lower_view_to_zero(nir_builder *b, nir_instr *instr, void *cb)
|
||||
{
|
||||
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
|
||||
if (intrin->intrinsic != nir_intrinsic_load_view_index)
|
||||
return NULL;
|
||||
|
||||
return nir_imm_int(b, 0);
|
||||
}
|
||||
|
||||
static bool
|
||||
tu_nir_lower_view_to_zero(nir_shader *shader)
|
||||
{
|
||||
return nir_shader_lower_instructions(shader, lower_view_to_zero_filter,
|
||||
lower_view_to_zero, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
shared_type_info(const struct glsl_type *type, unsigned *size, unsigned *align)
|
||||
{
|
||||
|
|
@ -2696,6 +2719,9 @@ tu_shader_create(struct tu_device *dev,
|
|||
tu_nir_lower_multiview(nir, key->multiview_mask, dev);
|
||||
}
|
||||
|
||||
if (!key->multiview_mask)
|
||||
tu_nir_lower_view_to_zero(nir);
|
||||
|
||||
if (nir->info.stage == MESA_SHADER_FRAGMENT && key->force_sample_interp) {
|
||||
nir_foreach_shader_in_variable(var, nir) {
|
||||
if (!var->data.centroid)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue