Commit c5c937e1 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Support R11G11B10_FLOAT and R9G9B9E5_SHAREDEXP

The keys in vk_format_map.json were incorrect. The format table generation script is enhanced to give an error in such a case. This revealed a number of entries with no corresponding angle format, which are also removed. Bug: angleproject:2898 Bug: angleproject:3190 Change-Id: I32caf2d2a8abb6f76b25436725670a8e84d576fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1666700 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 8af6c6f5
...@@ -194,11 +194,11 @@ ...@@ -194,11 +194,11 @@
"Vulkan format:src/libANGLE/renderer/angle_format_map.json": "Vulkan format:src/libANGLE/renderer/angle_format_map.json":
"be9f9bdbdf785dda05920146e8c55dbb", "be9f9bdbdf785dda05920146e8c55dbb",
"Vulkan format:src/libANGLE/renderer/vulkan/gen_vk_format_table.py": "Vulkan format:src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"c50c9c66b89df7179a688cda42eb85f2", "09340e3ba114b4acef6460ac8b242040",
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json": "Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json":
"2590230893bdc30563cdca291a12d92b", "1abd8aff8434973dac586d2c29f948af",
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp": "Vulkan format:src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp":
"ba26e079062affec8cd72d48f5c91d21", "b80639d5c253948c9aaae14c59ca43ee",
"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":
"a528a53197ea6c8eaa3bb42a7cdf0a17", "a528a53197ea6c8eaa3bb42a7cdf0a17",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000000.inc": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000000.inc":
......
...@@ -101,6 +101,20 @@ def is_packed(format_id): ...@@ -101,6 +101,20 @@ def is_packed(format_id):
return "true" if "_PACK" in format_id else "false" return "true" if "_PACK" in format_id else "false"
def verify_vk_map_keys(angle_to_gl, vk_json_data):
"""Verify that the keys in Vulkan format tables exist in the ANGLE table. If they don't, the
entry in the Vulkan file is incorrect and needs to be fixed."""
no_error = True
for table in ["map", "overrides", "fallbacks"]:
for angle_format in vk_json_data[table].keys():
if not angle_format in angle_to_gl.keys():
print "Invalid format " + angle_format + " in vk_format_map.json in " + table
no_error = False
return no_error
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"]
vk_overrides = vk_json_data["overrides"] vk_overrides = vk_json_data["overrides"]
...@@ -180,6 +194,10 @@ def main(): ...@@ -180,6 +194,10 @@ def main():
angle_to_gl = angle_format.load_inverse_table(os.path.join('..', 'angle_format_map.json')) angle_to_gl = angle_format.load_inverse_table(os.path.join('..', 'angle_format_map.json'))
vk_json_data = angle_format.load_json(input_file_name) vk_json_data = angle_format.load_json(input_file_name)
if not verify_vk_map_keys(angle_to_gl, vk_json_data):
return 1
vk_cases = [ vk_cases = [
gen_format_case(angle, gl, vk_json_data) for angle, gl in sorted(angle_to_gl.iteritems()) gen_format_case(angle, gl, vk_json_data) for angle, gl in sorted(angle_to_gl.iteritems())
] ]
......
...@@ -52,10 +52,6 @@ ...@@ -52,10 +52,6 @@
"R8G8B8_USCALED": "VK_FORMAT_R8G8B8_USCALED", "R8G8B8_USCALED": "VK_FORMAT_R8G8B8_USCALED",
"R8G8B8_SSCALED": "VK_FORMAT_R8G8B8_SSCALED", "R8G8B8_SSCALED": "VK_FORMAT_R8G8B8_SSCALED",
"R8G8B8_UNORM_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",
"R8G8B8A8_UNORM": "VK_FORMAT_R8G8B8A8_UNORM", "R8G8B8A8_UNORM": "VK_FORMAT_R8G8B8A8_UNORM",
"R8G8B8A8_SNORM": "VK_FORMAT_R8G8B8A8_SNORM", "R8G8B8A8_SNORM": "VK_FORMAT_R8G8B8A8_SNORM",
"R8G8B8A8_UINT": "VK_FORMAT_R8G8B8A8_UINT", "R8G8B8A8_UINT": "VK_FORMAT_R8G8B8A8_UINT",
...@@ -64,11 +60,6 @@ ...@@ -64,11 +60,6 @@
"R8G8B8A8_SSCALED": "VK_FORMAT_R8G8B8A8_SSCALED", "R8G8B8A8_SSCALED": "VK_FORMAT_R8G8B8A8_SSCALED",
"R8G8B8A8_UNORM_SRGB": "VK_FORMAT_R8G8B8A8_SRGB", "R8G8B8A8_UNORM_SRGB": "VK_FORMAT_R8G8B8A8_SRGB",
"B8G8R8A8_UNORM": "VK_FORMAT_B8G8R8A8_UNORM", "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_UNORM_SRGB": "VK_FORMAT_B8G8R8A8_SRGB", "B8G8R8A8_UNORM_SRGB": "VK_FORMAT_B8G8R8A8_SRGB",
"R10G10B10A2_UNORM": "VK_FORMAT_A2B10G10R10_UNORM_PACK32", "R10G10B10A2_UNORM": "VK_FORMAT_A2B10G10R10_UNORM_PACK32",
"R10G10B10A2_SNORM": "VK_FORMAT_A2B10G10R10_SNORM_PACK32", "R10G10B10A2_SNORM": "VK_FORMAT_A2B10G10R10_SNORM_PACK32",
...@@ -116,25 +107,11 @@ ...@@ -116,25 +107,11 @@
"R32G32B32A32_UINT": "VK_FORMAT_R32G32B32A32_UINT", "R32G32B32A32_UINT": "VK_FORMAT_R32G32B32A32_UINT",
"R32G32B32A32_SINT": "VK_FORMAT_R32G32B32A32_SINT", "R32G32B32A32_SINT": "VK_FORMAT_R32G32B32A32_SINT",
"R32G32B32A32_FLOAT": "VK_FORMAT_R32G32B32A32_SFLOAT", "R32G32B32A32_FLOAT": "VK_FORMAT_R32G32B32A32_SFLOAT",
"R64_UINT": "VK_FORMAT_R64_UINT", "R11G11B10_FLOAT": "VK_FORMAT_B10G11R11_UFLOAT_PACK32",
"R64_SINT": "VK_FORMAT_R64_SINT", "R9G9B9E5_SHAREDEXP": "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32",
"R64_FLOAT": "VK_FORMAT_R64_SFLOAT",
"R64G64_UINT": "VK_FORMAT_R64G64_UINT",
"R64G64_SINT": "VK_FORMAT_R64G64_SINT",
"R64G64_FLOAT": "VK_FORMAT_R64G64_SFLOAT",
"R64G64B64_UINT": "VK_FORMAT_R64G64B64_UINT",
"R64G64B64_SINT": "VK_FORMAT_R64G64B64_SINT",
"R64G64B64_FLOAT": "VK_FORMAT_R64G64B64_SFLOAT",
"R64G64B64A64_UINT": "VK_FORMAT_R64G64B64A64_UINT",
"R64G64B64A64_SINT": "VK_FORMAT_R64G64B64A64_SINT",
"R64G64B64A64_FLOAT": "VK_FORMAT_R64G64B64A64_SFLOAT",
"B10G11R11_UFLOAT_PACK32": "VK_FORMAT_B10G11R11_UFLOAT_PACK32",
"E5B9G9R9_UFLOAT_PACK32": "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32",
"D16_UNORM": "VK_FORMAT_D16_UNORM", "D16_UNORM": "VK_FORMAT_D16_UNORM",
"X8_D24_UNORM_PACK32": "VK_FORMAT_X8_D24_UNORM_PACK32",
"D32_FLOAT": "VK_FORMAT_D32_SFLOAT", "D32_FLOAT": "VK_FORMAT_D32_SFLOAT",
"S8_UINT": "VK_FORMAT_S8_UINT", "S8_UINT": "VK_FORMAT_S8_UINT",
"D16_UNORM_S8_UINT": "VK_FORMAT_D16_UNORM_S8_UINT",
"D24_UNORM_S8_UINT": "VK_FORMAT_D24_UNORM_S8_UINT", "D24_UNORM_S8_UINT": "VK_FORMAT_D24_UNORM_S8_UINT",
"D32_FLOAT_S8X24_UINT": "VK_FORMAT_D32_SFLOAT_S8_UINT", "D32_FLOAT_S8X24_UINT": "VK_FORMAT_D32_SFLOAT_S8_UINT",
"BC1_RGB_UNORM_BLOCK": "VK_FORMAT_BC1_RGB_UNORM_BLOCK", "BC1_RGB_UNORM_BLOCK": "VK_FORMAT_BC1_RGB_UNORM_BLOCK",
......
...@@ -955,7 +955,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat) ...@@ -955,7 +955,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break; break;
case angle::FormatID::R11G11B10_FLOAT: case angle::FormatID::R11G11B10_FLOAT:
// This format is not implemented in Vulkan. internalFormat = GL_R11F_G11F_B10F;
imageFormatID = angle::FormatID::R11G11B10_FLOAT;
vkImageFormat = VK_FORMAT_B10G11R11_UFLOAT_PACK32;
imageInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R11G11B10_FLOAT;
vkBufferFormat = VK_FORMAT_B10G11R11_UFLOAT_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = CopyNativeVertexData<GLfloat, 3, 3, 0>;
vertexLoadRequiresConversion = false;
break; break;
case angle::FormatID::R16G16B16A16_FLOAT: case angle::FormatID::R16G16B16A16_FLOAT:
...@@ -1995,7 +2003,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat) ...@@ -1995,7 +2003,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break; break;
case angle::FormatID::R9G9B9E5_SHAREDEXP: case angle::FormatID::R9G9B9E5_SHAREDEXP:
// This format is not implemented in Vulkan. internalFormat = GL_RGB9_E5;
imageFormatID = angle::FormatID::R9G9B9E5_SHAREDEXP;
vkImageFormat = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32;
imageInitializerFunction = nullptr;
bufferFormatID = angle::FormatID::R9G9B9E5_SHAREDEXP;
vkBufferFormat = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32;
vkBufferFormatIsPacked = true;
vertexLoadFunction = nullptr;
vertexLoadRequiresConversion = false;
break; break;
case angle::FormatID::S8_UINT: case angle::FormatID::S8_UINT:
......
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