zink: use custom sample locations to (mostly) handle multisample=disabled

setting all the sample locs to {0.5,0.5} is the same as single-sampled,
which produces the desired output

does not yet handle cases with shader samplemask access

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41862>
This commit is contained in:
Mike Blumenkrantz 2026-05-19 13:24:39 -04:00 committed by Marge Bot
parent 38c4461c78
commit a5146fc0a9
11 changed files with 43 additions and 131 deletions

View file

@ -477,20 +477,6 @@ spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_
spec@egl_khr_surfaceless_context@viewport,Fail
spec@egl_mesa_configless_context@basic,Fail
spec@ext_framebuffer_multisample@clip-and-scissor-blit 16 msaa,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 16 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 16 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 16 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 16 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-export,Fail
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-ownership_transfer,Fail
spec@ext_image_dma_buf_import@ext_image_dma_buf_import-refcount,Fail
@ -525,8 +511,6 @@ spec@khr_texture_compression_astc@miptree-gles srgb-fp@sRGB decode full precisio
# uprev Piglit in Mesa
spec@!opengl 1.1@large-tex,Fail
spec@!opengl 1.1@large-tex@test_clear_tex_sub_image,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
#glcts update
spec@glsl-4.00@execution@built-in-functions@fs-inverse-dmat4,Crash
@ -553,21 +537,16 @@ spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_x,Fail
spec@khr_texture_compression_astc@sliced-3d-miptree-gl srgb-fp@sRGB decode full precision,Fail
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_y,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-deriv-disabled,Fail
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_x,Fail
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-deriv-disabled,Fail
spec@arb_sample_shading@samplemask 4,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-deriv-disabled,Fail
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp,Fail
spec@khr_texture_compression_astc@sliced-3d-miptree-gles srgb-fp@sRGB decode full precision,Fail
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min,Fail
spec@!opengl 1.1@depthstencil-default_fb-blit samples=2,Fail
spec@arb_sample_shading@samplemask 6,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
# EGL
wayland-dEQP-EGL.functional.resize.surface_size.grow,Fail

View file

@ -451,27 +451,6 @@ spec@egl_khr_surfaceless_context@viewport,Fail
spec@ext_external_objects@vk-image-overwrite@RGB 10 A2 UINT optimal: Failed to initialize OpenGL FBO/RBO,Fail
spec@ext_framebuffer_multisample@clip-and-scissor-blit 16 msaa,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 16 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 16 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 16 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 16 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail
spec@ext_transform_feedback@tessellation triangle_fan flat_first,Fail
spec@ext_transform_feedback@tessellation quad_strip wireframe,Fail

View file

@ -122,27 +122,10 @@ spec@ext_framebuffer_multisample@accuracy 8 srgb depthstencil,Fail
spec@ext_framebuffer_multisample@accuracy 8 srgb depthstencil linear,Fail
spec@ext_framebuffer_multisample@accuracy all_samples srgb depthstencil,Fail
spec@ext_framebuffer_multisample@accuracy all_samples srgb depthstencil linear,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-edges,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-edges,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-edges,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-edges,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail
spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail
spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail

View file

@ -341,23 +341,6 @@ spec@egl_khr_surfaceless_context@viewport,Fail
spec@egl_mesa_configless_context@basic,Fail
spec@ext_external_objects@vk-image-overwrite,Crash
spec@ext_external_objects@vk-ping-pong-multi-sem,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@upsample 2 stencil,Fail
spec@ext_framebuffer_multisample@upsample 4 stencil,Fail
spec@ext_framebuffer_multisample@upsample 6 stencil,Fail

View file

@ -345,23 +345,6 @@ spec@egl_khr_surfaceless_context@viewport,Fail
spec@egl_mesa_configless_context@basic,Fail
spec@ext_external_objects@vk-image-overwrite,Crash
spec@ext_external_objects@vk-image-overwrite@RGBA 4 UNORM linear,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@upsample 2 stencil,Fail
spec@ext_framebuffer_multisample@upsample 4 stencil,Fail
spec@ext_framebuffer_multisample@upsample 6 stencil,Fail

View file

@ -326,23 +326,6 @@ spec@egl_chromium_sync_control@conformance,Fail
spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail
spec@egl_khr_gl_image@egl_khr_gl_renderbuffer_image-clear-shared-image gl_depth_component24,Fail
spec@egl_khr_surfaceless_context@viewport,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 6 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail
spec@ext_transform_feedback@tessellation quad_strip wireframe,Fail
spec@ext_transform_feedback@tessellation quads wireframe,Fail
spec@glsl-1.10@execution@glsl-fs-inline-explosion,Crash

View file

@ -151,18 +151,9 @@ spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 2,Fail
spec@ext_framebuffer_multisample@alpha-to-coverage-no-draw-buffer-zero 4,Fail
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 2,Fail
spec@ext_framebuffer_multisample@draw-buffers-alpha-to-coverage 4,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@formats 2,Fail
spec@ext_framebuffer_multisample@formats 4,Fail
spec@ext_framebuffer_multisample@formats all_samples,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 2 color,Fail
spec@ext_framebuffer_multisample@sample-alpha-to-coverage 4 color,Fail

View file

@ -97,17 +97,8 @@ spec@ext_framebuffer_multisample@clip-and-scissor-blit 2 msaa,Fail
spec@ext_framebuffer_multisample@clip-and-scissor-blit 2 upsample,Fail
spec@ext_framebuffer_multisample@clip-and-scissor-blit 4 msaa,Fail
spec@ext_framebuffer_multisample@clip-and-scissor-blit 4 upsample,Fail
spec@ext_framebuffer_multisample@enable-flag,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 centroid-edges,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 2 non-centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 centroid-edges,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-deriv-disabled,Fail
spec@ext_framebuffer_multisample@interpolation 4 non-centroid-disabled,Fail
spec@ext_packed_float@query-rgba-signed-components,Fail
spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail

View file

@ -3064,6 +3064,8 @@ begin_rendering(struct zink_context *ctx, bool check_attachment_shadow)
{
unsigned clear_buffers = 0;
struct zink_screen *screen = zink_screen(ctx->base.screen);
if (screen->base.caps.programmable_sample_locations)
ctx->sample_locations_changed = true;
if (ctx->has_swapchain)
zink_render_fixup_swapchain(ctx);
bool has_depth = false;
@ -3684,6 +3686,41 @@ void
zink_init_vk_sample_locations(struct zink_context *ctx, VkSampleLocationsInfoEXT *loc)
{
struct zink_screen *screen = zink_screen(ctx->base.screen);
static const VkSampleLocationEXT ms_disabled[] = {
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
{0.5, 0.5},
};
if (ctx->sample_locations_changed)
zink_update_vk_sample_locations(ctx);
unsigned idx = util_logbase2_ceil(MAX2(ctx->gfx_pipeline_state.rast_samples + 1, 1));
@ -3692,7 +3729,7 @@ zink_init_vk_sample_locations(struct zink_context *ctx, VkSampleLocationsInfoEXT
loc->sampleLocationGridSize = screen->maxSampleLocationGridSize[idx];
loc->sampleLocationsPerPixel = ctx->gfx_pipeline_state.rast_samples + 1;
loc->sampleLocationsCount = loc->sampleLocationGridSize.width * loc->sampleLocationGridSize.height * loc->sampleLocationsPerPixel;
loc->pSampleLocations = ctx->vk_sample_locations;
loc->pSampleLocations = ctx->sample_locations_enabled ? ctx->vk_sample_locations : ms_disabled;
}
static void

View file

@ -449,8 +449,9 @@ emit_dynamic_state(struct zink_context *ctx, bool pipeline_changed, unsigned num
}
if ((BATCH_CHANGED && (screen->base.caps.programmable_sample_locations || uses_shobj)) || ctx->sample_locations_changed) {
VKCTX(CmdSetSampleLocationsEnableEXT)(bs->cmdbuf, ctx->sample_locations_enabled);
if (ctx->sample_locations_enabled) {
bool enabled = ctx->sample_locations_enabled || (!rast_state->base.multisample && ctx->gfx_pipeline_state.rast_samples);
VKCTX(CmdSetSampleLocationsEnableEXT)(bs->cmdbuf, enabled);
if (enabled) {
VkSampleLocationsInfoEXT loc;
zink_init_vk_sample_locations(ctx, &loc);
VKCTX(CmdSetSampleLocationsEXT)(bs->cmdbuf, &loc);

View file

@ -631,6 +631,7 @@ zink_bind_rasterizer_state(struct pipe_context *pctx, void *cso)
bool rasterizer_discard = ctx->rast_state ? ctx->rast_state->base.rasterizer_discard : false;
bool half_pixel_center = ctx->rast_state ? ctx->rast_state->base.half_pixel_center : true;
bool representative_fragment_test = ctx->rast_state ? ctx->rast_state->base.representative_fragment_test : false;
bool multisample = ctx->rast_state ? ctx->rast_state->base.multisample : false;
float line_width = ctx->rast_state ? ctx->rast_state->base.line_width : 1.0;
ctx->rast_state = cso;
@ -654,6 +655,7 @@ zink_bind_rasterizer_state(struct pipe_context *pctx, void *cso)
zink_set_last_vertex_key(ctx)->clip_halfz = ctx->rast_state->base.clip_halfz;
ctx->vp_state_changed = true;
}
ctx->sample_locations_changed |= screen->base.caps.programmable_sample_locations && (multisample != ctx->rast_state->base.multisample);
if (screen->info.have_EXT_extended_dynamic_state3) {
#define STATE_CHECK(NAME, FLAG) \