From a5146fc0a9f5c8f6fb9c050bdc2dacf1a03a9ed9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 19 May 2026 13:24:39 -0400 Subject: [PATCH] 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: --- .../drivers/zink/ci/zink-anv-adl-fails.txt | 21 ---------- .../drivers/zink/ci/zink-anv-tgl-fails.txt | 21 ---------- .../drivers/zink/ci/zink-lavapipe-fails.txt | 17 -------- .../drivers/zink/ci/zink-nvk-ad106-fails.txt | 17 -------- .../drivers/zink/ci/zink-nvk-ga106-fails.txt | 17 -------- .../drivers/zink/ci/zink-radv-fails.txt | 17 -------- .../drivers/zink/ci/zink-tu-a750-fails.txt | 9 ----- .../zink/ci/zink-venus-lavapipe-fails.txt | 9 ----- src/gallium/drivers/zink/zink_context.c | 39 ++++++++++++++++++- src/gallium/drivers/zink/zink_draw.cpp | 5 ++- src/gallium/drivers/zink/zink_state.c | 2 + 11 files changed, 43 insertions(+), 131 deletions(-) diff --git a/src/gallium/drivers/zink/ci/zink-anv-adl-fails.txt b/src/gallium/drivers/zink/ci/zink-anv-adl-fails.txt index 242fc786d28..110c5f7f478 100644 --- a/src/gallium/drivers/zink/ci/zink-anv-adl-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-anv-adl-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt b/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt index ef396a06c35..4fa6f098450 100644 --- a/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-lavapipe-fails.txt b/src/gallium/drivers/zink/ci/zink-lavapipe-fails.txt index c451bf2deab..ac781b4a440 100644 --- a/src/gallium/drivers/zink/ci/zink-lavapipe-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lavapipe-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-nvk-ad106-fails.txt b/src/gallium/drivers/zink/ci/zink-nvk-ad106-fails.txt index e8483a89d0a..eb204df9e27 100644 --- a/src/gallium/drivers/zink/ci/zink-nvk-ad106-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-nvk-ad106-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-nvk-ga106-fails.txt b/src/gallium/drivers/zink/ci/zink-nvk-ga106-fails.txt index c9060b3127f..b55bbf2f6b5 100644 --- a/src/gallium/drivers/zink/ci/zink-nvk-ga106-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-nvk-ga106-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-radv-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-fails.txt index a318c85fe8b..2b23e8a7d2e 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-tu-a750-fails.txt b/src/gallium/drivers/zink/ci/zink-tu-a750-fails.txt index 50146b01f4c..91f7050ac80 100644 --- a/src/gallium/drivers/zink/ci/zink-tu-a750-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-tu-a750-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/ci/zink-venus-lavapipe-fails.txt b/src/gallium/drivers/zink/ci/zink-venus-lavapipe-fails.txt index 8a5cace00f2..21e3664834a 100644 --- a/src/gallium/drivers/zink/ci/zink-venus-lavapipe-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-venus-lavapipe-fails.txt @@ -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 diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 8981e3eff8f..e264e57b270 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -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 diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index c0a2a18bb3e..5ae73125f99 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -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); diff --git a/src/gallium/drivers/zink/zink_state.c b/src/gallium/drivers/zink/zink_state.c index e1d1d652ee7..8fa61a8c818 100644 --- a/src/gallium/drivers/zink/zink_state.c +++ b/src/gallium/drivers/zink/zink_state.c @@ -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) \