Commit a1b6761e by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Add SSBO and combined resource limits

Fixes UBO limits as well, both to use the per-stage Vulkan limit and to account for driver uniforms now being dynamic. Bug: angleproject:3561 Bug: angleproject:3633 Bug: angleproject:3605 Bug: angleproject:3443 Change-Id: I07e34923cc1d132e965a0b9c0590c96fc561fab1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1685877 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com>
parent 4c292b87
......@@ -191,38 +191,81 @@ void RendererVk::ensureCapsInitialized() const
mNativeCaps.maxFragmentUniformVectors = maxUniformVectors;
mNativeCaps.maxShaderUniformComponents[gl::ShaderType::Fragment] = maxUniformComponents;
// A number of uniform buffers are reserved for internal use. There's one dynamic uniform
// buffer used per stage for default uniforms, and a single uniform buffer object used for
// ANGLE internal variables. ANGLE implements UBOs as uniform buffers, so the maximum number
// of uniform blocks is maxDescriptorSetUniformBuffers - 1:
const uint32_t maxUniformBuffers =
mPhysicalDeviceProperties.limits.maxDescriptorSetUniformBuffers -
kReservedDriverUniformBindingCount;
mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Vertex] = maxUniformBuffers;
mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Fragment] = maxUniformBuffers;
mNativeCaps.maxCombinedUniformBlocks = maxUniformBuffers;
mNativeCaps.maxUniformBufferBindings = maxUniformBuffers;
// We use the same bindings on each stage, so the texture, UBO and SSBO limitations are the same
// as the per-stage limits.
const uint32_t maxPerStageUniformBuffers =
mPhysicalDeviceProperties.limits.maxPerStageDescriptorUniformBuffers;
mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Vertex] = maxPerStageUniformBuffers;
mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Fragment] = maxPerStageUniformBuffers;
mNativeCaps.maxCombinedUniformBlocks = maxPerStageUniformBuffers;
// Note that Vulkan currently implements textures as combined image+samplers, so the limit is
// the minimum of supported samplers and sampled images.
const uint32_t maxPerStageTextures =
std::min(mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers,
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSampledImages);
mNativeCaps.maxCombinedTextureImageUnits = maxPerStageTextures;
mNativeCaps.maxShaderTextureImageUnits[gl::ShaderType::Fragment] = maxPerStageTextures;
mNativeCaps.maxShaderTextureImageUnits[gl::ShaderType::Vertex] = maxPerStageTextures;
const uint32_t maxPerStageStorageBuffers =
mPhysicalDeviceProperties.limits.maxPerStageDescriptorStorageBuffers;
mNativeCaps.maxShaderStorageBlocks[gl::ShaderType::Vertex] = maxPerStageStorageBuffers;
mNativeCaps.maxShaderStorageBlocks[gl::ShaderType::Fragment] = maxPerStageStorageBuffers;
mNativeCaps.maxCombinedShaderStorageBlocks = maxPerStageStorageBuffers;
// A number of storage buffer slots are used in the vertex shader to emulate transform feedback.
// Note that Vulkan requires maxPerStageDescriptorStorageBuffers to be at least 4 (i.e. the same
// as gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS).
// TODO(syoussefi): This should be conditioned to transform feedback extension not being
// present. http://anglebug.com/3206.
// TODO(syoussefi): If geometry shader is supported, emulation will be done at that stage, and
// so the reserved storage buffers should be accounted in that stage. http://anglebug.com/3606
static_assert(
gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS == 4,
"Limit to ES2.0 if supported SSBO count < supporting transform feedback buffer count");
ASSERT(maxPerStageStorageBuffers >= gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS);
mNativeCaps.maxShaderStorageBlocks[gl::ShaderType::Vertex] -=
gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS;
// Fill in additional limits for UBOs and SSBOs.
mNativeCaps.maxUniformBufferBindings = maxPerStageUniformBuffers;
mNativeCaps.maxUniformBlockSize = mPhysicalDeviceProperties.limits.maxUniformBufferRange;
mNativeCaps.uniformBufferOffsetAlignment =
static_cast<GLuint>(mPhysicalDeviceProperties.limits.minUniformBufferOffsetAlignment);
mNativeCaps.maxShaderStorageBufferBindings = maxPerStageStorageBuffers;
mNativeCaps.maxShaderStorageBlockSize = mPhysicalDeviceProperties.limits.maxStorageBufferRange;
mNativeCaps.shaderStorageBufferOffsetAlignment =
static_cast<GLuint>(mPhysicalDeviceProperties.limits.minStorageBufferOffsetAlignment);
// There is no additional limit to the combined number of components. We can have up to a
// maximum number of uniform buffers, each having the maximum number of components.
const uint32_t maxCombinedUniformComponents = maxUniformBuffers * maxUniformComponents;
const uint32_t maxCombinedUniformComponents = maxPerStageUniformBuffers * maxUniformComponents;
for (gl::ShaderType shaderType : gl::kAllGraphicsShaderTypes)
{
mNativeCaps.maxCombinedShaderUniformComponents[shaderType] = maxCombinedUniformComponents;
}
// we use the same bindings on each stage, so the limitation is the same combined or not.
mNativeCaps.maxCombinedTextureImageUnits =
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers;
mNativeCaps.maxShaderTextureImageUnits[gl::ShaderType::Fragment] =
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers;
mNativeCaps.maxShaderTextureImageUnits[gl::ShaderType::Vertex] =
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers;
// Total number of resources available to the user are as many as Vulkan allows minus everything
// that ANGLE uses internally. That is, one dynamic uniform buffer used per stage for default
// uniforms and a single dynamic uniform buffer for driver uniforms. Additionally, Vulkan uses
// up to IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS + 1 buffers for transform feedback (Note:
// +1 is for the "counter" buffer of transform feedback, which will be necessary for transform
// feedback extension and ES3.2 transform feedback emulation, but is not yet present).
constexpr uint32_t kReservedPerStageUniformBufferCount = 1;
constexpr uint32_t kReservedPerStageBindingCount =
kReservedDriverUniformBindingCount + kReservedPerStageUniformBufferCount +
gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS + 1;
// Note: maxPerStageResources is required to be at least the sum of per stage UBOs, SSBOs etc
// which total a minimum of 44 resources, so no underflow is possible here. Limit the total
// number of resources reported by Vulkan to 2 billion though to avoid seeing negative numbers
// in applications that take the value as signed int (including dEQP).
const uint32_t maxPerStageResources = std::min<uint32_t>(
std::numeric_limits<int32_t>::max(), mPhysicalDeviceProperties.limits.maxPerStageResources);
mNativeCaps.maxCombinedShaderOutputResources =
maxPerStageResources - kReservedPerStageBindingCount;
// The max vertex output components should not include gl_Position.
// The gles2.0 section 2.10 states that "gl_Position is not a varying variable and does
......
......@@ -620,20 +620,12 @@
// General Vulkan failures
// Limits:
// MAX_COMBINED_SHADER_OUTPUT_RESOURCES is 0
3520 VULKAN : dEQP-GLES31.functional.ubo.* = FAIL
3520 VULKAN : dEQP-GLES31.functional.texture.gather.* = FAIL
3520 VULKAN : dEQP-GLES31.functional.state_query.shader.sampler_type = FAIL
3520 VULKAN : dEQP-GLES31.functional.vertex_attribute_binding.usage.* = FAIL
3520 VULKAN : dEQP-GLES31.functional.program_uniform.* = FAIL
3520 VULKAN : dEQP-GLES31.functional.state_query.integer.max_combined_shader_output_resources* = FAIL
3520 VULKAN : dEQP-GLES31.functional.program_interface_query.uniform.* = SKIP
3520 VULKAN : dEQP-GLES31.functional.layout_binding.sampler.* = FAIL
3520 VULKAN : dEQP-GLES31.functional.layout_binding.ubo.* = FAIL
// MAX_FRAMEBUFFER_SAMPLES is 0
3520 VULKAN : dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples* = FAIL
// MAX_UNIFORM_LOCATIONS is 0
3520 VULKAN : dEQP-GLES31.functional.state_query.integer.max_uniform_locations* = FAIL
// GL_MIN/MAX_PROGRAM_TEXTURE_GATHER_OFFSET not set.
3605 VULKAN : dEQP-GLES31.functional.texture.gather.offset.* = FAIL
// Compute shaders:
3562 VULKAN : dEQP-GLES31.functional.shaders.builtin_var.compute.* = FAIL
......@@ -641,8 +633,8 @@
3562 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.common.*compute = FAIL
3562 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.precision*compute* = FAIL
3562 VULKAN : dEQP-GLES31.functional.state_query.*.max_compute_* = FAIL
3562 VULKAN : dEQP-GLES31.functional.state_query.program.*compute* = SKIP
3562 VULKAN : dEQP-GLES31.functional.state_query.program.compute_work_group_size_get_programiv = FAIL
3562 VULKAN : dEQP-GLES31.functional.debug.*.compute.* = SKIP
3562 VULKAN : dEQP-GLES31.functional.program_interface_query.buffer_limited_query.resource_*query = FAIL
3562 VULKAN : dEQP-GLES31.functional.program_interface_query.program_*.resource_list.compute.empty = FAIL
......@@ -652,7 +644,7 @@
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.integer.* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.uniform.* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.texture_size.* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.texture_size.* = SKIP
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.functions* = FAIL
......@@ -667,16 +659,22 @@
3597 VULKAN : dEQP-GLES31.functional.uniform_location.* = FAIL
// Indirect draw:
3564 VULKAN : dEQP-GLES31.functional.draw_indirect.* = FAIL
3564 VULKAN : dEQP-GLES31.functional.draw_indirect.* = SKIP
// Tessellation geometry interaction:
3572 VULKAN : dEQP-GLES31.functional.tessellation_geometry_interaction.* = FAIL
// SSBO:
3561 VULKAN : dEQP-GLES31.functional.ssbo.* = FAIL
3566 VULKAN : dEQP-GLES31.functional.state_query.integer.max_*shader_storage_block* = FAIL
3566 VULKAN : dEQP-GLES31.functional.state_query.*shader_storage_buffer* = FAIL
3563 VULKAN : dEQP-GLES31.functional.synchronization.*.ssbo* = FAIL
3561 VULKAN : dEQP-GLES31.functional.ssbo.* = SKIP
3561 VULKAN : dEQP-GLES31.functional.layout_binding.ssbo.* = SKIP
3561 VULKAN : dEQP-GLES31.functional.state_query.integer.max_*shader_storage_block* = SKIP
3561 VULKAN : dEQP-GLES31.functional.state_query.*shader_storage_buffer* = SKIP
3561 VULKAN : dEQP-GLES31.functional.synchronization.*.ssbo* = SKIP
3561 VULKAN : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.* = SKIP
3561 VULKAN : dEQP-GLES31.functional.shaders.linkage*shader_storage_block* = SKIP
3561 VULKAN : dEQP-GLES31.functional.program_interface_query.shader_storage_block.* = SKIP
3561 VULKAN : dEQP-GLES31.functional.program_interface_query.buffer_variable.* = SKIP
3561 VULKAN : dEQP-GLES31.functional.program_interface_query.program_output.* = SKIP
// Atomic counters:
3566 VULKAN : dEQP-GLES31.functional.atomic_counter.* = FAIL
......@@ -691,22 +689,18 @@
3520 VULKAN : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_samples_get_framebuffer_parameteriv = FAIL
// Framebuffer without attachments:
3579 VULKAN : dEQP-GLES31.functional.fbo.no_attachments.* = FAIL
3579 VULKAN : dEQP-GLES31.functional.fbo.no_attachments.* = SKIP
// Separate shader objects:
3570 VULKAN : dEQP-GLES31.functional.program_interface_query.*separable_* = FAIL
3570 VULKAN : dEQP-GLES31.functional.program_interface_query.uniform.random.* = FAIL
// Debug:
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.*.shader.uniform*_incompatible_type = FAIL
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.*.shader.uniform*_invalid_count = FAIL
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.*.state.get_*uniform* = FAIL
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.* = FAIL
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.* = FAIL
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.* = SKIP
3590 VULKAN : dEQP-GLES31.functional.debug.error_groups.case_14 = SKIP
// Transform feedback:
3205 VULKAN : dEQP-GLES31.functional.debug.*.begin_query = SKIP
3205 VULKAN : dEQP-GLES31.functional.debug.*transform_feedback = SKIP
// Stencil textures (some missing support for 3D and 2D array textures):
3585 VULKAN : dEQP-GLES31.functional.stencil_texturing.* = SKIP
......@@ -726,6 +720,17 @@
3520 VULKAN : dEQP-GLES31.functional.state_query.texture_level.texture_2d.compressed_integer = SKIP
3520 VULKAN : dEQP-GLES31.functional.state_query.texture_level.texture_2d.compressed_float = SKIP
// Vulkan limits lower than GLES minimum:
3633 VULKAN : dEQP-GLES31.functional.state_query.integer.max_uniform_buffer_bindings_get* = FAIL
3633 VULKAN : dEQP-GLES31.functional.state_query.integer.max_combined_uniform_blocks_get* = FAIL
3633 VULKAN : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20 = FAIL
3633 VULKAN : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.31 = FAIL
// column/row_major specified on struct member:
3443 VULKAN : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.12 = FAIL
// Validation errors:
// Optimal tiling not supported for format:
3520 VULKAN : dEQP-GLES31.functional.state_query.texture_level.texture* = SKIP
// Invalid vertex attribute alignment:
3520 VULKAN : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.unaligned_offset_elements_1_aligned_elements = FAIL
......@@ -530,12 +530,25 @@
// General Vulkan failures
// Limits:
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_indices = SKIP
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_vertices = SKIP
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.compressed_texture_formats = SKIP
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_fragment_input_components = SKIP
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_program_texel_offset = SKIP
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.min_program_texel_offset = SKIP
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_indices = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_vertices = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.compressed_texture_formats = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_fragment_input_components = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_program_texel_offset = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.min_program_texel_offset = FAIL
// Vulkan limits lower than GLES minimum:
3633 VULKAN : dEQP-GLES3.functional.implementation_limits.max_uniform_buffer_bindings = FAIL
3633 VULKAN : dEQP-GLES3.functional.implementation_limits.max_combined_uniform_blocks = FAIL
3633 VULKAN : dEQP-GLES3.functional.state_query.integers.max_uniform_buffer_bindings_get* = FAIL
3633 VULKAN : dEQP-GLES3.functional.state_query.integers.max_combined_uniform_blocks_get* = FAIL
3633 VULKAN : dEQP-GLES3.functional.state_query.integers.max_fragment_input_components_get* = FAIL
3633 VULKAN : dEQP-GLES3.functional.state_query.integers64.max_combined_vertex_uniform_components_get* = FAIL
3633 VULKAN : dEQP-GLES3.functional.state_query.integers64.max_combined_fragment_uniform_components_get* = FAIL
3633 VULKAN : dEQP-GLES3.functional.ubo.random.all_shared_buffer.7 = FAIL
3633 VULKAN : dEQP-GLES3.functional.ubo.random.nested_structs_arrays_instance_arrays.18 = FAIL
3633 ANDROID VULKAN : dEQP-GLES3.functional.implementation_limits.max_combined_texture_image_units = FAIL
3633 ANDROID VULKAN : dEQP-GLES3.functional.state_query.integers.max_combined_texture_image_units_get* = FAIL
// 3D texture:
3188 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.3d* = SKIP
......@@ -706,10 +719,8 @@
// - ES3 State queries:
2950 VULKAN : dEQP-GLES3.functional.state_query.integers.max_elements_indices_getfloat = FAIL
2950 VULKAN : dEQP-GLES3.functional.state_query.integers.max_elements_vertices_getfloat = FAIL
2950 VULKAN : dEQP-GLES3.functional.state_query.integers.max_fragment_input_components_get* = FAIL
2950 VULKAN : dEQP-GLES3.functional.state_query.integers.max_program_texel_offset_get* = FAIL
2950 VULKAN : dEQP-GLES3.functional.state_query.integers.min_program_texel_offset_get* = FAIL
2950 VULKAN : dEQP-GLES3.functional.state_query.integers64.max_combined_fragment_uniform_components_get* = FAIL
// Misc failures:
2950 VULKAN : dEQP-GLES3.functional.lifetime.* = SKIP
......@@ -727,9 +738,6 @@
2950 VULKAN : dEQP-GLES3.functional.negative_api.vertex_array.draw_element* = SKIP
// Android Vulkan failures
2950 ANDROID VULKAN : dEQP-GLES3.functional.implementation_limits.max_combined_texture_image_units = FAIL
2950 ANDROID VULKAN : dEQP-GLES3.functional.state_query.integers.max_combined_texture_image_units_getfloat = FAIL
2950 ANDROID VULKAN : dEQP-GLES3.functional.state_query.integers.max_combined_texture_image_units_getinteger64 = FAIL
2950 ANDROID VULKAN : dEQP-GLES3.functional.fragment_ops.blend.fbo_srgb.rgb_func_alpha_func.* = SKIP
2950 ANDROID VULKAN : dEQP-GLES3.functional.fragment_ops.depth_stencil.stencil_ops.* = SKIP
3306 ANDROID VULKAN : dEQP-GLES3.functional.polygon_offset.* = FAIL
......
......@@ -36,17 +36,15 @@
// General Vulkan expectations
// Limits:
3520 VULKAN : KHR-GLES31.core.texture_gather* = FAIL
3520 VULKAN : KHR-GLES31.core.layout_binding.sampler2D_* = FAIL
3520 VULKAN : KHR-GLES31.core.layout_binding.block_* = FAIL
// GL_MIN/MAX_PROGRAM_TEXTURE_GATHER_OFFSET not set.
3605 VULKAN : KHR-GLES31.core.texture_gather* = FAIL
// Vulkan limits lower than GLES minimum:
3633 VULKAN : KHR-GLES31.core.layout_binding.block_layout_binding_block_FragmentShader = FAIL
// Compute shaders
3562 VULKAN : KHR-GLES31.core.constant_expressions.* = FAIL
3562 VULKAN : KHR-GLES31.core.constant_expressions.* = SKIP
3520 VULKAN : KHR-GLES31.core.compute_shader* = SKIP
// Crash due to missing unsupported check in dEQP
3520 VULKAN : KHR-GLES31.core.constant_expressions.*_geometry = SKIP
3520 VULKAN : KHR-GLES31.core.constant_expressions.*_tess_control = SKIP
3520 VULKAN : KHR-GLES31.core.constant_expressions.*_tess_eval = SKIP
// Multisampled textures:
3565 VULKAN : KHR-GLES31.core.texture_storage_multisample.* = SKIP
......@@ -63,6 +61,7 @@
// Atomic counters:
3566 VULKAN : KHR-GLES31.core.shader_atomic_counters.* = FAIL
3566 VULKAN : KHR-GLES31.core.layout_binding.buffer_layout_binding_atomic* = SKIP
// RGBA32F:
3520 VULKAN : KHR-GLES31.core.texture_gather.*-gather-float-2d-rgb = SKIP
......@@ -74,29 +73,39 @@
3569 VULKAN : KHR-GLES31.core.shader_bitfield_operation* = FAIL
3569 VULKAN : KHR-GLES31.core.shader_integer_mix.* = FAIL
3569 VULKAN : KHR-GLES31.core.shader_image* = SKIP
3569 VULKAN : KHR-GLES31.core.shader_storage_buffer_object.basic-max = FAIL
3569 VULKAN : KHR-GLES31.core.shader_storage_buffer_object.basic-binding = FAIL
3569 VULKAN : KHR-GLES31.core.shader_storage_buffer_object.basic-readonly-writeonly = FAIL
3569 VULKAN : KHR-GLES31.core.shader_storage_buffer_object.*cs* = FAIL
3569 VULKAN : KHR-GLES31.core.shader_macros* = FAIL
/// Crash due to missing unsupported check in dEQP
3571 VULKAN : KHR-GLES31.core.shader_macros*_geometry = SKIP
3571 VULKAN : KHR-GLES31.core.shader_macros*_tess_control = SKIP
3571 VULKAN : KHR-GLES31.core.shader_macros*_tess_eval = SKIP
3520 VULKAN : KHR-GLES31.core.vertex_attrib_binding* = SKIP
3520 VULKAN : KHR-GLES31.core.internalformat.texture2d.* = FAIL
3520 VULKAN : KHR-GLES31.core.internalformat.texture2d.*rgb5* = SKIP
3520 VULKAN : KHR-GLES31.core.draw_indirect.* = FAIL
// SSBO:
3561 VULKAN : KHR-GLES31.core.shader_storage_buffer_object.* = SKIP
// Draw indirect:
3564 VULKAN : KHR-GLES31.core.draw_indirect.* = SKIP
3520 VULKAN : KHR-GLES31.core.explicit_uniform_location.* = FAIL
3520 VULKAN : KHR-GLES31.core.program_interface_query.* = FAIL
3520 VULKAN : KHR-GLES31.core.program_interface_query.* = SKIP
// Framebuffer without attachments:
3579 VULKAN : KHR-GLES31.core.framebuffer_no_attachments.api = FAIL
3520 VULKAN : KHR-GLES31.core.framebuffer_no_attachments.api = FAIL
3520 VULKAN : KHR-GLES31.core.arrays_of_arrays.* = SKIP
3520 VULKAN : KHR-GLES31.core.arrays_of_arrays.* = FAIL
// Blend equations:
3586 VULKAN : KHR-GLES31.core.blend_equation_advanced.* = SKIP
3520 VULKAN : KHR-GLES31.core.internalformat.copy_tex_image* = FAIL
3520 VULKAN : KHR-GLES31.core.internalformat.copy_tex_image*rgb5* = SKIP
3520 VULKAN : KHR-GLES31.core.internalformat.renderbuffer* = FAIL
3520 VULKAN : KHR-GLES31.shaders.aggressive_optimizations* = FAIL
3520 VULKAN : KHR-GLES31.shaders.layout_location.*sampler* = FAIL
// Sampler objects:
3208 VULKAN : KHR-GLES31.shaders.layout_location.*sampler* = FAIL
......@@ -31,6 +31,9 @@
// For now we only log Vulkan test expectations. More back-ends can follow as we need them.
// Vulkan limits lower than GLES minimum:
3633 VULKAN : KHR-GLES3.shaders.uniform_block.random.all_shared_buffer.1 = FAIL
// Crashes trying to load non-existent texture load function.
3455 VULKAN : KHR-GLES3.texture_filter_anisotropic.drawing = SKIP
3455 VULKAN : KHR-GLES3.copy_tex_image_conversions.forbidden.* = SKIP
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment