Commit 419acc8f by Frank Henigman Committed by Commit Bot

Vulkan: Convert streamed vertex data as needed.

Add two members to vk::Format: - vertex data copy function - flag indicating if the function converts or not Use the function when streaming vertex data so it gets converted if needed. Add fallbacks for integer formats. These formats will now work everywhere, as long as they are in client memory, not a buffer object. Adjust test expectations accordingly. BUG=angleproject:2405 Change-Id: I677221219d933c35740633a0ab7694293e218177 Reviewed-on: https://chromium-review.googlesource.com/1084328Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 84c662b9
{ {
"ANGLE format:src/libANGLE/renderer/angle_format.py": "ANGLE format:src/libANGLE/renderer/angle_format.py":
"826420a038032840f10d2d6066a01e7d", "b18ca0fe4835114a4a2f54977b19e798",
"ANGLE format:src/libANGLE/renderer/angle_format_data.json": "ANGLE format:src/libANGLE/renderer/angle_format_data.json":
"1ab73531d2d9655e669b5560fb43c698", "1ab73531d2d9655e669b5560fb43c698",
"ANGLE format:src/libANGLE/renderer/angle_format_map.json": "ANGLE format:src/libANGLE/renderer/angle_format_map.json":
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"ANGLE load functions table:src/libANGLE/renderer/load_functions_data.json": "ANGLE load functions table:src/libANGLE/renderer/load_functions_data.json":
"21a603f6224d3b6cd606b71dca0ae181", "21a603f6224d3b6cd606b71dca0ae181",
"D3D11 format:src/libANGLE/renderer/angle_format.py": "D3D11 format:src/libANGLE/renderer/angle_format.py":
"826420a038032840f10d2d6066a01e7d", "b18ca0fe4835114a4a2f54977b19e798",
"D3D11 format:src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py": "D3D11 format:src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py":
"1ab3a192c6bb23a926d0a5d0ed84cbf3", "1ab3a192c6bb23a926d0a5d0ed84cbf3",
"D3D11 format:src/libANGLE/renderer/d3d/d3d11/texture_format_data.json": "D3D11 format:src/libANGLE/renderer/d3d/d3d11/texture_format_data.json":
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
"DXGI format support:src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py": "DXGI format support:src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py":
"30158f76e168e014a1bee3925cd5910a", "30158f76e168e014a1bee3925cd5910a",
"DXGI format:src/libANGLE/renderer/angle_format.py": "DXGI format:src/libANGLE/renderer/angle_format.py":
"826420a038032840f10d2d6066a01e7d", "b18ca0fe4835114a4a2f54977b19e798",
"DXGI format:src/libANGLE/renderer/angle_format_map.json": "DXGI format:src/libANGLE/renderer/angle_format_map.json":
"82d80c3be2cdfcc17aec07cf2223907f", "82d80c3be2cdfcc17aec07cf2223907f",
"DXGI format:src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json": "DXGI format:src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json":
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
"DXGI format:src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py": "DXGI format:src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py":
"2932a5e1c3c846be0169e29a4f9c72e8", "2932a5e1c3c846be0169e29a4f9c72e8",
"ESSL static builtins:src/compiler/translator/builtin_function_declarations.txt": "ESSL static builtins:src/compiler/translator/builtin_function_declarations.txt":
"338ae4863ccaab54adccee8e3f7971cf", "39b92f5a4d982873d3595b70049d5160",
"ESSL static builtins:src/compiler/translator/builtin_variables.json": "ESSL static builtins:src/compiler/translator/builtin_variables.json":
"2c0e86ff9f92f79ada03f04206e63fba", "2c0e86ff9f92f79ada03f04206e63fba",
"ESSL static builtins:src/compiler/translator/gen_builtin_symbols.py": "ESSL static builtins:src/compiler/translator/gen_builtin_symbols.py":
...@@ -62,13 +62,13 @@ ...@@ -62,13 +62,13 @@
"OpenGL dispatch table:src/libANGLE/renderer/gl/generate_gl_dispatch_table.py": "OpenGL dispatch table:src/libANGLE/renderer/gl/generate_gl_dispatch_table.py":
"71d2cd9c958ec5e13ce5e38bdb03dcb5", "71d2cd9c958ec5e13ce5e38bdb03dcb5",
"Vulkan format:src/libANGLE/renderer/angle_format.py": "Vulkan format:src/libANGLE/renderer/angle_format.py":
"826420a038032840f10d2d6066a01e7d", "b18ca0fe4835114a4a2f54977b19e798",
"Vulkan format:src/libANGLE/renderer/angle_format_map.json": "Vulkan format:src/libANGLE/renderer/angle_format_map.json":
"82d80c3be2cdfcc17aec07cf2223907f", "82d80c3be2cdfcc17aec07cf2223907f",
"Vulkan format:src/libANGLE/renderer/vulkan/gen_vk_format_table.py": "Vulkan format:src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"86aa4d78d3f1c82f938f1175237c86ce", "2ecc99c12cd41bda7107a7d9ffe3786c",
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json": "Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json":
"ad20bf1583747eb8e70b991135803c3c", "48d376e36fc9fbb1f2a804cc49fc6277",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py":
"c1cc895645db3fe1cd284352890c219e", "c1cc895645db3fe1cd284352890c219e",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert":
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/PushConstantColor.frag": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/PushConstantColor.frag":
"d4edeca8fcb5fc02aa5236c8d8b77a4d", "d4edeca8fcb5fc02aa5236c8d8b77a4d",
"Vulkan mandatory format support table:src/libANGLE/renderer/angle_format.py": "Vulkan mandatory format support table:src/libANGLE/renderer/angle_format.py":
"826420a038032840f10d2d6066a01e7d", "b18ca0fe4835114a4a2f54977b19e798",
"Vulkan mandatory format support table:src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py": "Vulkan mandatory format support table:src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py":
"e11137f0fdf1ff934d698b04c6f430cd", "e11137f0fdf1ff934d698b04c6f430cd",
"Vulkan mandatory format support table:src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json": "Vulkan mandatory format support table:src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json":
......
...@@ -183,3 +183,46 @@ def get_internal_format_initializer(internal_format, format_id): ...@@ -183,3 +183,46 @@ def get_internal_format_initializer(internal_format, format_id):
return 'Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>' return 'Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>'
else: else:
raise ValueError('warning: internal format initializer could not be generated and may be needed for ' + internal_format) raise ValueError('warning: internal format initializer could not be generated and may be needed for ' + internal_format)
def get_vertex_copy_function(src_format, dst_format):
if dst_format == "NONE":
return "nullptr";
num_channel = len(get_channel_tokens(src_format))
if num_channel < 1 or num_channel > 4:
return "nullptr";
if 'FIXED' in src_format:
assert 'FLOAT' in dst_format, ('get_vertex_copy_function: can only convert fixed to float,'
+ ' not to ' + dst_format)
return 'Copy32FixedTo32FVertexData<%d, %d>' % (num_channel, num_channel)
sign = ''
base_type = None
if 'FLOAT' in src_format:
base_type = 'float'
else:
bits = get_bits(src_format)
redbits = bits and bits.get('R')
if redbits == 8:
base_type = 'byte'
elif redbits == 16:
base_type = 'short'
elif redbits == 32:
base_type = 'int'
if 'UINT' in src_format or 'UNORM' in src_format or 'USCALED' in src_format:
sign = 'u'
if base_type is None:
return "nullptr";
gl_type = 'GL' + sign + base_type
if src_format == dst_format:
return 'CopyNativeVertexData<%s, %d, %d, 0>' % (gl_type, num_channel, num_channel)
assert 'FLOAT' in dst_format, ('get_vertex_copy_function: can only convert to float,'
+ ' not to ' + dst_format)
normalized = 'true' if 'NORM' in src_format else 'false'
return "CopyTo32FVertexData<%s, %d, %d, %s>" % (gl_type, num_channel, num_channel, normalized)
...@@ -154,7 +154,7 @@ gl::Error ContextVk::initPipeline(const gl::DrawCallParams &drawCallParams) ...@@ -154,7 +154,7 @@ gl::Error ContextVk::initPipeline(const gl::DrawCallParams &drawCallParams)
mPipelineDesc->updateTopology(mCurrentDrawMode); mPipelineDesc->updateTopology(mCurrentDrawMode);
// Copy over the latest attrib and binding descriptions. // Copy over the latest attrib and binding descriptions.
vertexArrayVk->getPackedInputDescriptions(mRenderer, mPipelineDesc.get()); vertexArrayVk->getPackedInputDescriptions(mPipelineDesc.get());
// Ensure that the RenderPass description is updated. // Ensure that the RenderPass description is updated.
mPipelineDesc->updateRenderPassDesc(framebufferVk->getRenderPassDesc()); mPipelineDesc->updateRenderPassDesc(framebufferVk->getRenderPassDesc());
......
...@@ -42,10 +42,13 @@ class VertexArrayVk : public VertexArrayImpl ...@@ -42,10 +42,13 @@ class VertexArrayVk : public VertexArrayImpl
const gl::VertexArray::DirtyAttribBitsArray &attribBits, const gl::VertexArray::DirtyAttribBitsArray &attribBits,
const gl::VertexArray::DirtyBindingBitsArray &bindingBits) override; const gl::VertexArray::DirtyBindingBitsArray &bindingBits) override;
const gl::AttribArray<VkBuffer> &getCurrentArrayBufferHandles() const; void updateDrawDependencies(vk::CommandGraphResource *drawFramebuffer,
const gl::AttribArray<VkDeviceSize> &getCurrentArrayBufferOffsets() const; const gl::AttributesMask &activeAttribsMask,
vk::CommandGraphResource *elementArrayBufferOverride,
Serial serial,
bool isDrawElements);
void getPackedInputDescriptions(const RendererVk *rendererVk, vk::PipelineDesc *pipelineDesc); void getPackedInputDescriptions(vk::PipelineDesc *pipelineDesc);
// Draw call handling. // Draw call handling.
gl::Error drawArrays(const gl::Context *context, gl::Error drawArrays(const gl::Context *context,
...@@ -63,9 +66,8 @@ class VertexArrayVk : public VertexArrayImpl ...@@ -63,9 +66,8 @@ class VertexArrayVk : public VertexArrayImpl
// update vertex info for attributes the program doesn't use, (very silly edge case). The // update vertex info for attributes the program doesn't use, (very silly edge case). The
// advantage is the cached state then doesn't depend on the Program, so doesn't have to be // advantage is the cached state then doesn't depend on the Program, so doesn't have to be
// updated when the active Program changes. // updated when the active Program changes.
void updatePackedInputDescriptions(const RendererVk *rendererVk); void updatePackedInputDescriptions();
void updatePackedInputInfo(const RendererVk *rendererVk, void updatePackedInputInfo(uint32_t attribIndex,
uint32_t attribIndex,
const gl::VertexBinding &binding, const gl::VertexBinding &binding,
const gl::VertexAttribute &attrib); const gl::VertexAttribute &attrib);
...@@ -91,13 +93,16 @@ class VertexArrayVk : public VertexArrayImpl ...@@ -91,13 +93,16 @@ class VertexArrayVk : public VertexArrayImpl
vk::CommandBuffer *commandBuffer, vk::CommandBuffer *commandBuffer,
bool newCommandBuffer); bool newCommandBuffer);
void syncDirtyAttrib(const gl::VertexAttribute &attrib, void syncDirtyAttrib(const RendererVk *renderer,
const gl::VertexAttribute &attrib,
const gl::VertexBinding &binding, const gl::VertexBinding &binding,
size_t attribIndex); size_t attribIndex);
gl::AttribArray<VkBuffer> mCurrentArrayBufferHandles; gl::AttribArray<VkBuffer> mCurrentArrayBufferHandles;
gl::AttribArray<VkDeviceSize> mCurrentArrayBufferOffsets; gl::AttribArray<VkDeviceSize> mCurrentArrayBufferOffsets;
gl::AttribArray<vk::CommandGraphResource *> mCurrentArrayBufferResources; gl::AttribArray<vk::CommandGraphResource *> mCurrentArrayBufferResources;
gl::AttribArray<const vk::Format *> mCurrentArrayBufferFormats;
gl::AttribArray<GLuint> mCurrentArrayBufferStrides;
VkBuffer mCurrentElementArrayBufferHandle; VkBuffer mCurrentElementArrayBufferHandle;
VkDeviceSize mCurrentElementArrayBufferOffset; VkDeviceSize mCurrentElementArrayBufferOffset;
vk::CommandGraphResource *mCurrentElementArrayBufferResource; vk::CommandGraphResource *mCurrentElementArrayBufferResource;
......
...@@ -82,13 +82,18 @@ angle::Format::ID::{texture_fallback}, ...@@ -82,13 +82,18 @@ angle::Format::ID::{texture_fallback},
{texture_initializer_fallback});""" {texture_initializer_fallback});"""
buffer_basic_template = """bufferFormatID = angle::Format::ID::{buffer}; buffer_basic_template = """bufferFormatID = angle::Format::ID::{buffer};
vkBufferFormat = {vk_buffer_format};""" vkBufferFormat = {vk_buffer_format};
vertexLoadFunction = {vertex_load_function};
vertexLoadRequiresConversion = {vertex_load_converts};"""
buffer_fallback_template = """initBufferFallback(physicalDevice, buffer_fallback_template = """initBufferFallback(physicalDevice,
angle::Format::ID::{buffer}, angle::Format::ID::{buffer},
{vk_buffer_format}, {vk_buffer_format},
{vertex_load_function},
{vertex_load_converts},
angle::Format::ID::{buffer_fallback}, angle::Format::ID::{buffer_fallback},
{vk_buffer_format_fallback});""" {vk_buffer_format_fallback},
{vertex_load_function_fallback});"""
def gen_format_case(angle, internal_format, vk_json_data): def gen_format_case(angle, internal_format, vk_json_data):
vk_map = vk_json_data["map"] vk_map = vk_json_data["map"]
...@@ -131,8 +136,11 @@ def gen_format_case(angle, internal_format, vk_json_data): ...@@ -131,8 +136,11 @@ def gen_format_case(angle, internal_format, vk_json_data):
buffer_template=buffer_template, buffer_template=buffer_template,
buffer=buffer_format, buffer=buffer_format,
vk_buffer_format=vk_map[buffer_format], vk_buffer_format=vk_map[buffer_format],
vertex_load_function=angle_format.get_vertex_copy_function(angle, buffer_format),
vertex_load_converts='false' if angle == buffer_format else 'true',
buffer_fallback=buffer_fallback, buffer_fallback=buffer_fallback,
vk_buffer_format_fallback=vk_map[buffer_fallback], vk_buffer_format_fallback=vk_map[buffer_fallback],
vertex_load_function_fallback=angle_format.get_vertex_copy_function(angle, buffer_fallback),
) )
return format_entry_template.format(**args).format(**args) return format_entry_template.format(**args).format(**args)
......
...@@ -231,6 +231,105 @@ ...@@ -231,6 +231,105 @@
}, },
"D24_UNORM_S8_UINT": { "D24_UNORM_S8_UINT": {
"texture": "D32_FLOAT_S8X24_UINT" "texture": "D32_FLOAT_S8X24_UINT"
},
"R8_UNORM": {
"buffer": "R32_FLOAT"
},
"R8_SNORM": {
"buffer": "R32_FLOAT"
},
"R8_USCALED": {
"buffer": "R32_FLOAT"
},
"R8_SSCALED": {
"buffer": "R32_FLOAT"
},
"R8G8_UNORM": {
"buffer": "R32G32_FLOAT"
},
"R8G8_SNORM": {
"buffer": "R32G32_FLOAT"
},
"R8G8_USCALED": {
"buffer": "R32G32_FLOAT"
},
"R8G8_SSCALED": {
"buffer": "R32G32_FLOAT"
},
"R8G8B8_UNORM": {
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8_SNORM": {
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8_USCALED": {
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8_SSCALED": {
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8A8_UNORM": {
"buffer": "R32G32B32A32_FLOAT"
},
"R8G8B8A8_SNORM": {
"buffer": "R32G32B32A32_FLOAT"
},
"R8G8B8A8_USCALED": {
"buffer": "R32G32B32A32_FLOAT"
},
"R8G8B8A8_SSCALED": {
"buffer": "R32G32B32A32_FLOAT"
},
"R16_UNORM": {
"buffer": "R32_FLOAT"
},
"R16_SNORM": {
"buffer": "R32_FLOAT"
},
"R16_USCALED": {
"buffer": "R32_FLOAT"
},
"R16_SSCALED": {
"buffer": "R32_FLOAT"
},
"R16G16_UNORM": {
"buffer": "R32G32_FLOAT"
},
"R16G16_SNORM": {
"buffer": "R32G32_FLOAT"
},
"R16G16_USCALED": {
"buffer": "R32G32_FLOAT"
},
"R16G16_SSCALED": {
"buffer": "R32G32_FLOAT"
},
"R16G16B16_UNORM": {
"buffer": "R32G32B32_FLOAT"
},
"R16G16B16_SNORM": {
"buffer": "R32G32B32_FLOAT"
},
"R16G16B16_USCALED": {
"buffer": "R32G32B32_FLOAT"
},
"R16G16B16_SSCALED": {
"buffer": "R32G32B32_FLOAT"
},
"R16G16B16A16_UNORM": {
"buffer": "R32G32B32A32_FLOAT"
},
"R16G16B16A16_SNORM": {
"buffer": "R32G32B32A32_FLOAT"
},
"R16G16B16A16_USCALED": {
"buffer": "R32G32B32A32_FLOAT"
},
"R16G16B16A16_SSCALED": {
"buffer": "R32G32B32A32_FLOAT"
} }
} }
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -56,6 +56,13 @@ bool HasFullTextureFormatSupport(VkPhysicalDevice physicalDevice, VkFormat vkFor ...@@ -56,6 +56,13 @@ bool HasFullTextureFormatSupport(VkPhysicalDevice physicalDevice, VkFormat vkFor
HasFormatFeatureBits(kBitsDepth, formatProperties); HasFormatFeatureBits(kBitsDepth, formatProperties);
} }
bool HasFullBufferFormatSupport(VkPhysicalDevice physicalDevice, VkFormat vkFormat)
{
VkFormatProperties formatProperties;
vk::GetFormatProperties(physicalDevice, vkFormat, &formatProperties);
return formatProperties.bufferFeatures & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
}
} // anonymous namespace } // anonymous namespace
namespace vk namespace vk
...@@ -126,12 +133,30 @@ void Format::initTextureFallback(VkPhysicalDevice physicalDevice, ...@@ -126,12 +133,30 @@ void Format::initTextureFallback(VkPhysicalDevice physicalDevice,
void Format::initBufferFallback(VkPhysicalDevice physicalDevice, void Format::initBufferFallback(VkPhysicalDevice physicalDevice,
angle::Format::ID format, angle::Format::ID format,
VkFormat vkFormat, VkFormat vkFormat,
VertexCopyFunction function,
bool functionConverts,
angle::Format::ID fallbackFormat, angle::Format::ID fallbackFormat,
VkFormat fallbackVkFormat) VkFormat fallbackVkFormat,
VertexCopyFunction fallbackFunction)
{ {
ASSERT(format != angle::Format::ID::NONE); ASSERT(format != angle::Format::ID::NONE);
ASSERT(fallbackFormat != angle::Format::ID::NONE); ASSERT(fallbackFormat != angle::Format::ID::NONE);
UNIMPLEMENTED();
if (HasFullBufferFormatSupport(physicalDevice, vkFormat))
{
bufferFormatID = format;
vkBufferFormat = vkFormat;
vertexLoadFunction = function;
vertexLoadRequiresConversion = functionConverts;
}
else
{
bufferFormatID = fallbackFormat;
vkBufferFormat = fallbackVkFormat;
vertexLoadFunction = fallbackFunction;
vertexLoadRequiresConversion = true;
ASSERT(HasFullBufferFormatSupport(physicalDevice, vkBufferFormat));
}
} }
const angle::Format &Format::textureFormat() const const angle::Format &Format::textureFormat() const
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "libANGLE/formatutils.h" #include "libANGLE/formatutils.h"
#include "libANGLE/renderer/Format.h" #include "libANGLE/renderer/Format.h"
#include "libANGLE/renderer/copyvertex.h"
#include "libANGLE/renderer/renderer_utils.h" #include "libANGLE/renderer/renderer_utils.h"
#include <array> #include <array>
...@@ -52,8 +53,11 @@ struct Format final : private angle::NonCopyable ...@@ -52,8 +53,11 @@ struct Format final : private angle::NonCopyable
void initBufferFallback(VkPhysicalDevice physicalDevice, void initBufferFallback(VkPhysicalDevice physicalDevice,
angle::Format::ID format, angle::Format::ID format,
VkFormat vkFormat, VkFormat vkFormat,
VertexCopyFunction function,
bool functionConverts,
angle::Format::ID fallbackFormat, angle::Format::ID fallbackFormat,
VkFormat fallbackVkFormat); VkFormat fallbackVkFormat,
VertexCopyFunction fallbackFunction);
const angle::Format &textureFormat() const; const angle::Format &textureFormat() const;
const angle::Format &bufferFormat() const; const angle::Format &bufferFormat() const;
...@@ -67,6 +71,8 @@ struct Format final : private angle::NonCopyable ...@@ -67,6 +71,8 @@ struct Format final : private angle::NonCopyable
VkFormat vkBufferFormat; VkFormat vkBufferFormat;
InitializeTextureDataFunction textureInitializerFunction; InitializeTextureDataFunction textureInitializerFunction;
LoadFunctionMap textureLoadFunctions; LoadFunctionMap textureLoadFunctions;
VertexCopyFunction vertexLoadFunction;
bool vertexLoadRequiresConversion;
}; };
bool operator==(const Format &lhs, const Format &rhs); bool operator==(const Format &lhs, const Format &rhs);
......
...@@ -216,13 +216,7 @@ ...@@ -216,13 +216,7 @@
2606 VULKAN ANDROID : dEQP-GLES2.functional.debug_marker.random = SKIP 2606 VULKAN ANDROID : dEQP-GLES2.functional.debug_marker.random = SKIP
2606 VULKAN ANDROID : dEQP-GLES2.functional.debug_marker.supported = SKIP 2606 VULKAN ANDROID : dEQP-GLES2.functional.debug_marker.supported = SKIP
2609 VULKAN ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.* = SKIP 2609 VULKAN ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short3* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_short3* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_17_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_17_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_2_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_2_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_32_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_32_byte* = SKIP
...@@ -235,10 +229,6 @@ ...@@ -235,10 +229,6 @@
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_17_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_17_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_2_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_2_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_2_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_2_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte* = SKIP
...@@ -255,6 +245,7 @@ ...@@ -255,6 +245,7 @@
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_short* = SKIP
2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.red_unsigned_byte = FAIL 2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.red_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.rg_unsigned_byte = FAIL 2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.rg_unsigned_byte = FAIL
...@@ -339,12 +330,6 @@ ...@@ -339,12 +330,6 @@
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4* = SKIP
// TODO(fjhenigman): Try these again once vertex format support is farther along.
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_short* = SKIP
// AMD is known to require proper alignment which is probably why 17 is a bad number for it // AMD is known to require proper alignment which is probably why 17 is a bad number for it
// TODO(fjhenigman): Implement realigning. // TODO(fjhenigman): Implement realigning.
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_0_float2_17 = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_0_float2_17 = SKIP
...@@ -369,10 +354,6 @@ ...@@ -369,10 +354,6 @@
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_17_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_17_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_2_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_2_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_32_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_32_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short* = SKIP
......
...@@ -389,23 +389,10 @@ void AttributeLayoutTest::GetTestCases(void) ...@@ -389,23 +389,10 @@ void AttributeLayoutTest::GetTestCases(void)
mTestCases.push_back({Float(B0, 0, 16, mCoord), Float(B1, 0, 12, mColor)}); mTestCases.push_back({Float(B0, 0, 16, mCoord), Float(B1, 0, 12, mColor)});
// 6-9. byte/short // 6-9. byte/short
if (IsVulkan() && (IsAndroid() || (IsWindows() && IsAMD()))) mTestCases.push_back({SByte(M0, 0, 20, mCoord), UByte(M0, 10, 20, mColor)});
{ mTestCases.push_back({SShort(M0, 0, 20, mCoord), UShort(M0, 8, 20, mColor)});
// empty test cases preserve the numbering mTestCases.push_back({NormSByte(M0, 0, 8, mCoord), NormUByte(M0, 4, 8, mColor)});
mTestCases.push_back({}); mTestCases.push_back({NormSShort(M0, 0, 20, mCoord), NormUShort(M0, 8, 20, mColor)});
mTestCases.push_back({});
mTestCases.push_back({});
mTestCases.push_back({});
}
else
{
// TODO(fjhenigman): Enable these once vertex format conversion is implemented.
// anglebug.com/2405
mTestCases.push_back({SByte(M0, 0, 20, mCoord), UByte(M0, 10, 20, mColor)});
mTestCases.push_back({SShort(M0, 0, 20, mCoord), UShort(M0, 8, 20, mColor)});
mTestCases.push_back({NormSByte(M0, 0, 8, mCoord), NormUByte(M0, 4, 8, mColor)});
mTestCases.push_back({NormSShort(M0, 0, 20, mCoord), NormUShort(M0, 8, 20, mColor)});
}
if (IsVulkan()) if (IsVulkan())
{ {
......
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