Commit b9039bf7 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: fix numerous formats missing support

Vulkan _SRGB formats have a suffix of _UNORM_SRGB in the corresponding angle name. Vulkan A2B10G10R10_*_PACK32 formats have angle names in the form R10G10B10A2_*. A16 and A32 formats are emulated similar to A8. Some formats that are not in the front-end are removed. Bug: angleproject:2364, angleproject:2405 Change-Id: I00718f450a374912d57d3c00ea167ce486e10aa0 Reviewed-on: https://chromium-review.googlesource.com/c/1468042Reviewed-by: 's avatarJamie Madill <jmadill@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarIan Elliott <ianelliott@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
parent ee4fa078
......@@ -90,7 +90,7 @@
"Vulkan format:src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"61a7752424595e24edff0c1f1784e18e",
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json":
"84f988ff75f4d5b8f2a5d572ee8c51cc",
"6e6f7cf9afd17860169b590621c3dcc1",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py":
"1c64f7187357d7561c984ec57d251e74",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp":
......
......@@ -39,52 +39,43 @@
"R8_SINT": "VK_FORMAT_R8_SINT",
"R8_USCALED": "VK_FORMAT_R8_USCALED",
"R8_SSCALED": "VK_FORMAT_R8_SSCALED",
"R8_SRGB": "VK_FORMAT_R8_SRGB",
"R8G8_UNORM": "VK_FORMAT_R8G8_UNORM",
"R8G8_SNORM": "VK_FORMAT_R8G8_SNORM",
"R8G8_UINT": "VK_FORMAT_R8G8_UINT",
"R8G8_SINT": "VK_FORMAT_R8G8_SINT",
"R8G8_USCALED": "VK_FORMAT_R8G8_USCALED",
"R8G8_SSCALED": "VK_FORMAT_R8G8_SSCALED",
"R8G8_SRGB": "VK_FORMAT_R8G8_SRGB",
"R8G8B8_UNORM": "VK_FORMAT_R8G8B8_UNORM",
"R8G8B8_SNORM": "VK_FORMAT_R8G8B8_SNORM",
"R8G8B8_UINT": "VK_FORMAT_R8G8B8_UINT",
"R8G8B8_SINT": "VK_FORMAT_R8G8B8_SINT",
"R8G8B8_USCALED": "VK_FORMAT_R8G8B8_USCALED",
"R8G8B8_SSCALED": "VK_FORMAT_R8G8B8_SSCALED",
"R8G8B8_SRGB": "VK_FORMAT_R8G8B8_SRGB",
"R8G8B8_UNORM_SRGB": "VK_FORMAT_R8G8B8_SRGB",
"B8G8R8_UNORM": "VK_FORMAT_B8G8R8_UNORM",
"B8G8R8_SNORM": "VK_FORMAT_B8G8R8_SNORM",
"B8G8R8_UINT": "VK_FORMAT_B8G8R8_UINT",
"B8G8R8_SINT": "VK_FORMAT_B8G8R8_SINT",
"B8G8R8_SRGB": "VK_FORMAT_B8G8R8_SRGB",
"R8G8B8A8_UNORM": "VK_FORMAT_R8G8B8A8_UNORM",
"R8G8B8A8_SNORM": "VK_FORMAT_R8G8B8A8_SNORM",
"R8G8B8A8_UINT": "VK_FORMAT_R8G8B8A8_UINT",
"R8G8B8A8_SINT": "VK_FORMAT_R8G8B8A8_SINT",
"R8G8B8A8_USCALED": "VK_FORMAT_R8G8B8A8_USCALED",
"R8G8B8A8_SSCALED": "VK_FORMAT_R8G8B8A8_SSCALED",
"R8G8B8A8_SRGB": "VK_FORMAT_R8G8B8A8_SRGB",
"R8G8B8A8_UNORM_SRGB": "VK_FORMAT_R8G8B8A8_SRGB",
"B8G8R8A8_UNORM": "VK_FORMAT_B8G8R8A8_UNORM",
"B8G8R8A8_SNORM": "VK_FORMAT_B8G8R8A8_SNORM",
"B8G8R8A8_USCALED": "VK_FORMAT_B8G8R8A8_USCALED",
"B8G8R8A8_SSCALED": "VK_FORMAT_B8G8R8A8_SSCALED",
"B8G8R8A8_UINT": "VK_FORMAT_B8G8R8A8_UINT",
"B8G8R8A8_SINT": "VK_FORMAT_B8G8R8A8_SINT",
"B8G8R8A8_SRGB": "VK_FORMAT_B8G8R8A8_SRGB",
"A2R10G10B10_UNORM_PACK32": "VK_FORMAT_A2R10G10B10_UNORM_PACK32",
"A2R10G10B10_SNORM_PACK32": "VK_FORMAT_A2R10G10B10_SNORM_PACK32",
"A2R10G10B10_USCALED_PACK32": "VK_FORMAT_A2R10G10B10_USCALED_PACK32",
"A2R10G10B10_SSCALED_PACK32": "VK_FORMAT_A2R10G10B10_SSCALED_PACK32",
"A2R10G10B10_UINT_PACK32": "VK_FORMAT_A2R10G10B10_UINT_PACK32",
"A2R10G10B10_SINT_PACK32": "VK_FORMAT_A2R10G10B10_SINT_PACK32",
"A2B10G10R10_UNORM_PACK32": "VK_FORMAT_A2B10G10R10_UNORM_PACK32",
"A2B10G10R10_SNORM_PACK32": "VK_FORMAT_A2B10G10R10_SNORM_PACK32",
"A2B10G10R10_USCALED_PACK32": "VK_FORMAT_A2B10G10R10_USCALED_PACK32",
"A2B10G10R10_SSCALED_PACK32": "VK_FORMAT_A2B10G10R10_SSCALED_PACK32",
"A2B10G10R10_UINT_PACK32": "VK_FORMAT_A2B10G10R10_UINT_PACK32",
"A2B10G10R10_SINT_PACK32": "VK_FORMAT_A2B10G10R10_SINT_PACK32",
"B8G8R8A8_UNORM_SRGB": "VK_FORMAT_B8G8R8A8_SRGB",
"R10G10B10A2_UNORM": "VK_FORMAT_A2B10G10R10_UNORM_PACK32",
"R10G10B10A2_SNORM": "VK_FORMAT_A2B10G10R10_SNORM_PACK32",
"R10G10B10A2_USCALED": "VK_FORMAT_A2B10G10R10_USCALED_PACK32",
"R10G10B10A2_SSCALED": "VK_FORMAT_A2B10G10R10_SSCALED_PACK32",
"R10G10B10A2_UINT": "VK_FORMAT_A2B10G10R10_UINT_PACK32",
"R10G10B10A2_SINT": "VK_FORMAT_A2B10G10R10_SINT_PACK32",
"R16_UNORM": "VK_FORMAT_R16_UNORM",
"R16_SNORM": "VK_FORMAT_R16_SNORM",
"R16_USCALED": "VK_FORMAT_R16_USCALED",
......@@ -202,6 +193,12 @@
"ASTC_12x12_SRGB_BLOCK": "VK_FORMAT_ASTC_12x12_SRGB_BLOCK"
},
"overrides": {
"A16_FLOAT": {
"texture": "R16_FLOAT"
},
"A32_FLOAT": {
"texture": "R32_FLOAT"
},
"A8_UNORM": {
"texture": "R8_UNORM"
},
......@@ -220,6 +217,9 @@
"R8G8B8_UNORM": {
"texture": "R8G8B8A8_UNORM"
},
"R8G8B8_UNORM_SRGB": {
"texture": "R8G8B8A8_UNORM_SRGB"
},
"B8G8R8X8_UNORM": {
"buffer": "NONE",
"texture": "B8G8R8A8_UNORM"
......
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_vk_format_table.py using data from vk_format_map.json
//
// Copyright 2018 The ANGLE Project Authors. All rights reserved.
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -27,7 +27,11 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
switch (angleFormat.id)
{
case angle::FormatID::A16_FLOAT:
// This format is not implemented in Vulkan.
internalFormat = GL_ALPHA16F_EXT;
textureFormatID = angle::FormatID::R16_FLOAT;
vkTextureFormat = VK_FORMAT_R16_SFLOAT;
textureInitializerFunction = nullptr;
break;
case angle::FormatID::A1R5G5B5_UNORM:
......@@ -43,7 +47,11 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::A32_FLOAT:
// This format is not implemented in Vulkan.
internalFormat = GL_ALPHA32F_EXT;
textureFormatID = angle::FormatID::R32_FLOAT;
vkTextureFormat = VK_FORMAT_R32_SFLOAT;
textureInitializerFunction = nullptr;
break;
case angle::FormatID::A8_UNORM:
......@@ -447,7 +455,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::B8G8R8A8_UNORM_SRGB:
// This format is not implemented in Vulkan.
internalFormat = GL_BGRA8_SRGB_ANGLEX;
textureFormatID = angle::FormatID::B8G8R8A8_UNORM_SRGB;
vkTextureFormat = VK_FORMAT_B8G8R8A8_SRGB;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::B8G8R8A8_UNORM_SRGB;
vkBufferFormat = VK_FORMAT_B8G8R8A8_SRGB;
vkBufferFormatIsPacked = false;
vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::B8G8R8X8_UNORM:
......@@ -767,27 +783,75 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R10G10B10A2_SINT:
// This format is not implemented in Vulkan.
internalFormat = GL_RGB10_A2_SINT_ANGLEX;
textureFormatID = angle::FormatID::R10G10B10A2_SINT;
vkTextureFormat = VK_FORMAT_A2B10G10R10_SINT_PACK32;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R10G10B10A2_SINT;
vkBufferFormat = VK_FORMAT_A2B10G10R10_SINT_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R10G10B10A2_SNORM:
// This format is not implemented in Vulkan.
internalFormat = GL_RGB10_A2_SNORM_ANGLEX;
textureFormatID = angle::FormatID::R10G10B10A2_SNORM;
vkTextureFormat = VK_FORMAT_A2B10G10R10_SNORM_PACK32;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R10G10B10A2_SNORM;
vkBufferFormat = VK_FORMAT_A2B10G10R10_SNORM_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R10G10B10A2_SSCALED:
// This format is not implemented in Vulkan.
internalFormat = GL_RGB10_A2_SSCALED_ANGLEX;
textureFormatID = angle::FormatID::R10G10B10A2_SSCALED;
vkTextureFormat = VK_FORMAT_A2B10G10R10_SSCALED_PACK32;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R10G10B10A2_SSCALED;
vkBufferFormat = VK_FORMAT_A2B10G10R10_SSCALED_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R10G10B10A2_UINT:
// This format is not implemented in Vulkan.
internalFormat = GL_RGB10_A2UI;
textureFormatID = angle::FormatID::R10G10B10A2_UINT;
vkTextureFormat = VK_FORMAT_A2B10G10R10_UINT_PACK32;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R10G10B10A2_UINT;
vkBufferFormat = VK_FORMAT_A2B10G10R10_UINT_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R10G10B10A2_UNORM:
// This format is not implemented in Vulkan.
internalFormat = GL_RGB10_A2;
textureFormatID = angle::FormatID::R10G10B10A2_UNORM;
vkTextureFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R10G10B10A2_UNORM;
vkBufferFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R10G10B10A2_USCALED:
// This format is not implemented in Vulkan.
internalFormat = GL_RGB10_A2_USCALED_ANGLEX;
textureFormatID = angle::FormatID::R10G10B10A2_USCALED;
vkTextureFormat = VK_FORMAT_A2B10G10R10_USCALED_PACK32;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R10G10B10A2_USCALED;
vkBufferFormat = VK_FORMAT_A2B10G10R10_USCALED_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R11G11B10_FLOAT:
......@@ -1540,7 +1604,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R8G8B8A8_UNORM_SRGB:
// This format is not implemented in Vulkan.
internalFormat = GL_SRGB8_ALPHA8;
textureFormatID = angle::FormatID::R8G8B8A8_UNORM_SRGB;
vkTextureFormat = VK_FORMAT_R8G8B8A8_SRGB;
textureInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R8G8B8A8_UNORM_SRGB;
vkBufferFormat = VK_FORMAT_R8G8B8A8_SRGB;
vkBufferFormatIsPacked = false;
vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R8G8B8A8_USCALED:
......@@ -1628,7 +1700,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R8G8B8_UNORM_SRGB:
// This format is not implemented in Vulkan.
internalFormat = GL_SRGB8;
textureFormatID = angle::FormatID::R8G8B8A8_UNORM_SRGB;
vkTextureFormat = VK_FORMAT_R8G8B8A8_SRGB;
textureInitializerFunction = Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>;
bufferFormatID = angle::FormatID::R8G8B8_UNORM_SRGB;
vkBufferFormat = VK_FORMAT_R8G8B8_SRGB;
vkBufferFormatIsPacked = false;
vertexLoadFunction = CopyNativeVertexData<GLubyte, 3, 3, 0>;
vertexLoadRequiresConversion = false;
break;
case angle::FormatID::R8G8B8_USCALED:
......
......@@ -145,7 +145,7 @@
2630 GLES ANDROID : dEQP-GLES2.functional.shaders.struct.uniform.sampler_in_array_function_arg_* = FAIL
2630 GLES ANDROID : dEQP-GLES2.functional.shaders.struct.uniform.sampler_in_function_arg_* = FAIL
// Windows Linux and Mac failures
// dEQP bugs
1028 DEBUG RELEASE : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.srgb8 = FAIL
1028 DEBUG RELEASE : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.srgb8 = FAIL
1028 DEBUG RELEASE : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.srgb8 = FAIL
......
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