Add tests for VK_AMD_texture_gather_bias_lod
authorRicardo Garcia <rgarcia@igalia.com>
Tue, 26 May 2020 12:59:20 +0000 (14:59 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 19 Jun 2020 09:00:53 +0000 (05:00 -0400)
This commit adds new texture gather test variants to exercise functions
from VK_AMD_texture_gather_bias_lod. Both the optional bias argument and
the explicit lod parameters are tested.

New tests:
dEQP-VK.glsl.texture_gather.*amd*

Affected tests:
dEQP-VK.glsl.texture_gather.*

Components: Vulkan
VK-GL-CTS issue: 2353

Change-Id: If99e4f123676040fecf0cb95c0af8c8df27441d8

android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/fetch_sources.py
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureGatherTests.cpp
external/vulkancts/modules/vulkan/vktTestCase.cpp
external/vulkancts/mustpass/master/vk-default.txt

index 59900b0..eadf27d 100644 (file)
@@ -129006,6 +129006,222 @@ dEQP-VK.glsl.operator.common_functions.max.mediump_uvec4_uint_vertex
 dEQP-VK.glsl.operator.common_functions.max.mediump_uvec4_uint_fragment
 dEQP-VK.glsl.operator.common_functions.max.highp_uvec4_uint_vertex
 dEQP-VK.glsl.operator.common_functions.max.highp_uvec4_uint_fragment
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.builtin_var.simple.pointcoord_uniform_frag
 dEQP-VK.glsl.builtin_var.simple.pointcoord_uniform_vert
 dEQP-VK.glsl.builtin.function.common.isnan.double_compute
index 8ad1796..fd863a4 100644 (file)
@@ -388473,8 +388473,16 @@ dEQP-VK.glsl.texture_gather.basic.2d.rgba8.filter_mode.min_linear_mipmap_linear_
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388503,8 +388511,16 @@ dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.filter_mode.min_nearest_mipmap_near
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388533,8 +388549,16 @@ dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.filter_mode.min_nearest_mipmap_neare
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -388609,8 +388633,16 @@ dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.filter_mode.min_linear_mipmap_l
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388639,8 +388671,16 @@ dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.filter_mode.min_nearest_mipma
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388669,8 +388709,16 @@ dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.filter_mode.min_nearest_mipmap
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -388757,8 +388805,16 @@ dEQP-VK.glsl.texture_gather.basic.cube.rgba8.filter_mode.min_linear_mipmap_linea
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388799,8 +388855,16 @@ dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.filter_mode.min_nearest_mipmap_ne
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388841,8 +388905,16 @@ dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.filter_mode.min_nearest_mipmap_nea
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat
@@ -389023,8 +389095,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.filter_mode.mi
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389053,8 +389133,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.filter_mode.
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389083,8 +389171,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.filter_mode.m
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389159,8 +389255,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.filter_m
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389189,8 +389293,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.filter
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389219,8 +389331,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.filter_
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389415,8 +389535,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.filter
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389445,8 +389573,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.filt
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389475,8 +389611,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.filte
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389551,8 +389695,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389581,8 +389733,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8u
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389611,8 +389771,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389687,8 +389855,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.filter_mode.min
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389717,8 +389893,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.filter_mode.m
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389747,8 +389931,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.filter_mode.mi
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389823,8 +390015,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.filter_mo
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389853,8 +390053,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.filter_
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389883,8 +390091,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.filter_m
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
index accbc55..cced444 100644 (file)
@@ -316,7 +316,7 @@ PACKAGES = [
        GitRepo(
                "https://github.com/KhronosGroup/SPIRV-Tools.git",
                None,
-               "d2b486219495594f2e5d0e8d457fc234a3460b3b",
+               "4386ef4234e28f933412774b0ba718ae0e211333",
                "spirv-tools"),
        GitRepo(
                "https://github.com/KhronosGroup/glslang.git",
index e48436a..8882693 100644 (file)
@@ -57,14 +57,7 @@ namespace sr
 
 using namespace vk;
 
-namespace
-{
-
-static const deUint32  MAX_RENDER_WIDTH        = 128;
-static const deUint32  MAX_RENDER_HEIGHT       = 128;
-static const tcu::Vec4 DEFAULT_CLEAR_COLOR     = tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f);
-
-static VkImageViewType textureTypeToImageViewType (TextureBinding::Type type)
+VkImageViewType textureTypeToImageViewType (TextureBinding::Type type)
 {
        switch (type)
        {
@@ -82,7 +75,7 @@ static VkImageViewType textureTypeToImageViewType (TextureBinding::Type type)
        }
 }
 
-static VkImageType viewTypeToImageType (VkImageViewType type)
+VkImageType viewTypeToImageType (VkImageViewType type)
 {
        switch (type)
        {
@@ -100,6 +93,29 @@ static VkImageType viewTypeToImageType (VkImageViewType type)
        }
 }
 
+vk::VkImageUsageFlags textureUsageFlags (void)
+{
+       return (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT);
+}
+
+vk::VkImageCreateFlags textureCreateFlags (vk::VkImageViewType viewType, ShaderRenderCaseInstance::ImageBackingMode backingMode)
+{
+       const bool                      isCube                          = (viewType == VK_IMAGE_VIEW_TYPE_CUBE || viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY);
+       VkImageCreateFlags      imageCreateFlags        = (isCube ? static_cast<VkImageCreateFlags>(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) : 0u);
+
+       if (backingMode == ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE)
+               imageCreateFlags |= (VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT);
+
+       return imageCreateFlags;
+}
+
+namespace
+{
+
+static const deUint32  MAX_RENDER_WIDTH        = 128;
+static const deUint32  MAX_RENDER_HEIGHT       = 128;
+static const tcu::Vec4 DEFAULT_CLEAR_COLOR     = tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f);
+
 /*! Gets the next multiple of a given divisor */
 static deUint32 getNextMultiple (deUint32 divisor, deUint32 value)
 {
@@ -1553,7 +1569,8 @@ void ShaderRenderCaseInstance::createSamplerUniform (deUint32                                             bindingLocati
        const VkImageType                               imageType                       = viewTypeToImageType(imageViewType);
        const VkSharingMode                             sharingMode                     = (queueFamilyIndex != sparseFamilyIndex) ? VK_SHARING_MODE_CONCURRENT : VK_SHARING_MODE_EXCLUSIVE;
        const VkFormat                                  format                          = mapTextureFormat(texFormat);
-       const bool                                              isCube                          = imageViewType == VK_IMAGE_VIEW_TYPE_CUBE || imageViewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
+       const VkImageUsageFlags                 imageUsageFlags         = textureUsageFlags();
+       const VkImageCreateFlags                imageCreateFlags        = textureCreateFlags(imageViewType, m_imageBackingMode);
 
        const deUint32                                  queueIndexCount         = (queueFamilyIndex != sparseFamilyIndex) ? 2 : 1;
        const deUint32                                  queueIndices[]          =
@@ -1562,16 +1579,9 @@ void ShaderRenderCaseInstance::createSamplerUniform (deUint32                                            bindingLocati
                sparseFamilyIndex
        };
 
-       VkImageCreateFlags                              imageCreateFlags        = isCube ? (VkImageCreateFlags)VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : (VkImageCreateFlags)0;
-       VkImageUsageFlags                               imageUsageFlags         = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
        Move<VkImage>                                   vkTexture;
        de::MovePtr<Allocation>                 allocation;
 
-       if (m_imageBackingMode == IMAGE_BACKING_MODE_SPARSE)
-       {
-               imageCreateFlags |= VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT;
-       }
-
        // Create image
        const VkImageCreateInfo                 imageParams =
        {
@@ -1635,7 +1645,10 @@ void ShaderRenderCaseInstance::createSamplerUniform (deUint32                                            bindingLocati
        }
 
        // Create sampler
-       const VkSamplerCreateInfo               samplerParams   = mapSampler(refSampler, texFormat);
+       const auto&                                             minMaxLod               = textureParams.minMaxLod;
+       const VkSamplerCreateInfo               samplerParams   = (minMaxLod
+                                                                                                               ? mapSampler(refSampler, texFormat, minMaxLod.get().minLod, minMaxLod.get().maxLod)
+                                                                                                               : mapSampler(refSampler, texFormat));
        Move<VkSampler>                                 sampler                 = createSampler(vk, vkDevice, &samplerParams);
        const deUint32                                  baseMipLevel    = textureParams.baseMipLevel;
        const vk::VkComponentMapping    components              = textureParams.componentMapping;
index e3064ad..39a3a67 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "tcuTexture.hpp"
 #include "tcuSurface.hpp"
+#include "tcuMaybe.hpp"
 
 #include "deMemory.h"
 #include "deSharedPtr.hpp"
@@ -90,21 +91,32 @@ public:
                INIT_LAST
        };
 
+       struct MinMaxLod
+       {
+               float minLod;
+               float maxLod;
+
+               MinMaxLod (float min, float max) : minLod(min), maxLod(max) {}
+       };
+
        struct Parameters
        {
                deUint32                                        baseMipLevel;
                vk::VkComponentMapping          componentMapping;
                vk::VkSampleCountFlagBits       samples;
                Init                                            initialization;
+               tcu::Maybe<MinMaxLod>           minMaxLod;
 
-               Parameters (deUint32                                    baseMipLevel_           = 0,
-                                       vk::VkComponentMapping          componentMapping_       = vk::makeComponentMappingRGBA(),
-                                       vk::VkSampleCountFlagBits       samples_                        = vk::VK_SAMPLE_COUNT_1_BIT,
-                                       Init                                            initialization_         = INIT_UPLOAD_DATA)
+               Parameters (deUint32                                            baseMipLevel_           = 0,
+                                       vk::VkComponentMapping                  componentMapping_       = vk::makeComponentMappingRGBA(),
+                                       vk::VkSampleCountFlagBits               samples_                        = vk::VK_SAMPLE_COUNT_1_BIT,
+                                       Init                                                    initialization_         = INIT_UPLOAD_DATA,
+                                       const tcu::Maybe<MinMaxLod>&    minMaxLod_                      = tcu::nothing<MinMaxLod>())
                        : baseMipLevel          (baseMipLevel_)
                        , componentMapping      (componentMapping_)
                        , samples                       (samples_)
                        , initialization        (initialization_)
+                       , minMaxLod                     (minMaxLod_)
                {
                }
        };
@@ -676,6 +688,11 @@ void ShaderRenderCaseInstance::addUniform (deUint32 bindingLocation, vk::VkDescr
        addUniform(bindingLocation, descriptorType, sizeof(T), &data);
 }
 
+vk::VkImageViewType            textureTypeToImageViewType      (TextureBinding::Type type);
+vk::VkImageType                        viewTypeToImageType                     (vk::VkImageViewType type);
+vk::VkImageUsageFlags  textureUsageFlags                       (void);
+vk::VkImageCreateFlags textureCreateFlags                      (vk::VkImageViewType viewType, ShaderRenderCaseInstance::ImageBackingMode backingMode);
+
 } // sr
 } // vkt
 
index 6f5d4d9..3c0f70e 100644 (file)
@@ -40,6 +40,9 @@
 #include "deStringUtil.hpp"
 #include "deRandom.hpp"
 
+#include <algorithm>
+#include <iterator>
+
 using tcu::ConstPixelBufferAccess;
 using tcu::PixelBufferAccess;
 using tcu::TestLog;
@@ -914,12 +917,20 @@ static inline int getNumTextureSamplingDimensions (TextureType type)
        }
 }
 
-vector<GatherArgs> generateBasic2DCaseIterations (GatherType gatherType, const tcu::TextureFormat& textureFormat, const IVec2& offsetRange)
+enum class LevelMode
+{
+       NORMAL = 0,
+       AMD_BIAS,
+       AMD_LOD,
+};
+
+vector<GatherArgs> generateBasic2DCaseIterations (GatherType gatherType, LevelMode levelMode, const tcu::TextureFormat& textureFormat, const IVec2& offsetRange)
 {
        const int                       numComponentCases       = isDepthFormat(textureFormat) ? 1 : 4+1; // \note For non-depth textures, test explicit components 0 to 3 and implicit component 0.
+       const bool                      skipImplicitCase        = (levelMode == LevelMode::AMD_BIAS);
        vector<GatherArgs>      result;
 
-       for (int componentCaseNdx = 0; componentCaseNdx < numComponentCases; componentCaseNdx++)
+       for (int componentCaseNdx = (skipImplicitCase ? 1 : 0); componentCaseNdx < numComponentCases; componentCaseNdx++)
        {
                const int componentNdx = componentCaseNdx - 1;
 
@@ -997,6 +1008,7 @@ struct GatherCaseBaseParams
        MaybeTextureSwizzle                     textureSwizzle;
        tcu::Sampler::FilterMode        minFilter;
        tcu::Sampler::FilterMode        magFilter;
+       LevelMode                                       levelMode;
        int                                                     baseLevel;
        deUint32                                        flags;
        TextureType                                     textureType;
@@ -1012,6 +1024,7 @@ struct GatherCaseBaseParams
                                                  const MaybeTextureSwizzle&            textureSwizzle_,
                                                  const tcu::Sampler::FilterMode        minFilter_,
                                                  const tcu::Sampler::FilterMode        magFilter_,
+                                                 const LevelMode                                       levelMode_,
                                                  const int                                                     baseLevel_,
                                                  const deUint32                                        flags_,
                                                  const ImageBackingMode                        sparseCase_)
@@ -1024,6 +1037,7 @@ struct GatherCaseBaseParams
                , textureSwizzle                (textureSwizzle_)
                , minFilter                             (minFilter_)
                , magFilter                             (magFilter_)
+               , levelMode                             (levelMode_)
                , baseLevel                             (baseLevel_)
                , flags                                 (flags_)
                , textureType                   (textureType_)
@@ -1040,6 +1054,7 @@ struct GatherCaseBaseParams
                , textureSwizzle                (MaybeTextureSwizzle::createNoneTextureSwizzle())
                , minFilter                             (tcu::Sampler::FILTERMODE_LAST)
                , magFilter                             (tcu::Sampler::FILTERMODE_LAST)
+               , levelMode                             (LevelMode::NORMAL)
                , baseLevel                             (0)
                , flags                                 (0)
                , textureType                   (TEXTURETYPE_LAST)
@@ -1171,6 +1186,12 @@ void TextureGatherInstance::init (void)
                        TCU_THROW(NotSupportedError, "Extended set of image gather instructions are not supported");
        }
 
+       // Check general extension support.
+       if (m_baseParams.levelMode != LevelMode::NORMAL)
+       {
+               m_context.requireDeviceFunctionality("VK_AMD_texture_gather_bias_lod");
+       }
+
        // Log and check implementation offset limits, if appropriate.
        if (m_baseParams.offsetSize == OFFSETSIZE_IMPLEMENTATION_MAXIMUM)
        {
@@ -1182,9 +1203,48 @@ void TextureGatherInstance::init (void)
        }
 
        // Initialize texture.
-
        textureBinding = createTexture();
 
+       // Check image format support.
+       // This should happen earlier but it's easier to retrieve texture parameters once created and this is not expected to fail.
+       if (m_baseParams.levelMode != LevelMode::NORMAL)
+       {
+               const auto                                              format                          = vk::mapTextureFormat(m_baseParams.textureFormat);
+               const auto                                              bindingType                     = textureBinding->getType();
+               const auto                                              imageViewType           = textureTypeToImageViewType(bindingType);
+               const auto                                              imageType                       = viewTypeToImageType(imageViewType);
+               const vk::VkImageUsageFlags             usageFlags                      = textureUsageFlags();
+               const vk::VkImageCreateFlags    imageCreateFlags        = textureCreateFlags(imageViewType, m_baseParams.sparseCase);
+
+               const vk::VkPhysicalDeviceImageFormatInfo2 formatInfo =
+               {
+                       vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,      //      VkStructureType         sType;
+                       nullptr,                                                                                                        //      const void*                     pNext;
+                       format,                                                                                                         //      VkFormat                        format;
+                       imageType,                                                                                                      //      VkImageType                     type;
+                       vk::VK_IMAGE_TILING_OPTIMAL,                                                            //      VkImageTiling           tiling;
+                       usageFlags,                                                                                                     //      VkImageUsageFlags       usage;
+                       imageCreateFlags,                                                                                       //      VkImageCreateFlags      flags;
+               };
+
+               vk::VkTextureLODGatherFormatPropertiesAMD lodGatherProperties =
+               {
+                       vk::VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, //      VkStructureType sType;
+                       nullptr,                                                                                                                //      void*                   pNext;
+                       VK_FALSE,                                                                                                               //      VkBool32                supportsTextureGatherLODBiasAMD;
+               };
+
+               vk::VkImageFormatProperties2 properties2;
+               deMemset(&properties2, 0, sizeof(properties2));
+               properties2.sType = vk::VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
+               properties2.pNext = &lodGatherProperties;
+
+               VK_CHECK(m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties2(m_context.getPhysicalDevice(), &formatInfo, &properties2));
+
+               if (!lodGatherProperties.supportsTextureGatherLODBiasAMD)
+                       TCU_THROW(NotSupportedError, "Format does not support texture gather LOD/Bias operations");
+       }
+
        if (m_baseParams.textureSwizzle.isSome())
        {
                const tcu::Vector<TextureSwizzleComponent, 4>&  swizzle         = m_baseParams.textureSwizzle.getSwizzle();
@@ -1200,13 +1260,37 @@ void TextureGatherInstance::init (void)
                textureParams.componentMapping = components;
        }
 
-       if (m_baseParams.baseLevel != 0)
+       // Set base mip level and mode.
+       if (m_baseParams.levelMode == LevelMode::NORMAL)
+       {
                textureParams.baseMipLevel = m_baseParams.baseLevel;
+       }
+       else
+       {
+               const auto      textureType     = textureBinding->getType();
+               int                     levels          = 0;
+
+               switch (textureType)
+               {
+               case TextureBinding::TYPE_1D:                   levels = textureBinding->get1D().getNumLevels();                break;
+               case TextureBinding::TYPE_2D:                   levels = textureBinding->get2D().getNumLevels();                break;
+               case TextureBinding::TYPE_3D:                   levels = textureBinding->get3D().getNumLevels();                break;
+               case TextureBinding::TYPE_CUBE_MAP:             levels = textureBinding->getCube().getNumLevels();              break;
+               case TextureBinding::TYPE_1D_ARRAY:             levels = textureBinding->get1DArray().getNumLevels();   break;
+               case TextureBinding::TYPE_2D_ARRAY:             levels = textureBinding->get2DArray().getNumLevels();   break;
+               case TextureBinding::TYPE_CUBE_ARRAY:   levels = textureBinding->getCubeArray().getNumLevels(); break;
+               default:
+                       DE_ASSERT(false); break;
+               }
+
+               DE_ASSERT(levels > 0);
+               textureParams.minMaxLod = tcu::just(TextureBinding::MinMaxLod(0.0f, static_cast<float>(levels - 1)));
+       }
 
        textureBinding->setParameters(textureParams);
        m_textures.push_back(textureBinding);
 
-       log << TestLog::Message << "Texture base level is " << m_baseParams.baseLevel << TestLog::EndMessage
+       log << TestLog::Message << "Texture base level is " << textureParams.baseMipLevel << TestLog::EndMessage
                << TestLog::Message << "s and t wrap modes are "
                                                        << vk::mapWrapMode(m_baseParams.wrapS) << " and "
                                                        << vk::mapWrapMode(m_baseParams.wrapT) << ", respectively" << TestLog::EndMessage
@@ -1454,7 +1538,8 @@ glu::FragmentSource genFragmentShaderSource (bool                                 requireGpuShader5,
                                                                                         bool                                   useNormalizedCoordInput,
                                                                                         bool                                   usePixCoord,
                                                                                         OffsetSize                             offsetSize,
-                                                                                        const ImageBackingMode sparseCase)
+                                                                                        const ImageBackingMode sparseCase,
+                                                                                        LevelMode                              levelMode)
 {
        DE_ASSERT(glu::isDataTypeSampler(samplerType));
        DE_ASSERT(de::inRange(numTexCoordComponents, 2, 3));
@@ -1465,11 +1550,13 @@ glu::FragmentSource genFragmentShaderSource (bool                                       requireGpuShader5,
        std::ostringstream      frag;
        const string            outType                 = glu::getDataTypeName(getSamplerGatherResultType(samplerType));
 
+       frag << "#version 450\n";
+
        if (sparseCase == ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE)
-               frag    << "#version 450\n"
-                               << "#extension GL_ARB_sparse_texture2 : require\n";
-       else
-               frag << "#version 310 es\n";
+               frag << "#extension GL_ARB_sparse_texture2 : require\n";
+
+       if (levelMode != LevelMode::NORMAL)
+               frag << "#extension GL_AMD_texture_gather_bias_lod : require\n";
 
        if (requireGpuShader5)
                frag << "#extension GL_EXT_gpu_shader5 : require\n";
@@ -1523,6 +1610,8 @@ glu::FragmentSource genFragmentShaderSource (bool                                 requireGpuShader5,
 string genGatherFuncCall (GatherType                           gatherType,
                                                  const tcu::TextureFormat&     textureFormat,
                                                  const GatherArgs&                     gatherArgs,
+                                                 LevelMode                                     levelMode,
+                                                 deUint32                                      baseLevel,
                                                  const string&                         refZExpr,
                                                  const IVec2&                          offsetRange,
                                                  int                                           indentationDepth,
@@ -1530,41 +1619,89 @@ string genGatherFuncCall (GatherType                            gatherType,
                                                  const ImageBackingMode        sparseCase)
 {
        string result;
+       string levelStr;
+
+       if (levelMode != LevelMode::NORMAL)
+       {
+               levelStr = de::toString(baseLevel) + ".0";
+       }
 
        if (sparseCase == ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE)
        {
-               switch (gatherType)
+               if (levelMode == LevelMode::NORMAL || levelMode == LevelMode::AMD_BIAS)
                {
-                       case GATHERTYPE_BASIC:
-                               result += "sparseTextureGatherARB";
-                               break;
-                       case GATHERTYPE_OFFSET: // \note Fallthrough.
-                       case GATHERTYPE_OFFSET_DYNAMIC:
-                               result += "sparseTextureGatherOffsetARB";
-                               break;
-                       case GATHERTYPE_OFFSETS:
-                               result += "sparseTextureGatherOffsetsARB";
-                               break;
-                       default:
-                               DE_ASSERT(false);
+                       switch (gatherType)
+                       {
+                               case GATHERTYPE_BASIC:
+                                       result += "sparseTextureGatherARB";
+                                       break;
+                               case GATHERTYPE_OFFSET: // \note Fallthrough.
+                               case GATHERTYPE_OFFSET_DYNAMIC:
+                                       result += "sparseTextureGatherOffsetARB";
+                                       break;
+                               case GATHERTYPE_OFFSETS:
+                                       result += "sparseTextureGatherOffsetsARB";
+                                       break;
+                               default:
+                                       DE_ASSERT(false);
+                       }
+               }
+               else // LevelMode::AMD_LOD
+               {
+                       switch (gatherType)
+                       {
+                               case GATHERTYPE_BASIC:
+                                       result += "sparseTextureGatherLodAMD";
+                                       break;
+                               case GATHERTYPE_OFFSET: // \note Fallthrough.
+                               case GATHERTYPE_OFFSET_DYNAMIC:
+                                       result += "sparseTextureGatherLodOffsetAMD";
+                                       break;
+                               case GATHERTYPE_OFFSETS:
+                                       result += "sparseTextureGatherLodOffsetsAMD";
+                                       break;
+                               default:
+                                       DE_ASSERT(false);
+                       }
                }
        }
        else
        {
-               switch (gatherType)
+               if (levelMode == LevelMode::NORMAL || levelMode == LevelMode::AMD_BIAS)
                {
-                       case GATHERTYPE_BASIC:
-                               result += "textureGather";
-                               break;
-                       case GATHERTYPE_OFFSET: // \note Fallthrough.
-                       case GATHERTYPE_OFFSET_DYNAMIC:
-                               result += "textureGatherOffset";
-                               break;
-                       case GATHERTYPE_OFFSETS:
-                               result += "textureGatherOffsets";
-                               break;
-                       default:
-                               DE_ASSERT(false);
+                       switch (gatherType)
+                       {
+                               case GATHERTYPE_BASIC:
+                                       result += "textureGather";
+                                       break;
+                               case GATHERTYPE_OFFSET: // \note Fallthrough.
+                               case GATHERTYPE_OFFSET_DYNAMIC:
+                                       result += "textureGatherOffset";
+                                       break;
+                               case GATHERTYPE_OFFSETS:
+                                       result += "textureGatherOffsets";
+                                       break;
+                               default:
+                                       DE_ASSERT(false);
+                       }
+               }
+               else // LevelMode::AMD_LOD
+               {
+                       switch (gatherType)
+                       {
+                               case GATHERTYPE_BASIC:
+                                       result += "textureGatherLodAMD";
+                                       break;
+                               case GATHERTYPE_OFFSET: // \note Fallthrough.
+                               case GATHERTYPE_OFFSET_DYNAMIC:
+                                       result += "textureGatherLodOffsetAMD";
+                                       break;
+                               case GATHERTYPE_OFFSETS:
+                                       result += "textureGatherLodOffsetsAMD";
+                                       break;
+                               default:
+                                       DE_ASSERT(false);
+                       }
                }
        }
 
@@ -1576,6 +1713,11 @@ string genGatherFuncCall (GatherType                             gatherType,
                result += ", " + refZExpr;
        }
 
+       if (levelMode == LevelMode::AMD_LOD)
+       {
+               result += ", " + levelStr;
+       }
+
        if (gatherType == GATHERTYPE_OFFSET ||
                gatherType == GATHERTYPE_OFFSET_DYNAMIC ||
                gatherType == GATHERTYPE_OFFSETS)
@@ -1621,6 +1763,11 @@ string genGatherFuncCall (GatherType                             gatherType,
                result += ", " + de::toString(gatherArgs.componentNdx);
        }
 
+       if (levelMode == LevelMode::AMD_BIAS)
+       {
+               result += ", " + levelStr;
+       }
+
        result += ")";
 
        return result;
@@ -1641,13 +1788,46 @@ void genGatherPrograms (vk::SourceCollections& programCollection, const GatherCa
        const int                                       numDims                         = getNumTextureSamplingDimensions(baseParams.textureType);
        glu::VertexSource                       vert                            = genVertexShaderSource(requireGpuShader5(baseParams.gatherType, baseParams.offsetSize), numDims, isDynamicOffset || isShadow);
 
+       // Check sampler type is valid.
+       if (baseParams.levelMode != LevelMode::NORMAL)
+       {
+               std::vector<glu::DataType> validSamplerTypes =
+               {
+                       glu::TYPE_SAMPLER_2D,
+                       glu::TYPE_SAMPLER_2D_ARRAY,
+                       glu::TYPE_INT_SAMPLER_2D,
+                       glu::TYPE_INT_SAMPLER_2D_ARRAY,
+                       glu::TYPE_UINT_SAMPLER_2D,
+                       glu::TYPE_UINT_SAMPLER_2D_ARRAY,
+               };
+
+               if (baseParams.gatherType == GATHERTYPE_BASIC)
+               {
+                       static const std::vector<glu::DataType> kAdditionalTypes =
+                       {
+                               glu::TYPE_SAMPLER_CUBE,
+                               glu::TYPE_SAMPLER_CUBE_ARRAY,
+                               glu::TYPE_INT_SAMPLER_CUBE,
+                               glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
+                               glu::TYPE_UINT_SAMPLER_CUBE,
+                               glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
+                       };
+
+                       std::copy(begin(kAdditionalTypes), end(kAdditionalTypes), std::back_inserter(validSamplerTypes));
+               }
+
+               const auto itr = std::find(begin(validSamplerTypes), end(validSamplerTypes), samplerType);
+               DE_ASSERT(itr != end(validSamplerTypes));
+               DE_UNREF(itr); // For release builds.
+       }
+
        programCollection.glslSources.add("vert") << vert;
 
        for (int iterNdx = 0; iterNdx < numIterations; iterNdx++)
        {
                const GatherArgs&               gatherArgs                      = iterations[iterNdx];
-               const string                    funcCall                        = genGatherFuncCall(baseParams.gatherType, baseParams.textureFormat, gatherArgs, refZExpr, offsetRange, 1, baseParams.offsetSize, baseParams.sparseCase);
-               glu::FragmentSource             frag                            = genFragmentShaderSource(requireGpuShader5(baseParams.gatherType, baseParams.offsetSize), numDims, samplerType, funcCall, useNormalizedCoord, usePixCoord, baseParams.offsetSize, baseParams.sparseCase);
+               const string                    funcCall                        = genGatherFuncCall(baseParams.gatherType, baseParams.textureFormat, gatherArgs, baseParams.levelMode, baseParams.baseLevel, refZExpr, offsetRange, 1, baseParams.offsetSize, baseParams.sparseCase);
+               glu::FragmentSource             frag                            = genFragmentShaderSource(requireGpuShader5(baseParams.gatherType, baseParams.offsetSize), numDims, samplerType, funcCall, useNormalizedCoord, usePixCoord, baseParams.offsetSize, baseParams.sparseCase, baseParams.levelMode);
 
                programCollection.glslSources.add("frag_" + de::toString(iterNdx)) << frag;
        }
@@ -1697,8 +1877,11 @@ TextureGather2DInstance::~TextureGather2DInstance (void)
 
 vector<float> TextureGather2DInstance::computeQuadTexCoord (int /* iterationNdx */) const
 {
-       vector<float> res;
-       TextureTestUtil::computeQuadTexCoord2D(res, Vec2(-0.3f, -0.4f), Vec2(1.5f, 1.6f));
+       const bool              biasMode        = (m_baseParams.levelMode == LevelMode::AMD_BIAS);
+       const auto              bottomLeft      = (biasMode ? Vec2(0.0f, 0.0f) : Vec2(-0.3f, -0.4f));
+       const auto              topRight        = (biasMode ? Vec2(1.0f, 1.0f) : Vec2(1.5f, 1.6f));
+       vector<float>   res;
+       TextureTestUtil::computeQuadTexCoord2D(res, bottomLeft, topRight);
        return res;
 }
 
@@ -1712,7 +1895,7 @@ TextureBindingSp TextureGather2DInstance::createTexture (void)
                                                                                                 0.0f /* LOD threshold */, true /* normalized coords */, m_baseParams.shadowCompareMode);
 
        {
-               const int       levelBegin      = m_baseParams.baseLevel;
+               const int       levelBegin      = ((m_baseParams.levelMode == LevelMode::NORMAL) ? m_baseParams.baseLevel : 0);
                const int       levelEnd        = texture->getNumLevels();
                DE_ASSERT(m_baseParams.baseLevel < texture->getNumLevels());
 
@@ -1753,6 +1936,7 @@ public:
                                                                                                                                                 const MaybeTextureSwizzle&                     textureSwizzle,
                                                                                                                                                 const tcu::Sampler::FilterMode         minFilter,
                                                                                                                                                 const tcu::Sampler::FilterMode         magFilter,
+                                                                                                                                                const LevelMode                                        levelMode,
                                                                                                                                                 const int                                                      baseLevel,
                                                                                                                                                 const deUint32                                         flags,
                                                                                                                                                 const IVec2&                                           textureSize,
@@ -1779,12 +1963,13 @@ TextureGather2DCase::TextureGather2DCase (tcu::TestContext&                                             testCtx,
                                                                                  const MaybeTextureSwizzle&                    textureSwizzle,
                                                                                  const tcu::Sampler::FilterMode                minFilter,
                                                                                  const tcu::Sampler::FilterMode                magFilter,
+                                                                                 const LevelMode                                               levelMode,
                                                                                  const int                                                             baseLevel,
                                                                                  const deUint32                                                flags,
                                                                                  const IVec2&                                                  textureSize,
                                                                                  const ImageBackingMode                                sparseCase)
        : TestCase              (testCtx, name, description)
-       , m_baseParams  (TEXTURETYPE_2D, gatherType, offsetSize, textureFormat, shadowCompareMode, wrapS, wrapT, textureSwizzle, minFilter, magFilter, baseLevel, flags, sparseCase)
+       , m_baseParams  (TEXTURETYPE_2D, gatherType, offsetSize, textureFormat, shadowCompareMode, wrapS, wrapT, textureSwizzle, minFilter, magFilter, levelMode, baseLevel, flags, sparseCase)
        , m_textureSize (textureSize)
 {
 }
@@ -1796,6 +1981,7 @@ TextureGather2DCase::~TextureGather2DCase (void)
 void TextureGather2DCase::initPrograms (vk::SourceCollections& dst) const
 {
        const vector<GatherArgs>        iterations      = generateBasic2DCaseIterations(m_baseParams.gatherType,
+                                                                                                                                                       m_baseParams.levelMode,
                                                                                                                                                        m_baseParams.textureFormat,
                                                                                                                                                        m_baseParams.offsetSize != OFFSETSIZE_IMPLEMENTATION_MAXIMUM ? getOffsetRange(m_baseParams.offsetSize) : IVec2(0));
 
@@ -1805,6 +1991,7 @@ void TextureGather2DCase::initPrograms (vk::SourceCollections& dst) const
 TestInstance* TextureGather2DCase::createInstance (Context& context) const
 {
        const vector<GatherArgs>        iterations      = generateBasic2DCaseIterations(m_baseParams.gatherType,
+                                                                                                                                                       m_baseParams.levelMode,
                                                                                                                                                        m_baseParams.textureFormat,
                                                                                                                                                        getOffsetRange(m_baseParams.offsetSize, context.getDeviceProperties().limits));
 
@@ -1822,11 +2009,12 @@ struct Gather2DArrayArgs
 };
 
 vector<Gather2DArrayArgs> generate2DArrayCaseIterations (GatherType                                    gatherType,
+                                                                                                                LevelMode                                      levelMode,
                                                                                                                 const tcu::TextureFormat&      textureFormat,
                                                                                                                 const IVec2&                           offsetRange,
                                                                                                                 const IVec3&                           textureSize)
 {
-       const vector<GatherArgs>        basicIterations = generateBasic2DCaseIterations(gatherType, textureFormat, offsetRange);
+       const vector<GatherArgs>        basicIterations = generateBasic2DCaseIterations(gatherType, levelMode, textureFormat, offsetRange);
        vector<Gather2DArrayArgs>       iterations;
 
        // \note Out-of-bounds layer indices are tested too.
@@ -1903,8 +2091,11 @@ TextureGather2DArrayInstance::~TextureGather2DArrayInstance (void)
 
 vector<float> TextureGather2DArrayInstance::computeQuadTexCoord (int iterationNdx) const
 {
+       const bool              biasMode        = (m_baseParams.levelMode == LevelMode::AMD_BIAS);
+       const auto              bottomLeft      = (biasMode ? Vec2(0.0f, 0.0f) : Vec2(-0.3f, -0.4f));
+       const auto              topRight        = (biasMode ? Vec2(1.0f, 1.0f) : Vec2(1.5f, 1.6f));
        vector<float> res;
-       TextureTestUtil::computeQuadTexCoord2DArray(res, m_iterations[iterationNdx].layerNdx, Vec2(-0.3f, -0.4f), Vec2(1.5f, 1.6f));
+       TextureTestUtil::computeQuadTexCoord2DArray(res, m_iterations[iterationNdx].layerNdx, bottomLeft, topRight);
        return res;
 }
 
@@ -1918,7 +2109,7 @@ TextureBindingSp TextureGather2DArrayInstance::createTexture (void)
                                                                                                 0.0f /* LOD threshold */, true /* normalized coords */, m_baseParams.shadowCompareMode);
 
        {
-               const int       levelBegin      = m_baseParams.baseLevel;
+               const int       levelBegin      = ((m_baseParams.levelMode == LevelMode::NORMAL) ? m_baseParams.baseLevel : 0);
                const int       levelEnd        = texture->getNumLevels();
                DE_ASSERT(m_baseParams.baseLevel < texture->getNumLevels());
 
@@ -1965,6 +2156,7 @@ public:
                                                                                                                                                 const MaybeTextureSwizzle&                     textureSwizzle,
                                                                                                                                                 const tcu::Sampler::FilterMode         minFilter,
                                                                                                                                                 const tcu::Sampler::FilterMode         magFilter,
+                                                                                                                                                const LevelMode                                        levelMode,
                                                                                                                                                 const int                                                      baseLevel,
                                                                                                                                                 const deUint32                                         flags,
                                                                                                                                                 const IVec3&                                           textureSize,
@@ -1991,12 +2183,13 @@ TextureGather2DArrayCase::TextureGather2DArrayCase (tcu::TestContext&                                   testCt
                                                                                                        const MaybeTextureSwizzle&                      textureSwizzle,
                                                                                                        const tcu::Sampler::FilterMode          minFilter,
                                                                                                        const tcu::Sampler::FilterMode          magFilter,
+                                                                                                       const LevelMode                                         levelMode,
                                                                                                        const int                                                       baseLevel,
                                                                                                        const deUint32                                          flags,
                                                                                                        const IVec3&                                            textureSize,
                                                                                                        const ImageBackingMode                          sparseCase)
        : TestCase                      (testCtx, name, description)
-       , m_baseParams          (TEXTURETYPE_2D_ARRAY, gatherType, offsetSize, textureFormat, shadowCompareMode, wrapS, wrapT, textureSwizzle, minFilter, magFilter, baseLevel, flags, sparseCase)
+       , m_baseParams          (TEXTURETYPE_2D_ARRAY, gatherType, offsetSize, textureFormat, shadowCompareMode, wrapS, wrapT, textureSwizzle, minFilter, magFilter, levelMode, baseLevel, flags, sparseCase)
        , m_textureSize         (textureSize)
 {
 }
@@ -2008,6 +2201,7 @@ TextureGather2DArrayCase::~TextureGather2DArrayCase (void)
 void TextureGather2DArrayCase::initPrograms (vk::SourceCollections& dst) const
 {
        const vector<Gather2DArrayArgs>         iterations      = generate2DArrayCaseIterations(m_baseParams.gatherType,
+                                                                                                                                                                       m_baseParams.levelMode,
                                                                                                                                                                        m_baseParams.textureFormat,
                                                                                                                                                                        m_baseParams.offsetSize != OFFSETSIZE_IMPLEMENTATION_MAXIMUM ? getOffsetRange(m_baseParams.offsetSize) : IVec2(0),
                                                                                                                                                                        m_textureSize);
@@ -2018,6 +2212,7 @@ void TextureGather2DArrayCase::initPrograms (vk::SourceCollections& dst) const
 TestInstance* TextureGather2DArrayCase::createInstance (Context& context) const
 {
        const vector<Gather2DArrayArgs>         iterations      = generate2DArrayCaseIterations(m_baseParams.gatherType,
+                                                                                                                                                                       m_baseParams.levelMode,
                                                                                                                                                                        m_baseParams.textureFormat,
                                                                                                                                                                        getOffsetRange(m_baseParams.offsetSize, context.getDeviceProperties().limits),
                                                                                                                                                                        m_textureSize);
@@ -2035,9 +2230,9 @@ struct GatherCubeArgs
        operator GatherArgs() const { return gatherArgs; }
 };
 
-vector<GatherCubeArgs> generateCubeCaseIterations (GatherType gatherType, const tcu::TextureFormat& textureFormat, const IVec2& offsetRange)
+vector<GatherCubeArgs> generateCubeCaseIterations (GatherType gatherType, LevelMode levelMode, const tcu::TextureFormat& textureFormat, const IVec2& offsetRange)
 {
-       const vector<GatherArgs>        basicIterations = generateBasic2DCaseIterations(gatherType, textureFormat, offsetRange);
+       const vector<GatherArgs>        basicIterations = generateBasic2DCaseIterations(gatherType, levelMode, textureFormat, offsetRange);
        vector<GatherCubeArgs>          iterations;
 
        for (int cubeFaceI = 0; cubeFaceI < tcu::CUBEFACE_LAST; cubeFaceI++)
@@ -2115,9 +2310,10 @@ TextureGatherCubeInstance::~TextureGatherCubeInstance (void)
 
 vector<float> TextureGatherCubeInstance::computeQuadTexCoord (int iterationNdx) const
 {
-       const bool              corners = (m_baseParams.flags & GATHERCASE_DONT_SAMPLE_CUBE_CORNERS) == 0;
-       const Vec2              minC    = corners ? Vec2(-1.2f) : Vec2(-0.6f, -1.2f);
-       const Vec2              maxC    = corners ? Vec2( 1.2f) : Vec2( 0.6f,  1.2f);
+       const bool              biasMode        = (m_baseParams.levelMode == LevelMode::AMD_BIAS);
+       const bool              corners         = (m_baseParams.flags & GATHERCASE_DONT_SAMPLE_CUBE_CORNERS) == 0;
+       const Vec2              minC            = (biasMode ? Vec2(-1.0f) : (corners ? Vec2(-1.2f) : Vec2(-0.6f, -1.2f)));
+       const Vec2              maxC            = (biasMode ? Vec2( 1.0f) : (corners ? Vec2( 1.2f) : Vec2( 0.6f,  1.2f)));
        vector<float>   res;
        TextureTestUtil::computeQuadTexCoordCube(res, m_iterations[iterationNdx].face, minC, maxC);
        return res;
@@ -2134,7 +2330,7 @@ TextureBindingSp TextureGatherCubeInstance::createTexture (void)
                                                                                                 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
 
        {
-               const int       levelBegin      = m_baseParams.baseLevel;
+               const int       levelBegin      = ((m_baseParams.levelMode == LevelMode::NORMAL) ? m_baseParams.baseLevel : 0);
                const int       levelEnd        = texture->getNumLevels();
                DE_ASSERT(m_baseParams.baseLevel < texture->getNumLevels());
 
@@ -2183,6 +2379,7 @@ public:
                                                                                                                                                 const MaybeTextureSwizzle&                     textureSwizzle,
                                                                                                                                                 const tcu::Sampler::FilterMode         minFilter,
                                                                                                                                                 const tcu::Sampler::FilterMode         magFilter,
+                                                                                                                                                const LevelMode                                        levelMode,
                                                                                                                                                 const int                                                      baseLevel,
                                                                                                                                                 const deUint32                                         flags,
                                                                                                                                                 const int                                                      textureSize,
@@ -2207,12 +2404,13 @@ TextureGatherCubeCase::TextureGatherCubeCase (tcu::TestContext&                                         testCtx,
                                                                                          const MaybeTextureSwizzle&                    textureSwizzle,
                                                                                          const tcu::Sampler::FilterMode                minFilter,
                                                                                          const tcu::Sampler::FilterMode                magFilter,
+                                                                                         const LevelMode                                               levelMode,
                                                                                          const int                                                             baseLevel,
                                                                                          const deUint32                                                flags,
                                                                                          const int                                                             textureSize,
                                                                                          const ImageBackingMode                                sparseCase)
        : TestCase                      (testCtx, name, description)
-       , m_baseParams          (TEXTURETYPE_CUBE, GATHERTYPE_BASIC, OFFSETSIZE_NONE, textureFormat, shadowCompareMode, wrapS, wrapT, textureSwizzle, minFilter, magFilter, baseLevel, flags, sparseCase)
+       , m_baseParams          (TEXTURETYPE_CUBE, GATHERTYPE_BASIC, OFFSETSIZE_NONE, textureFormat, shadowCompareMode, wrapS, wrapT, textureSwizzle, minFilter, magFilter, levelMode, baseLevel, flags, sparseCase)
        , m_textureSize         (textureSize)
 {
 }
@@ -2224,6 +2422,7 @@ TextureGatherCubeCase::~TextureGatherCubeCase (void)
 void TextureGatherCubeCase::initPrograms (vk::SourceCollections& dst) const
 {
        const vector<GatherCubeArgs>    iterations      = generateCubeCaseIterations(m_baseParams.gatherType,
+                                                                                                                                                        m_baseParams.levelMode,
                                                                                                                                                         m_baseParams.textureFormat,
                                                                                                                                                         m_baseParams.offsetSize != OFFSETSIZE_IMPLEMENTATION_MAXIMUM ? getOffsetRange(m_baseParams.offsetSize) : IVec2(0));
 
@@ -2233,6 +2432,7 @@ void TextureGatherCubeCase::initPrograms (vk::SourceCollections& dst) const
 TestInstance* TextureGatherCubeCase::createInstance (Context& context) const
 {
        const vector<GatherCubeArgs>    iterations      = generateCubeCaseIterations(m_baseParams.gatherType,
+                                                                                                                                                        m_baseParams.levelMode,
                                                                                                                                                         m_baseParams.textureFormat,
                                                                                                                                                         getOffsetRange(m_baseParams.offsetSize, context.getDeviceProperties().limits));
 
@@ -2273,6 +2473,7 @@ static inline TestCase* makeTextureGatherCase (TextureType                                        textureType,
                                                                                           const MaybeTextureSwizzle&   texSwizzle,
                                                                                           tcu::Sampler::FilterMode             minFilter,
                                                                                           tcu::Sampler::FilterMode             magFilter,
+                                                                                          LevelMode                                    levelMode,
                                                                                           int                                                  baseLevel,
                                                                                           const IVec3&                                 textureSize,
                                                                                           deUint32                                             flags = 0,
@@ -2282,17 +2483,17 @@ static inline TestCase* makeTextureGatherCase (TextureType                                      textureType,
        {
                case TEXTURETYPE_2D:
                        return new TextureGather2DCase(testCtx, name, description, gatherType, offsetSize, textureFormat, shadowCompareMode,
-                                                                                  wrapS, wrapT, texSwizzle, minFilter, magFilter, baseLevel, flags, textureSize.swizzle(0, 1), sparseCase);
+                                                                                  wrapS, wrapT, texSwizzle, minFilter, magFilter, levelMode, baseLevel, flags, textureSize.swizzle(0, 1), sparseCase);
 
                case TEXTURETYPE_2D_ARRAY:
                        return new TextureGather2DArrayCase(testCtx, name, description, gatherType, offsetSize, textureFormat, shadowCompareMode,
-                                                                                               wrapS, wrapT, texSwizzle, minFilter, magFilter, baseLevel, flags, textureSize, sparseCase);
+                                                                                               wrapS, wrapT, texSwizzle, minFilter, magFilter, levelMode, baseLevel, flags, textureSize, sparseCase);
 
                case TEXTURETYPE_CUBE:
                        DE_ASSERT(gatherType == GATHERTYPE_BASIC);
                        DE_ASSERT(offsetSize == OFFSETSIZE_NONE);
                        return new TextureGatherCubeCase(testCtx, name, description, textureFormat, shadowCompareMode,
-                                                                                        wrapS, wrapT, texSwizzle, minFilter, magFilter, baseLevel, flags, textureSize.x(), sparseCase);
+                                                                                        wrapS, wrapT, texSwizzle, minFilter, magFilter, levelMode, baseLevel, flags, textureSize.x(), sparseCase);
 
                default:
                        DE_ASSERT(false);
@@ -2452,10 +2653,10 @@ void TextureGatherTests::init (void)
                                                                        const string caseName = string() + wrapModes[wrapSNdx].name + "_" + wrapModes[wrapTNdx].name;
 
                                                                        compareModeGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, caseName.c_str(), "", gatherType, offsetSize, format, compareMode, wrapS, wrapT,
-                                                                                                                                                                        MaybeTextureSwizzle::createNoneTextureSwizzle(), tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, 0, textureSize,
+                                                                                                                                                                        MaybeTextureSwizzle::createNoneTextureSwizzle(), tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, LevelMode::NORMAL, 0, textureSize,
                                                                                                                                                                         noCorners ? GATHERCASE_DONT_SAMPLE_CUBE_CORNERS : 0));
                                                                        compareModeGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, "sparse_" + caseName, "", gatherType, offsetSize, format, compareMode, wrapS, wrapT,
-                                                                                                                                                                        MaybeTextureSwizzle::createNoneTextureSwizzle(), tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, 0, textureSize,
+                                                                                                                                                                        MaybeTextureSwizzle::createNoneTextureSwizzle(), tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, LevelMode::NORMAL, 0, textureSize,
                                                                                                                                                                         noCorners ? GATHERCASE_DONT_SAMPLE_CUBE_CORNERS : 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
                                                                }
                                                        }
@@ -2483,10 +2684,10 @@ void TextureGatherTests::init (void)
 
                                                                swizzleGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, caseName.c_str(), "", gatherType, offsetSize, format,
                                                                                                                                                         tcu::Sampler::COMPAREMODE_NONE, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL,
-                                                                                                                                                        swizzle, tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, 0, IVec3(64, 64, 3)));
+                                                                                                                                                        swizzle, tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, LevelMode::NORMAL, 0, IVec3(64, 64, 3)));
                                                                swizzleGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, "sparse_" + caseName, "", gatherType, offsetSize, format,
                                                                                                                                                         tcu::Sampler::COMPAREMODE_NONE, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL,
-                                                                                                                                                        swizzle, tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, 0, IVec3(64, 64, 3), 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
+                                                                                                                                                        swizzle, tcu::Sampler::NEAREST, tcu::Sampler::NEAREST, LevelMode::NORMAL, 0, IVec3(64, 64, 3), 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
                                                        }
                                                }
 
@@ -2535,10 +2736,10 @@ void TextureGatherTests::init (void)
 
                                                                filterModeGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, caseName.c_str(), "", gatherType, offsetSize, format, compareMode,
                                                                                                                                                                tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, MaybeTextureSwizzle::createNoneTextureSwizzle(),
-                                                                                                                                                               minFilter, magFilter, 0, IVec3(64, 64, 3)));
+                                                                                                                                                               minFilter, magFilter, LevelMode::NORMAL, 0, IVec3(64, 64, 3)));
                                                                filterModeGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, "sparse_" + caseName, "", gatherType, offsetSize, format, compareMode,
                                                                                                                                                                tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, MaybeTextureSwizzle::createNoneTextureSwizzle(),
-                                                                                                                                                               minFilter, magFilter, 0, IVec3(64, 64, 3), 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
+                                                                                                                                                               minFilter, magFilter, LevelMode::NORMAL, 0, IVec3(64, 64, 3), 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
                                                        }
                                                }
 
@@ -2548,16 +2749,38 @@ void TextureGatherTests::init (void)
 
                                                        for (int baseLevel = 1; baseLevel <= 2; baseLevel++)
                                                        {
-                                                               const string                                            caseName                = "level_" + de::toString(baseLevel);
-                                                               const tcu::Sampler::CompareMode         compareMode             = isDepthFormat(format) ? tcu::Sampler::COMPAREMODE_LESS : tcu::Sampler::COMPAREMODE_NONE;
-                                                               baseLevelGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, caseName.c_str(), "", gatherType, offsetSize, format,
-                                                                                                                                                          compareMode, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL,
-                                                                                                                                                          MaybeTextureSwizzle::createNoneTextureSwizzle(), tcu::Sampler::NEAREST, tcu::Sampler::NEAREST,
-                                                                                                                                                          baseLevel, IVec3(64, 64, 3)));
-                                                               baseLevelGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, "sparse_" + caseName, "", gatherType, offsetSize, format,
-                                                                                                                                                          compareMode, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL,
-                                                                                                                                                          MaybeTextureSwizzle::createNoneTextureSwizzle(), tcu::Sampler::NEAREST, tcu::Sampler::NEAREST,
-                                                                                                                                                          baseLevel, IVec3(64, 64, 3), 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
+                                                               static const struct
+                                                               {
+                                                                       const std::string       suffix;
+                                                                       LevelMode                       levelMode;
+                                                               } levelModes[] =
+                                                               {
+                                                                       { "",                   LevelMode::NORMAL       },
+                                                                       { "_amd_bias",  LevelMode::AMD_BIAS     },
+                                                                       { "_amd_lod",   LevelMode::AMD_LOD      },
+                                                               };
+
+                                                               for (int modeIdx = 0; modeIdx < DE_LENGTH_OF_ARRAY(levelModes); ++modeIdx)
+                                                               {
+                                                                       const auto&                                                     mode                    = levelModes[modeIdx].levelMode;
+
+                                                                       // Not supported for these sampler types.
+                                                                       if (isDepthFormat(format) && mode != LevelMode::NORMAL)
+                                                                               continue;
+
+                                                                       const string                                            caseName                = "level_" + de::toString(baseLevel) + levelModes[modeIdx].suffix;
+                                                                       const tcu::Sampler::CompareMode         compareMode             = isDepthFormat(format) ? tcu::Sampler::COMPAREMODE_LESS : tcu::Sampler::COMPAREMODE_NONE;
+                                                                       // The minFilter mode may need to be NEAREST_MIPMAP_NEAREST so the sampler creating code will not limit maxLod.
+                                                                       const auto                                                      minFilter               = ((mode == LevelMode::NORMAL) ? tcu::Sampler::NEAREST : tcu::Sampler::NEAREST_MIPMAP_NEAREST);
+                                                                       baseLevelGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, caseName.c_str(), "", gatherType, offsetSize, format,
+                                                                                                                                                               compareMode, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL,
+                                                                                                                                                               MaybeTextureSwizzle::createNoneTextureSwizzle(), minFilter, tcu::Sampler::NEAREST,
+                                                                                                                                                               mode, baseLevel, IVec3(64, 64, 3)));
+                                                                       baseLevelGroup->addChild(makeTextureGatherCase(textureType, m_testCtx, "sparse_" + caseName, "", gatherType, offsetSize, format,
+                                                                                                                                                               compareMode, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL,
+                                                                                                                                                               MaybeTextureSwizzle::createNoneTextureSwizzle(), minFilter, tcu::Sampler::NEAREST,
+                                                                                                                                                               mode, baseLevel, IVec3(64, 64, 3), 0, ShaderRenderCaseInstance::IMAGE_BACKING_MODE_SPARSE));
+                                                               }
                                                        }
                                                }
                                        }
index fc3bb63..221966b 100644 (file)
@@ -74,6 +74,7 @@ vector<string> filterExtensions (const vector<VkExtensionProperties>& extensions
                "VK_AMD_shader_explicit_vertex_parameter",
                "VK_AMD_shader_image_load_store_lod",
                "VK_AMD_shader_trinary_minmax",
+               "VK_AMD_texture_gather_bias_lod",
        };
 
        for (size_t extNdx = 0; extNdx < extensions.size(); extNdx++)
index 0483b2b..1dd8062 100644 (file)
@@ -388346,8 +388346,16 @@ dEQP-VK.glsl.texture_gather.basic.2d.rgba8.filter_mode.min_linear_mipmap_linear_
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388376,8 +388384,16 @@ dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.filter_mode.min_nearest_mipmap_near
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388406,8 +388422,16 @@ dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.filter_mode.min_nearest_mipmap_neare
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -388482,8 +388506,16 @@ dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.filter_mode.min_linear_mipmap_l
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388512,8 +388544,16 @@ dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.filter_mode.min_nearest_mipma
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388542,8 +388582,16 @@ dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.filter_mode.min_nearest_mipmap
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -388630,8 +388678,16 @@ dEQP-VK.glsl.texture_gather.basic.cube.rgba8.filter_mode.min_linear_mipmap_linea
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388672,8 +388728,16 @@ dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.filter_mode.min_nearest_mipmap_ne
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388714,8 +388778,16 @@ dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.filter_mode.min_nearest_mipmap_nea
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.basic.cube.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -388934,8 +389006,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.filter_mode.mi
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -388964,8 +389044,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.filter_mode.
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -388994,8 +389082,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.filter_mode.m
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389070,8 +389166,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.filter_m
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389100,8 +389204,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.filter
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389130,8 +389242,16 @@ dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.filter_
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389326,8 +389446,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.filter
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389356,8 +389484,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.filt
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389386,8 +389522,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.filte
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389462,8 +389606,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389492,8 +389644,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8u
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389522,8 +389682,16 @@ dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389598,8 +389766,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.filter_mode.min
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389628,8 +389804,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.filter_mode.m
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389658,8 +389842,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.filter_mode.mi
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
@@ -389734,8 +389926,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.filter_mo
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.filter_mode.sparse_min_linear_mipmap_linear_mag_linear
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
@@ -389764,8 +389964,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.filter_
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8ui.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.size_pot.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
@@ -389794,8 +390002,16 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.filter_m
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.filter_mode.sparse_min_nearest_mipmap_nearest_mag_nearest
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_1_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_1_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_lod
+dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.depth32f.size_pot.compare_less.sparse_clamp_to_edge_repeat
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat