Commit 85919ef7 by Le Hoang Quyen Committed by Commit Bot

Metal: autogen format caps from json

Bug: angleproject:4940 Bug: angleproject:2634 Change-Id: I1e107e856a50a7eaf685296dd7464af9ad5bcec4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2342522 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 594e0e14
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
"src/libANGLE/renderer/angle_format_map.json": "src/libANGLE/renderer/angle_format_map.json":
"aa4a0d3463b76858a75787b9cdec8e98", "aa4a0d3463b76858a75787b9cdec8e98",
"src/libANGLE/renderer/metal/gen_mtl_format_table.py": "src/libANGLE/renderer/metal/gen_mtl_format_table.py":
"27769e4e9cce3b7af18b69d41351c3ed", "91579339b484425ef81b0e900a5c04ed",
"src/libANGLE/renderer/metal/mtl_format_map.json": "src/libANGLE/renderer/metal/mtl_format_map.json":
"b202d7a0349006e2bbd58c603d9cdc28", "b4f515e08814b5a0f148a049139d8392",
"src/libANGLE/renderer/metal/mtl_format_table_autogen.mm": "src/libANGLE/renderer/metal/mtl_format_table_autogen.mm":
"7a0ee6139ca1e7ec8b8b0a7de9180ef7" "6a8cdb5d09a6ba1521fe9dab3b887451"
} }
\ No newline at end of file
...@@ -69,6 +69,21 @@ void VertexFormat::init(angle::FormatID angleFormatId, bool tightlyPacked) ...@@ -69,6 +69,21 @@ void VertexFormat::init(angle::FormatID angleFormatId, bool tightlyPacked)
}} }}
}} }}
void FormatTable::initNativeFormatCapsAutogen(const DisplayMtl *display)
{{
const angle::FeaturesMtl &featuresMtl = display->getFeatures();
// Skip auto resolve if either hasDepth/StencilAutoResolve or allowMultisampleStoreAndResolve
// feature are disabled.
bool supportDepthAutoResolve = featuresMtl.hasDepthAutoResolve.enabled &&
featuresMtl.allowMultisampleStoreAndResolve.enabled;
bool supportStencilAutoResolve = featuresMtl.hasStencilAutoResolve.enabled &&
featuresMtl.allowMultisampleStoreAndResolve.enabled;
bool supportDepthStencilAutoResolve = supportDepthAutoResolve && supportStencilAutoResolve;
// Source: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
{metal_format_caps}
}}
}} // namespace mtl }} // namespace mtl
}} // namespace rx }} // namespace rx
""" """
...@@ -408,6 +423,46 @@ def gen_vertex_map_switch_string(vertex_table): ...@@ -408,6 +423,46 @@ def gen_vertex_map_switch_string(vertex_table):
return switch_data return switch_data
def gen_mtl_format_caps_init_string(map_image):
caps = map_image['caps']
mac_caps = map_image['caps_mac']
ios_caps = map_image['caps_ios']
caps_init_str = ''
def cap_to_param(caps, key):
return '/** ' + key + '*/ ' + caps.get(key, 'false')
def caps_to_cpp(caps_table):
init_str = ''
for mtl_format in sorted(caps_table.keys()):
caps = caps_table[mtl_format]
filterable = cap_to_param(caps, 'filterable')
writable = cap_to_param(caps, 'writable')
colorRenderable = cap_to_param(caps, 'colorRenderable')
depthRenderable = cap_to_param(caps, 'depthRenderable')
blendable = cap_to_param(caps, 'blendable')
multisample = cap_to_param(caps, 'multisample')
resolve = cap_to_param(caps, 'resolve')
init_str += " setFormatCaps({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7});\n\n".format(
mtl_format, filterable, writable, blendable, multisample, resolve, colorRenderable,
depthRenderable)
return init_str
caps_init_str += caps_to_cpp(caps)
caps_init_str += "#if TARGET_OS_OSX || TARGET_OS_MACCATALYST\n"
caps_init_str += caps_to_cpp(mac_caps)
caps_init_str += "#elif TARGET_OS_IOS || TARGET_OS_TV // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n"
caps_init_str += caps_to_cpp(ios_caps)
caps_init_str += "#endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n"
return caps_init_str
def main(): def main():
data_source_name = 'mtl_format_map.json' data_source_name = 'mtl_format_map.json'
# auto_script parameters. # auto_script parameters.
...@@ -434,12 +489,15 @@ def main(): ...@@ -434,12 +489,15 @@ def main():
vertex_switch_data = gen_vertex_map_switch_string(map_vertex) vertex_switch_data = gen_vertex_map_switch_string(map_vertex)
caps_init_str = gen_mtl_format_caps_init_string(map_image)
output_cpp = template_autogen_inl.format( output_cpp = template_autogen_inl.format(
script_name=sys.argv[0], script_name=sys.argv[0],
copyright_year=date.today().year, copyright_year=date.today().year,
data_source_name=data_source_name, data_source_name=data_source_name,
angle_image_format_switch=image_switch_data, angle_image_format_switch=image_switch_data,
angle_vertex_format_switch=vertex_switch_data) angle_vertex_format_switch=vertex_switch_data,
metal_format_caps=caps_init_str)
with open('mtl_format_table_autogen.mm', 'wt') as out_file: with open('mtl_format_table_autogen.mm', 'wt') as out_file:
out_file.write(output_cpp) out_file.write(output_cpp)
out_file.close() out_file.close()
......
...@@ -140,6 +140,7 @@ class FormatTable final : angle::NonCopyable ...@@ -140,6 +140,7 @@ class FormatTable final : angle::NonCopyable
uint32_t getMaxSamples() const { return mMaxSamples; } uint32_t getMaxSamples() const { return mMaxSamples; }
private: private:
void initNativeFormatCapsAutogen(const DisplayMtl *display);
void initNativeFormatCaps(const DisplayMtl *display); void initNativeFormatCaps(const DisplayMtl *display);
void setFormatCaps(MTLPixelFormat formatId, void setFormatCaps(MTLPixelFormat formatId,
bool filterable, bool filterable,
......
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