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 ...@@ -191,38 +191,81 @@ void RendererVk::ensureCapsInitialized() const
mNativeCaps.maxFragmentUniformVectors = maxUniformVectors; mNativeCaps.maxFragmentUniformVectors = maxUniformVectors;
mNativeCaps.maxShaderUniformComponents[gl::ShaderType::Fragment] = maxUniformComponents; mNativeCaps.maxShaderUniformComponents[gl::ShaderType::Fragment] = maxUniformComponents;
// A number of uniform buffers are reserved for internal use. There's one dynamic uniform // We use the same bindings on each stage, so the texture, UBO and SSBO limitations are the same
// buffer used per stage for default uniforms, and a single uniform buffer object used for // as the per-stage limits.
// ANGLE internal variables. ANGLE implements UBOs as uniform buffers, so the maximum number const uint32_t maxPerStageUniformBuffers =
// of uniform blocks is maxDescriptorSetUniformBuffers - 1: mPhysicalDeviceProperties.limits.maxPerStageDescriptorUniformBuffers;
const uint32_t maxUniformBuffers = mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Vertex] = maxPerStageUniformBuffers;
mPhysicalDeviceProperties.limits.maxDescriptorSetUniformBuffers - mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Fragment] = maxPerStageUniformBuffers;
kReservedDriverUniformBindingCount; mNativeCaps.maxCombinedUniformBlocks = maxPerStageUniformBuffers;
mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Vertex] = maxUniformBuffers; // Note that Vulkan currently implements textures as combined image+samplers, so the limit is
mNativeCaps.maxShaderUniformBlocks[gl::ShaderType::Fragment] = maxUniformBuffers; // the minimum of supported samplers and sampled images.
mNativeCaps.maxCombinedUniformBlocks = maxUniformBuffers; const uint32_t maxPerStageTextures =
std::min(mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers,
mNativeCaps.maxUniformBufferBindings = maxUniformBuffers; 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.maxUniformBlockSize = mPhysicalDeviceProperties.limits.maxUniformBufferRange;
mNativeCaps.uniformBufferOffsetAlignment = mNativeCaps.uniformBufferOffsetAlignment =
static_cast<GLuint>(mPhysicalDeviceProperties.limits.minUniformBufferOffsetAlignment); 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 // 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. // 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) for (gl::ShaderType shaderType : gl::kAllGraphicsShaderTypes)
{ {
mNativeCaps.maxCombinedShaderUniformComponents[shaderType] = maxCombinedUniformComponents; mNativeCaps.maxCombinedShaderUniformComponents[shaderType] = maxCombinedUniformComponents;
} }
// we use the same bindings on each stage, so the limitation is the same combined or not. // Total number of resources available to the user are as many as Vulkan allows minus everything
mNativeCaps.maxCombinedTextureImageUnits = // that ANGLE uses internally. That is, one dynamic uniform buffer used per stage for default
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers; // uniforms and a single dynamic uniform buffer for driver uniforms. Additionally, Vulkan uses
mNativeCaps.maxShaderTextureImageUnits[gl::ShaderType::Fragment] = // up to IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS + 1 buffers for transform feedback (Note:
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers; // +1 is for the "counter" buffer of transform feedback, which will be necessary for transform
mNativeCaps.maxShaderTextureImageUnits[gl::ShaderType::Vertex] = // feedback extension and ES3.2 transform feedback emulation, but is not yet present).
mPhysicalDeviceProperties.limits.maxPerStageDescriptorSamplers; 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 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 // The gles2.0 section 2.10 states that "gl_Position is not a varying variable and does
......
...@@ -620,20 +620,12 @@ ...@@ -620,20 +620,12 @@
// General Vulkan failures // General Vulkan failures
// Limits: // 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 // MAX_FRAMEBUFFER_SAMPLES is 0
3520 VULKAN : dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples* = FAIL 3520 VULKAN : dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples* = FAIL
// MAX_UNIFORM_LOCATIONS is 0 // MAX_UNIFORM_LOCATIONS is 0
3520 VULKAN : dEQP-GLES31.functional.state_query.integer.max_uniform_locations* = FAIL 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: // Compute shaders:
3562 VULKAN : dEQP-GLES31.functional.shaders.builtin_var.compute.* = FAIL 3562 VULKAN : dEQP-GLES31.functional.shaders.builtin_var.compute.* = FAIL
...@@ -641,8 +633,8 @@ ...@@ -641,8 +633,8 @@
3562 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.common.*compute = FAIL 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.shaders.builtin_functions.precision*compute* = FAIL
3562 VULKAN : dEQP-GLES31.functional.state_query.*.max_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.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.buffer_limited_query.resource_*query = FAIL
3562 VULKAN : dEQP-GLES31.functional.program_interface_query.program_*.resource_list.compute.empty = FAIL 3562 VULKAN : dEQP-GLES31.functional.program_interface_query.program_*.resource_list.compute.empty = FAIL
...@@ -652,7 +644,7 @@ ...@@ -652,7 +644,7 @@
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.* = FAIL 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.integer.* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.uniform.* = 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.frexp* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp* = FAIL 3569 VULKAN : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp* = FAIL
3569 VULKAN : dEQP-GLES31.functional.shaders.functions* = FAIL 3569 VULKAN : dEQP-GLES31.functional.shaders.functions* = FAIL
...@@ -667,16 +659,22 @@ ...@@ -667,16 +659,22 @@
3597 VULKAN : dEQP-GLES31.functional.uniform_location.* = FAIL 3597 VULKAN : dEQP-GLES31.functional.uniform_location.* = FAIL
// Indirect draw: // Indirect draw:
3564 VULKAN : dEQP-GLES31.functional.draw_indirect.* = FAIL 3564 VULKAN : dEQP-GLES31.functional.draw_indirect.* = SKIP
// Tessellation geometry interaction: // Tessellation geometry interaction:
3572 VULKAN : dEQP-GLES31.functional.tessellation_geometry_interaction.* = FAIL 3572 VULKAN : dEQP-GLES31.functional.tessellation_geometry_interaction.* = FAIL
// SSBO: // SSBO:
3561 VULKAN : dEQP-GLES31.functional.ssbo.* = FAIL 3561 VULKAN : dEQP-GLES31.functional.ssbo.* = SKIP
3566 VULKAN : dEQP-GLES31.functional.state_query.integer.max_*shader_storage_block* = FAIL 3561 VULKAN : dEQP-GLES31.functional.layout_binding.ssbo.* = SKIP
3566 VULKAN : dEQP-GLES31.functional.state_query.*shader_storage_buffer* = FAIL 3561 VULKAN : dEQP-GLES31.functional.state_query.integer.max_*shader_storage_block* = SKIP
3563 VULKAN : dEQP-GLES31.functional.synchronization.*.ssbo* = FAIL 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: // Atomic counters:
3566 VULKAN : dEQP-GLES31.functional.atomic_counter.* = FAIL 3566 VULKAN : dEQP-GLES31.functional.atomic_counter.* = FAIL
...@@ -691,22 +689,18 @@ ...@@ -691,22 +689,18 @@
3520 VULKAN : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_samples_get_framebuffer_parameteriv = FAIL 3520 VULKAN : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_samples_get_framebuffer_parameteriv = FAIL
// Framebuffer without attachments: // Framebuffer without attachments:
3579 VULKAN : dEQP-GLES31.functional.fbo.no_attachments.* = FAIL 3579 VULKAN : dEQP-GLES31.functional.fbo.no_attachments.* = SKIP
// Separate shader objects: // Separate shader objects:
3570 VULKAN : dEQP-GLES31.functional.program_interface_query.*separable_* = FAIL 3570 VULKAN : dEQP-GLES31.functional.program_interface_query.*separable_* = FAIL
3570 VULKAN : dEQP-GLES31.functional.program_interface_query.uniform.random.* = FAIL 3570 VULKAN : dEQP-GLES31.functional.program_interface_query.uniform.random.* = FAIL
// Debug: // Debug:
3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.*.shader.uniform*_incompatible_type = FAIL 3590 VULKAN : dEQP-GLES31.functional.debug.negative_coverage.* = SKIP
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.error_groups.case_14 = SKIP 3590 VULKAN : dEQP-GLES31.functional.debug.error_groups.case_14 = SKIP
// Transform feedback: // 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): // Stencil textures (some missing support for 3D and 2D array textures):
3585 VULKAN : dEQP-GLES31.functional.stencil_texturing.* = SKIP 3585 VULKAN : dEQP-GLES31.functional.stencil_texturing.* = SKIP
...@@ -726,6 +720,17 @@ ...@@ -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_integer = SKIP
3520 VULKAN : dEQP-GLES31.functional.state_query.texture_level.texture_2d.compressed_float = 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: // Validation errors:
// Optimal tiling not supported for format: // Optimal tiling not supported for format:
3520 VULKAN : dEQP-GLES31.functional.state_query.texture_level.texture* = SKIP 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 @@ ...@@ -530,12 +530,25 @@
// General Vulkan failures // General Vulkan failures
// Limits: // Limits:
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_indices = SKIP 2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_indices = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_vertices = SKIP 2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_elements_vertices = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.compressed_texture_formats = SKIP 2950 VULKAN : dEQP-GLES3.functional.implementation_limits.compressed_texture_formats = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_fragment_input_components = SKIP 2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_fragment_input_components = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_program_texel_offset = SKIP 2950 VULKAN : dEQP-GLES3.functional.implementation_limits.max_program_texel_offset = FAIL
2950 VULKAN : dEQP-GLES3.functional.implementation_limits.min_program_texel_offset = SKIP 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: // 3D texture:
3188 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.3d* = SKIP 3188 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.3d* = SKIP
...@@ -706,10 +719,8 @@ ...@@ -706,10 +719,8 @@
// - ES3 State queries: // - 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_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_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.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.integers.min_program_texel_offset_get* = FAIL
2950 VULKAN : dEQP-GLES3.functional.state_query.integers64.max_combined_fragment_uniform_components_get* = FAIL
// Misc failures: // Misc failures:
2950 VULKAN : dEQP-GLES3.functional.lifetime.* = SKIP 2950 VULKAN : dEQP-GLES3.functional.lifetime.* = SKIP
...@@ -727,9 +738,6 @@ ...@@ -727,9 +738,6 @@
2950 VULKAN : dEQP-GLES3.functional.negative_api.vertex_array.draw_element* = SKIP 2950 VULKAN : dEQP-GLES3.functional.negative_api.vertex_array.draw_element* = SKIP
// Android Vulkan failures // 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.blend.fbo_srgb.rgb_func_alpha_func.* = SKIP
2950 ANDROID VULKAN : dEQP-GLES3.functional.fragment_ops.depth_stencil.stencil_ops.* = SKIP 2950 ANDROID VULKAN : dEQP-GLES3.functional.fragment_ops.depth_stencil.stencil_ops.* = SKIP
3306 ANDROID VULKAN : dEQP-GLES3.functional.polygon_offset.* = FAIL 3306 ANDROID VULKAN : dEQP-GLES3.functional.polygon_offset.* = FAIL
......
...@@ -36,17 +36,15 @@ ...@@ -36,17 +36,15 @@
// General Vulkan expectations // General Vulkan expectations
// Limits: // Limits:
3520 VULKAN : KHR-GLES31.core.texture_gather* = FAIL // GL_MIN/MAX_PROGRAM_TEXTURE_GATHER_OFFSET not set.
3520 VULKAN : KHR-GLES31.core.layout_binding.sampler2D_* = FAIL 3605 VULKAN : KHR-GLES31.core.texture_gather* = FAIL
3520 VULKAN : KHR-GLES31.core.layout_binding.block_* = FAIL
// Vulkan limits lower than GLES minimum:
3633 VULKAN : KHR-GLES31.core.layout_binding.block_layout_binding_block_FragmentShader = FAIL
// Compute shaders // 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 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: // Multisampled textures:
3565 VULKAN : KHR-GLES31.core.texture_storage_multisample.* = SKIP 3565 VULKAN : KHR-GLES31.core.texture_storage_multisample.* = SKIP
...@@ -63,6 +61,7 @@ ...@@ -63,6 +61,7 @@
// Atomic counters: // Atomic counters:
3566 VULKAN : KHR-GLES31.core.shader_atomic_counters.* = FAIL 3566 VULKAN : KHR-GLES31.core.shader_atomic_counters.* = FAIL
3566 VULKAN : KHR-GLES31.core.layout_binding.buffer_layout_binding_atomic* = SKIP
// RGBA32F: // RGBA32F:
3520 VULKAN : KHR-GLES31.core.texture_gather.*-gather-float-2d-rgb = SKIP 3520 VULKAN : KHR-GLES31.core.texture_gather.*-gather-float-2d-rgb = SKIP
...@@ -74,29 +73,39 @@ ...@@ -74,29 +73,39 @@
3569 VULKAN : KHR-GLES31.core.shader_bitfield_operation* = FAIL 3569 VULKAN : KHR-GLES31.core.shader_bitfield_operation* = FAIL
3569 VULKAN : KHR-GLES31.core.shader_integer_mix.* = FAIL 3569 VULKAN : KHR-GLES31.core.shader_integer_mix.* = FAIL
3569 VULKAN : KHR-GLES31.core.shader_image* = SKIP 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 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.vertex_attrib_binding* = SKIP
3520 VULKAN : KHR-GLES31.core.internalformat.texture2d.* = FAIL 3520 VULKAN : KHR-GLES31.core.internalformat.texture2d.* = FAIL
3520 VULKAN : KHR-GLES31.core.internalformat.texture2d.*rgb5* = SKIP 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.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* = FAIL
3520 VULKAN : KHR-GLES31.core.internalformat.copy_tex_image*rgb5* = SKIP
3520 VULKAN : KHR-GLES31.core.internalformat.renderbuffer* = FAIL 3520 VULKAN : KHR-GLES31.core.internalformat.renderbuffer* = FAIL
3520 VULKAN : KHR-GLES31.shaders.aggressive_optimizations* = 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 @@ ...@@ -31,6 +31,9 @@
// For now we only log Vulkan test expectations. More back-ends can follow as we need them. // 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. // Crashes trying to load non-existent texture load function.
3455 VULKAN : KHR-GLES3.texture_filter_anisotropic.drawing = SKIP 3455 VULKAN : KHR-GLES3.texture_filter_anisotropic.drawing = SKIP
3455 VULKAN : KHR-GLES3.copy_tex_image_conversions.forbidden.* = 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