lavapipe: Implement VK_EXT_fragment_shader_interlock

This is a noop implementation because it is not possible for multiple
threads to access the same pixel during rasterization since it is
tiled.

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33628>
This commit is contained in:
Konstantin Seurer 2025-02-22 11:29:38 +01:00 committed by Marge Bot
parent 94c8a0e820
commit 3d1072ec26
2 changed files with 12 additions and 0 deletions

View file

@ -5172,6 +5172,12 @@ visit_intrinsic(struct lp_build_nir_soa_context *bld,
result[0] = load_ubo_base_addr(bld, get_src(bld, &instr->src[0], 0));
break;
}
case nir_intrinsic_begin_invocation_interlock:
case nir_intrinsic_end_invocation_interlock:
/* There is no need to do any synchronization here since llvmpipe rasterizes
* geometry using tiles and each tile is handled by only one thread at once.
*/
break;
default:
fprintf(stderr, "Unsupported intrinsic: ");
nir_print_instr(&instr->instr, stderr);

View file

@ -213,6 +213,7 @@ static const struct vk_device_extension_table lvp_device_extensions_supported =
.EXT_extended_dynamic_state2 = true,
.EXT_extended_dynamic_state3 = true,
.EXT_external_memory_host = true,
.EXT_fragment_shader_interlock = true,
.EXT_graphics_pipeline_library = true,
.EXT_hdr_metadata = true,
.EXT_host_image_copy = true,
@ -763,6 +764,11 @@ lvp_get_features(const struct lvp_physical_device *pdevice,
/* VK_KHR_shader_quad_control */
.shaderQuadControl = true,
/* VK_EXT_fragment_shader_interlock */
.fragmentShaderSampleInterlock = true,
.fragmentShaderPixelInterlock = true,
.fragmentShaderShadingRateInterlock = false,
};
}