pvr: support VK_EXT_non_seamless_cube_map
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

When running GLES2 conformance tests with Zink on the PowerVR driver, I
found that the PowerVR driver has the same kind of weird behavior of not
ignoreing wrap mode for seamless cubes with Apple AGX (See !21978 for
the description of the quirk on AGX).

As GLES2 exposes non-seamless cubes, exposing non-seamless cube support
at PowerVR help seems to help lot about these GLES2 tests. Implementing
full GLES 3 and relying on the workaround for AGX is another choice, but
it's still too far.

Implementing non-seamless cube seems to be as easy as setting a bit in
the sampler control word, so do it.

Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
Reviewed-by: Simon Perretta <simon.perretta@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40660>
This commit is contained in:
Icenowy Zheng 2026-03-27 01:16:25 +08:00 committed by Marge Bot
parent 468113efd4
commit 71880a2911
2 changed files with 8 additions and 1 deletions

View file

@ -198,7 +198,10 @@ VkResult PVR_PER_ARCH(CreateSampler)(VkDevice _device,
}
}
pvr_csb_pack (&sampler->descriptor.words[1], TEXSTATE_SAMPLER_WORD1, word) {}
pvr_csb_pack (&sampler->descriptor.words[1], TEXSTATE_SAMPLER_WORD1, word) {
word.cemedge_dontfilter =
(pCreateInfo->flags & VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT);
}
#ifndef NDEBUG
/* YUV plane addresses are stored in the sampler on rogue. We need to add

View file

@ -189,6 +189,7 @@ static void pvr_physical_device_get_supported_extensions(
.EXT_index_type_uint8 = false,
.EXT_line_rasterization = true,
.EXT_map_memory_placed = true,
.EXT_non_seamless_cube_map = true,
.EXT_physical_device_drm = true,
.EXT_private_data = true,
.EXT_provoking_vertex = true,
@ -411,6 +412,9 @@ static void pvr_physical_device_get_supported_features(
.memoryMapRangePlaced = false,
.memoryUnmapReserve = true,
/* VK_EXT_non_seamless_cube_map */
.nonSeamlessCubeMap = true,
/* Vulkan 1.3 / VK_EXT_private_data */
.privateData = true,