Commit a615852d by Olli Etuaho Committed by Commit Bot

Split texture_format_data.json into two files

After this change, texture_format_map.json maps the GL internal formats to an enumeration of formats that is internal to ANGLE. Each ANGLE format specifies a unique combination of DXGI formats and what type of data the format contains. In the future, the ANGLE format could be used instead of DXGI format inside C++ code to identify which type of data a resource contains. This becomes useful when a GL format is associated with multiple DXGI formats, which may have different type information (for example depth vs. red, integer vs. float). texture_format_data.json is changed to only store data on these ANGLE formats. BUG=angleproject:1318 BUG=angleproject:1244 TEST=gen_texture_format_table.py (no changes in autogenerated file) Change-Id: I729c4a4d6fc66ee61598ef2d879e6785c85d40ab Reviewed-on: https://chromium-review.googlesource.com/328251Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent cbed3f5b
......@@ -248,14 +248,13 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
}} // namespace rx
"""
def get_texture_format_item(idx, texture_format):
def get_texture_format_item(idx, requirements_fn, angle_format):
table_data = '';
tex_format = texture_format["texFormat"] if "texFormat" in texture_format else "DXGI_FORMAT_UNKNOWN"
srv_format = texture_format["srvFormat"] if "srvFormat" in texture_format else "DXGI_FORMAT_UNKNOWN"
rtv_format = texture_format["rtvFormat"] if "rtvFormat" in texture_format else "DXGI_FORMAT_UNKNOWN"
dsv_format = texture_format["dsvFormat"] if "dsvFormat" in texture_format else "DXGI_FORMAT_UNKNOWN"
requirements_fn = texture_format["requirementsFcn"] if "requirementsFcn" in texture_format else "AnyDevice"
tex_format = angle_format["texFormat"] if "texFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
srv_format = angle_format["srvFormat"] if "srvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
rtv_format = angle_format["rtvFormat"] if "rtvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
dsv_format = angle_format["dsvFormat"] if "dsvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
if idx == 0:
table_data += ' if (' + requirements_fn + '(renderer11DeviceCaps))\n'
......@@ -272,24 +271,20 @@ def get_texture_format_item(idx, texture_format):
return table_data
def parse_json_into_switch_string(json_data):
def parse_json_into_switch_string(json_map, json_data):
table_data = ''
angle_format_map = {}
def format_sort(texture_format):
if 'requirementsFcn' in texture_format:
return texture_format['requirementsFcn']
elif 'texFormat' in texture_format:
return texture_format['texFormat']
else:
return texture_format
for internal_format_item in sorted(json_data.iteritems()):
for internal_format_item in sorted(json_map.iteritems()):
internal_format = internal_format_item[0]
table_data += ' case ' + internal_format + ':\n'
table_data += ' {\n'
for idx, texture_format in enumerate(sorted(json_data[internal_format], key=format_sort)):
table_data += get_texture_format_item(idx, texture_format)
if isinstance(json_map[internal_format], basestring):
table_data += get_texture_format_item(0, "AnyDevice", json_data[json_map[internal_format]])
else:
for idx, requirements_map in enumerate(sorted(json_map[internal_format].iteritems())):
table_data += get_texture_format_item(idx, requirements_map[0], json_data[requirements_map[1]])
table_data += ' else\n'
table_data += ' {\n'
......@@ -299,14 +294,27 @@ def parse_json_into_switch_string(json_data):
return table_data
with open('texture_format_data.json') as texture_format_json_file:
texture_format_data = texture_format_json_file.read();
texture_format_json_file.close()
json_data = json.loads(texture_format_data)
table_data = parse_json_into_switch_string(json_data)
output = template.format(data=table_data)
with open('texture_format_table_autogen.cpp', 'wt') as out_file:
out_file.write(output)
out_file.close()
def reject_duplicate_keys(pairs):
found_keys = {}
for key, value in pairs:
if key in found_keys:
raise ValueError("duplicate key: %r" % (key,))
else:
found_keys[key] = value
return found_keys
with open('texture_format_map.json') as texture_format_map_file:
with open('texture_format_data.json') as texture_format_json_file:
texture_format_map = texture_format_map_file.read()
texture_format_data = texture_format_json_file.read()
texture_format_map_file.close()
texture_format_json_file.close()
json_map = json.loads(texture_format_map, object_pairs_hook=reject_duplicate_keys)
json_data = json.loads(texture_format_data, object_pairs_hook=reject_duplicate_keys)
table_data = parse_json_into_switch_string(json_map, json_data)
output = template.format(data=table_data)
with open('texture_format_table_autogen.cpp', 'wt') as out_file:
out_file.write(output)
out_file.close()
{
"GL_ALPHA": {
"OnlyFL10Plus": "ANGLE_FORMAT_A8_UNORM",
"OnlyFL9_3": "ANGLE_FORMAT_R8G8B8A8_UNORM"
},
"GL_ALPHA16F_EXT": "ANGLE_FORMAT_R16G16B16A16_FLOAT",
"GL_ALPHA32F_EXT": "ANGLE_FORMAT_R32G32B32A32_FLOAT",
"GL_ALPHA8_EXT": {
"OnlyFL10Plus": "ANGLE_FORMAT_A8_UNORM",
"OnlyFL9_3": "ANGLE_FORMAT_R8G8B8A8_UNORM"
},
"GL_BGR5_A1_ANGLEX": "ANGLE_FORMAT_B8G8R8A8_UNORM",
"GL_BGRA4_ANGLEX": "ANGLE_FORMAT_B8G8R8A8_UNORM",
"GL_BGRA8_EXT": "ANGLE_FORMAT_B8G8R8A8_UNORM",
"GL_BGRA_EXT": "ANGLE_FORMAT_B8G8R8A8_UNORM",
"GL_COMPRESSED_R11_EAC": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8_UNORM_NONRENDERABLE"
},
"GL_COMPRESSED_RG11_EAC": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8_UNORM_NONRENDERABLE"
},
"GL_COMPRESSED_RGB8_ETC2": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE"
},
"GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE"
},
"GL_COMPRESSED_RGBA8_ETC2_EAC": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE"
},
"GL_COMPRESSED_RGBA_S3TC_DXT1_EXT": "ANGLE_FORMAT_BC1_UNORM",
"GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE": "ANGLE_FORMAT_BC2_UNORM",
"GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE": "ANGLE_FORMAT_BC3_UNORM",
"GL_COMPRESSED_RGB_S3TC_DXT1_EXT": "ANGLE_FORMAT_BC1_UNORM",
"GL_COMPRESSED_SIGNED_R11_EAC": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8_SNORM_NONRENDERABLE"
},
"GL_COMPRESSED_SIGNED_RG11_EAC": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8_SNORM_NONRENDERABLE"
},
"GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE"
},
"GL_COMPRESSED_SRGB8_ETC2": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE"
},
"GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2": {
"OnlyFL10Plus": "ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE"
},
"GL_DEPTH24_STENCIL8": {
"OnlyFL10Plus": "ANGLE_FORMAT_D24_UNORM_S8_UINT_FL10",
"OnlyFL9_3": "ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3"
},
"GL_DEPTH32F_STENCIL8": {
"OnlyFL10Plus": "ANGLE_FORMAT_D32_FLOAT_S8X24_UINT_FL10",
"OnlyFL9_3": "ANGLE_FORMAT_NONE"
},
"GL_DEPTH_COMPONENT16": {
"OnlyFL10Plus": "ANGLE_FORMAT_D16_UNORM_FL10",
"OnlyFL9_3": "ANGLE_FORMAT_D16_UNORM_FL9_3"
},
"GL_DEPTH_COMPONENT24": {
"OnlyFL10Plus": "ANGLE_FORMAT_D24_UNORM_S8_UINT_FL10",
"OnlyFL9_3": "ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3"
},
"GL_DEPTH_COMPONENT32F": {
"OnlyFL10Plus": "ANGLE_FORMAT_D32_FLOAT",
"OnlyFL9_3": "ANGLE_FORMAT_NONE"
},
"GL_DEPTH_COMPONENT32_OES": {
"OnlyFL10Plus": "ANGLE_FORMAT_D24_UNORM_S8_UINT_FL10"
},
"GL_ETC1_RGB8_OES": "ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE",
"GL_ETC1_RGB8_LOSSY_DECODE_ANGLE": "ANGLE_FORMAT_BC1_UNORM",
"GL_LUMINANCE": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_LUMINANCE16F_EXT": "ANGLE_FORMAT_R16G16B16A16_FLOAT",
"GL_LUMINANCE32F_EXT": "ANGLE_FORMAT_R32G32B32A32_FLOAT",
"GL_LUMINANCE8_ALPHA8_EXT": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_LUMINANCE8_EXT": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_LUMINANCE_ALPHA": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_LUMINANCE_ALPHA16F_EXT": "ANGLE_FORMAT_R16G16B16A16_FLOAT",
"GL_LUMINANCE_ALPHA32F_EXT": "ANGLE_FORMAT_R32G32B32A32_FLOAT",
"GL_NONE": "ANGLE_FORMAT_NONE",
"GL_R11F_G11F_B10F": "ANGLE_FORMAT_R11G11B10_FLOAT",
"GL_R16F": "ANGLE_FORMAT_R16_FLOAT",
"GL_R16I": "ANGLE_FORMAT_R16_SINT",
"GL_R16UI": "ANGLE_FORMAT_R16_UINT",
"GL_R32F": "ANGLE_FORMAT_R32_FLOAT",
"GL_R32I": "ANGLE_FORMAT_R32_SINT",
"GL_R32UI": "ANGLE_FORMAT_R32_UINT",
"GL_R8": "ANGLE_FORMAT_R8_UNORM",
"GL_R8I": "ANGLE_FORMAT_R8_SINT",
"GL_R8UI": "ANGLE_FORMAT_R8_UINT",
"GL_R8_SNORM": "ANGLE_FORMAT_R8_SNORM",
"GL_RG16F": "ANGLE_FORMAT_R16G16_FLOAT",
"GL_RG16I": "ANGLE_FORMAT_R16G16_SINT",
"GL_RG16UI": "ANGLE_FORMAT_R16G16_UINT",
"GL_RG32F": "ANGLE_FORMAT_R32G32_FLOAT",
"GL_RG32I": "ANGLE_FORMAT_R32G32_SINT",
"GL_RG32UI": "ANGLE_FORMAT_R32G32_UINT",
"GL_RG8": "ANGLE_FORMAT_R8G8_UNORM",
"GL_RG8I": "ANGLE_FORMAT_R8G8_SINT",
"GL_RG8UI": "ANGLE_FORMAT_R8G8_UINT",
"GL_RG8_SNORM": "ANGLE_FORMAT_R8G8_SNORM",
"GL_RGB": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_RGB10_A2": "ANGLE_FORMAT_R10G10B10A2_UNORM",
"GL_RGB10_A2UI": "ANGLE_FORMAT_R10G10B10A2_UINT",
"GL_RGB16F": "ANGLE_FORMAT_R16G16B16A16_FLOAT",
"GL_RGB16I": "ANGLE_FORMAT_R16G16B16A16_SINT",
"GL_RGB16UI": "ANGLE_FORMAT_R16G16B16A16_UINT",
"GL_RGB32F": "ANGLE_FORMAT_R32G32B32A32_FLOAT",
"GL_RGB32I": "ANGLE_FORMAT_R32G32B32A32_SINT",
"GL_RGB32UI": "ANGLE_FORMAT_R32G32B32A32_UINT",
"GL_RGB565": {
"SupportsFormat<DXGI_FORMAT_B5G6R5_UNORM,false>": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"SupportsFormat<DXGI_FORMAT_B5G6R5_UNORM,true>": "ANGLE_FORMAT_B5G6R5_UNORM"
},
"GL_RGB5_A1": {
"SupportsFormat<DXGI_FORMAT_B5G5R5A1_UNORM,false>": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"SupportsFormat<DXGI_FORMAT_B5G5R5A1_UNORM,true>": "ANGLE_FORMAT_B5G5R5A1_UNORM"
},
"GL_RGB8": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_RGB8I": "ANGLE_FORMAT_R8G8B8A8_SINT",
"GL_RGB8UI": "ANGLE_FORMAT_R8G8B8A8_UINT",
"GL_RGB8_SNORM": "ANGLE_FORMAT_R8G8B8A8_SNORM",
"GL_RGB9_E5": "ANGLE_FORMAT_R9G9B9E5_SHAREDEXP",
"GL_RGBA": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_RGBA16F": "ANGLE_FORMAT_R16G16B16A16_FLOAT",
"GL_RGBA16I": "ANGLE_FORMAT_R16G16B16A16_SINT",
"GL_RGBA16UI": "ANGLE_FORMAT_R16G16B16A16_UINT",
"GL_RGBA32F": "ANGLE_FORMAT_R32G32B32A32_FLOAT",
"GL_RGBA32I": "ANGLE_FORMAT_R32G32B32A32_SINT",
"GL_RGBA32UI": "ANGLE_FORMAT_R32G32B32A32_UINT",
"GL_RGBA4": {
"SupportsFormat<DXGI_FORMAT_B4G4R4A4_UNORM,false>": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"SupportsFormat<DXGI_FORMAT_B4G4R4A4_UNORM,true>": "ANGLE_FORMAT_B4G4R4A4_UNORM"
},
"GL_RGBA8": "ANGLE_FORMAT_R8G8B8A8_UNORM",
"GL_RGBA8I": "ANGLE_FORMAT_R8G8B8A8_SINT",
"GL_RGBA8UI": "ANGLE_FORMAT_R8G8B8A8_UINT",
"GL_RGBA8_SNORM": "ANGLE_FORMAT_R8G8B8A8_SNORM",
"GL_SRGB8": "ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE",
"GL_SRGB8_ALPHA8": "ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB",
"GL_STENCIL_INDEX8": {
"OnlyFL10Plus": "ANGLE_FORMAT_X24_TYPELESS_G8_UINT",
"OnlyFL9_3": "ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3"
}
}
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