From 652db34f8a63e39e0cfaa6bd539f30266712a70c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 2 Apr 2021 15:16:17 -0400 Subject: [PATCH] zink: populate maxSampleLocationGridSize for all available sample sizes on init Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/zink_screen.c | 12 ++++++++++++ src/gallium/drivers/zink/zink_screen.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index c5fe1a9f0e8..62711ce81bc 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -1709,6 +1709,18 @@ zink_internal_create_screen(const struct pipe_screen_config *config) screen->base.destroy = zink_destroy_screen; screen->base.finalize_nir = zink_shader_finalize; + if (screen->info.have_EXT_sample_locations) { + VkMultisamplePropertiesEXT prop; + prop.sType = VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT; + prop.pNext = NULL; + for (unsigned i = 0; i < ARRAY_SIZE(screen->maxSampleLocationGridSize); i++) { + if (screen->info.sample_locations_props.sampleLocationSampleCounts & (1 << i)) { + screen->vk_GetPhysicalDeviceMultisamplePropertiesEXT(screen->pdev, 1 << i, &prop); + screen->maxSampleLocationGridSize[i] = prop.maxSampleLocationGridSize; + } + } + } + if (!zink_screen_resource_init(&screen->base)) goto fail; zink_screen_fence_init(&screen->base); diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index b8ef5d87254..1a570c6ceae 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -202,6 +202,7 @@ struct zink_screen { PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vk_GetPhysicalDeviceMultisamplePropertiesEXT; PFN_vkCmdSetSampleLocationsEXT vk_CmdSetSampleLocationsEXT; + VkExtent2D maxSampleLocationGridSize[5]; };