mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-03 14:09:33 +03:00
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: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
This commit is contained in:
committed by
Commit Bot
parent
594e0e1491
commit
85919ef772
@@ -4,9 +4,9 @@
|
||||
"src/libANGLE/renderer/angle_format_map.json":
|
||||
"aa4a0d3463b76858a75787b9cdec8e98",
|
||||
"src/libANGLE/renderer/metal/gen_mtl_format_table.py":
|
||||
"27769e4e9cce3b7af18b69d41351c3ed",
|
||||
"91579339b484425ef81b0e900a5c04ed",
|
||||
"src/libANGLE/renderer/metal/mtl_format_map.json":
|
||||
"b202d7a0349006e2bbd58c603d9cdc28",
|
||||
"b4f515e08814b5a0f148a049139d8392",
|
||||
"src/libANGLE/renderer/metal/mtl_format_table_autogen.mm":
|
||||
"7a0ee6139ca1e7ec8b8b0a7de9180ef7"
|
||||
"6a8cdb5d09a6ba1521fe9dab3b887451"
|
||||
}
|
||||
@@ -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 rx
|
||||
"""
|
||||
@@ -408,6 +423,46 @@ def gen_vertex_map_switch_string(vertex_table):
|
||||
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():
|
||||
data_source_name = 'mtl_format_map.json'
|
||||
# auto_script parameters.
|
||||
@@ -434,12 +489,15 @@ def main():
|
||||
|
||||
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(
|
||||
script_name=sys.argv[0],
|
||||
copyright_year=date.today().year,
|
||||
data_source_name=data_source_name,
|
||||
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:
|
||||
out_file.write(output_cpp)
|
||||
out_file.close()
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
{
|
||||
"description": [
|
||||
"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.",
|
||||
"",
|
||||
"mtl_format_map.json: Format mapping between OpenGL and Metal.",
|
||||
"",
|
||||
"Also see gen_mtl_format_table.py for the code generation step."
|
||||
],
|
||||
"image": {
|
||||
"description": [
|
||||
"- The image's map is a dictionary where the key of each entry is the",
|
||||
"ANGLE format ID, and the value is the Metal format enum. Note some formats",
|
||||
"are missing from the map, these formats are either unsupported or emulated",
|
||||
"on Metal.",
|
||||
"map_mac is Mac specific mapping, similarly map_ios is iOS specific mapping.",
|
||||
"",
|
||||
"- override is emulation of unsupported formats on Metal by converting them to",
|
||||
"supported formats. For example, converting R8G8B8 to R8G8B8A8",
|
||||
"override_mac & override_ios are platform specific emulations.",
|
||||
"",
|
||||
"- d24s8_fallbacks_mac is Mac specific emulation when native Metal device doesn't",
|
||||
"support D24_UNORM_S8_UINT format.",
|
||||
"",
|
||||
"- caps is a table containing native Metal format's specific capabilities such as",
|
||||
"supporting filtering, blending and so on. Unlike the above tables, this table's keys",
|
||||
"are Metal native format enums. This table's source is",
|
||||
"https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf",
|
||||
"Platform specific tables are caps_mac & caps_ios."
|
||||
],
|
||||
"map": {
|
||||
"NONE": "MTLPixelFormatInvalid",
|
||||
"A8_UNORM": "MTLPixelFormatA8Unorm",
|
||||
@@ -144,9 +173,461 @@
|
||||
},
|
||||
"d24s8_fallbacks_mac": {
|
||||
"D24_UNORM_S8_UINT": "D32_FLOAT_S8X24_UINT"
|
||||
},
|
||||
"caps": {
|
||||
"MTLPixelFormatA8Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "false",
|
||||
"blendable": "false",
|
||||
"multisample": "false",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "false"
|
||||
},
|
||||
"MTLPixelFormatR8Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR8Snorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsEitherGPUFamily(2, 1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR16Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR16Snorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG8Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG8Snorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsEitherGPUFamily(2, 1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG16Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG16Snorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA16Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA16Snorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA16Float":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA8Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA8Unorm_sRGB":{
|
||||
"filterable": "true",
|
||||
"writable": "display->supportsIOSGPUFamily(2)",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA8Snorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsEitherGPUFamily(2, 1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatBGRA8Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatBGRA8Unorm_sRGB":{
|
||||
"filterable": "true",
|
||||
"writable": "display->supportsIOSGPUFamily(2)",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR16Float":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG16Float":{
|
||||
"filterable": "true",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR32Float":{
|
||||
"filterable": "display->supportsMacGPUFamily(1)",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatBGR10A2Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "display->supportsEitherGPUFamily(3, 1)",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGB10A2Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "display->supportsEitherGPUFamily(3, 1)",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGB10A2Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "display->supportsEitherGPUFamily(3, 1)",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG11B10Float":{
|
||||
"filterable": "true",
|
||||
"writable": "display->supportsEitherGPUFamily(3, 1)",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGB9E5Float":{
|
||||
"filterable": "true",
|
||||
"writable": "display->supportsIOSGPUFamily(3)",
|
||||
"blendable": "display->supportsIOSGPUFamily(1)",
|
||||
"multisample": "display->supportsIOSGPUFamily(1)",
|
||||
"resolve": "display->supportsIOSGPUFamily(1)",
|
||||
"colorRenderable": "display->supportsIOSGPUFamily(1)"
|
||||
},
|
||||
"MTLPixelFormatR8Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR8Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR16Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR16Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG8Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG8Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR32Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatR32Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG16Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG16Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA8Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA8Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG32Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG32Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA16Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA16Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA32Uint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA32Sint":{
|
||||
"filterable": "false",
|
||||
"writable": "true",
|
||||
"blendable": "false",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRG32Float":{
|
||||
"filterable": "display->supportsMacGPUFamily(1)",
|
||||
"writable": "true",
|
||||
"blendable": "true",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatRGBA32Float":{
|
||||
"filterable": "display->supportsMacGPUFamily(1)",
|
||||
"writable": "true",
|
||||
"blendable": "display->supportsMacGPUFamily(1)",
|
||||
"multisample": "display->supportsMacGPUFamily(1)",
|
||||
"resolve": "display->supportsMacGPUFamily(1)",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatDepth32Float":{
|
||||
"filterable": "display->supportsMacGPUFamily(1)",
|
||||
"writable": "false",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "supportDepthAutoResolve",
|
||||
"colorRenderable": "false",
|
||||
"depthRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatStencil8":{
|
||||
"filterable": "false",
|
||||
"writable": "false",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "false",
|
||||
"colorRenderable": "false",
|
||||
"depthRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatDepth32Float_Stencil8":{
|
||||
"filterable": "display->supportsMacGPUFamily(1)",
|
||||
"writable": "false",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "supportDepthStencilAutoResolve",
|
||||
"colorRenderable": "false",
|
||||
"depthRenderable": "true"
|
||||
}
|
||||
},
|
||||
"caps_mac": {
|
||||
"MTLPixelFormatDepth16Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "false",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "supportDepthAutoResolve",
|
||||
"colorRenderable": "false",
|
||||
"depthRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatDepth24Unorm_Stencil8":{
|
||||
"filterable": "display->supportsMacGPUFamily(1)",
|
||||
"writable": "false",
|
||||
"blendable": "false",
|
||||
"multisample": "true",
|
||||
"resolve": "supportDepthStencilAutoResolve",
|
||||
"colorRenderable": "false",
|
||||
"depthRenderable": "display->supportsMacGPUFamily(1)"
|
||||
}
|
||||
},
|
||||
"caps_ios": {
|
||||
"MTLPixelFormatB5G6R5Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "false",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatABGR4Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "false",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatBGR5A1Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "false",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
},
|
||||
"MTLPixelFormatA1BGR5Unorm":{
|
||||
"filterable": "true",
|
||||
"writable": "false",
|
||||
"blendable": "true",
|
||||
"multisample": "true",
|
||||
"resolve": "true",
|
||||
"colorRenderable": "true"
|
||||
}
|
||||
}
|
||||
},
|
||||
"vertex": {
|
||||
"description": [
|
||||
"- This section contains vertex format mapping between OpenGL and Metal similar to",
|
||||
"image formats above",
|
||||
"- override_tightly_packed is special emulation for those formats whose sizes",
|
||||
"are not multiples of 4 bytes. They will be converted to appropriate 4 bytes aligned",
|
||||
"formats.",
|
||||
"This emulation is useful for the cases in which the stride of a vertex attribute",
|
||||
"is required to be multiples of 4."
|
||||
],
|
||||
"map": {
|
||||
"NONE": "MTLVertexFormatInvalid",
|
||||
"R8_UNORM": "MTLVertexFormatUCharNormalized",
|
||||
|
||||
@@ -2308,5 +2308,268 @@ 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
|
||||
setFormatCaps(MTLPixelFormatA8Unorm, /** filterable*/ true, /** writable*/ false,
|
||||
/** blendable*/ false, /** multisample*/ false, /** resolve*/ false,
|
||||
/** colorRenderable*/ false, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatBGR10A2Unorm, /** filterable*/ true,
|
||||
/** writable*/ display->supportsEitherGPUFamily(3, 1), /** blendable*/ true,
|
||||
/** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatBGRA8Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatBGRA8Unorm_sRGB, /** filterable*/ true,
|
||||
/** writable*/ display->supportsIOSGPUFamily(2), /** blendable*/ true,
|
||||
/** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatDepth32Float, /** filterable*/ display->supportsMacGPUFamily(1),
|
||||
/** writable*/ false, /** blendable*/ false, /** multisample*/ true,
|
||||
/** resolve*/ supportDepthAutoResolve, /** colorRenderable*/ false,
|
||||
/** depthRenderable*/ true);
|
||||
|
||||
setFormatCaps(MTLPixelFormatDepth32Float_Stencil8,
|
||||
/** filterable*/ display->supportsMacGPUFamily(1), /** writable*/ false,
|
||||
/** blendable*/ false, /** multisample*/ true,
|
||||
/** resolve*/ supportDepthStencilAutoResolve, /** colorRenderable*/ false,
|
||||
/** depthRenderable*/ true);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR16Float, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR16Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR16Snorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR16Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR16Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR32Float, /** filterable*/ display->supportsMacGPUFamily(1),
|
||||
/** writable*/ true, /** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR32Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ false, /** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR32Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ false, /** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR8Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR8Snorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsEitherGPUFamily(2, 1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR8Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatR8Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG11B10Float, /** filterable*/ true,
|
||||
/** writable*/ display->supportsEitherGPUFamily(3, 1), /** blendable*/ true,
|
||||
/** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG16Float, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG16Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG16Snorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG16Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG16Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG32Float, /** filterable*/ display->supportsMacGPUFamily(1),
|
||||
/** writable*/ true, /** blendable*/ true,
|
||||
/** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG32Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ false, /** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG32Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ false, /** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG8Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG8Snorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsEitherGPUFamily(2, 1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG8Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRG8Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGB10A2Uint, /** filterable*/ false,
|
||||
/** writable*/ display->supportsEitherGPUFamily(3, 1), /** blendable*/ false,
|
||||
/** multisample*/ true, /** resolve*/ false, /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGB10A2Unorm, /** filterable*/ true,
|
||||
/** writable*/ display->supportsEitherGPUFamily(3, 1), /** blendable*/ true,
|
||||
/** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGB9E5Float, /** filterable*/ true,
|
||||
/** writable*/ display->supportsIOSGPUFamily(3),
|
||||
/** blendable*/ display->supportsIOSGPUFamily(1),
|
||||
/** multisample*/ display->supportsIOSGPUFamily(1),
|
||||
/** resolve*/ display->supportsIOSGPUFamily(1),
|
||||
/** colorRenderable*/ display->supportsIOSGPUFamily(1),
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA16Float, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA16Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA16Snorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA16Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA16Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA32Float, /** filterable*/ display->supportsMacGPUFamily(1),
|
||||
/** writable*/ true, /** blendable*/ display->supportsMacGPUFamily(1),
|
||||
/** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ display->supportsMacGPUFamily(1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA32Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ false, /** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA32Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ display->supportsMacGPUFamily(1),
|
||||
/** resolve*/ false, /** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA8Sint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA8Snorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true,
|
||||
/** resolve*/ display->supportsEitherGPUFamily(2, 1), /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA8Uint, /** filterable*/ false, /** writable*/ true,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA8Unorm, /** filterable*/ true, /** writable*/ true,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatRGBA8Unorm_sRGB, /** filterable*/ true,
|
||||
/** writable*/ display->supportsIOSGPUFamily(2), /** blendable*/ true,
|
||||
/** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true,
|
||||
/** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatStencil8, /** filterable*/ false, /** writable*/ false,
|
||||
/** blendable*/ false, /** multisample*/ true, /** resolve*/ false,
|
||||
/** colorRenderable*/ false, /** depthRenderable*/ true);
|
||||
|
||||
#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
|
||||
setFormatCaps(MTLPixelFormatDepth16Unorm, /** filterable*/ true, /** writable*/ false,
|
||||
/** blendable*/ false, /** multisample*/ true,
|
||||
/** resolve*/ supportDepthAutoResolve, /** colorRenderable*/ false,
|
||||
/** depthRenderable*/ true);
|
||||
|
||||
setFormatCaps(MTLPixelFormatDepth24Unorm_Stencil8,
|
||||
/** filterable*/ display->supportsMacGPUFamily(1), /** writable*/ false,
|
||||
/** blendable*/ false, /** multisample*/ true,
|
||||
/** resolve*/ supportDepthStencilAutoResolve, /** colorRenderable*/ false,
|
||||
/** depthRenderable*/ display->supportsMacGPUFamily(1));
|
||||
|
||||
#elif TARGET_OS_IOS || TARGET_OS_TV // TARGET_OS_OSX || TARGET_OS_MACCATALYST
|
||||
setFormatCaps(MTLPixelFormatA1BGR5Unorm, /** filterable*/ true, /** writable*/ false,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatABGR4Unorm, /** filterable*/ true, /** writable*/ false,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatB5G6R5Unorm, /** filterable*/ true, /** writable*/ false,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
setFormatCaps(MTLPixelFormatBGR5A1Unorm, /** filterable*/ true, /** writable*/ false,
|
||||
/** blendable*/ true, /** multisample*/ true, /** resolve*/ true,
|
||||
/** colorRenderable*/ true, /** depthRenderable*/ false);
|
||||
|
||||
#endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST
|
||||
}
|
||||
|
||||
} // namespace mtl
|
||||
} // namespace rx
|
||||
|
||||
@@ -140,6 +140,7 @@ class FormatTable final : angle::NonCopyable
|
||||
uint32_t getMaxSamples() const { return mMaxSamples; }
|
||||
|
||||
private:
|
||||
void initNativeFormatCapsAutogen(const DisplayMtl *display);
|
||||
void initNativeFormatCaps(const DisplayMtl *display);
|
||||
void setFormatCaps(MTLPixelFormat formatId,
|
||||
bool filterable,
|
||||
|
||||
@@ -262,93 +262,9 @@ void FormatTable::setCompressedFormatCaps(MTLPixelFormat formatId, bool filterab
|
||||
|
||||
void FormatTable::initNativeFormatCaps(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;
|
||||
initNativeFormatCapsAutogen(display);
|
||||
|
||||
// Source: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
|
||||
// clang-format off
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatA8Unorm, true, false, false, false, false, false);
|
||||
setFormatCaps(MTLPixelFormatR8Unorm, true, true, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatR8Snorm, true, true, true, true, display->supportsEitherGPUFamily(2, 1), true);
|
||||
setFormatCaps(MTLPixelFormatR16Unorm, true, true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatR16Snorm, true, true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatRG8Unorm, true, true, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatRG8Snorm, true, true, true, true, display->supportsEitherGPUFamily(2, 1), true);
|
||||
setFormatCaps(MTLPixelFormatRG16Unorm, true, true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatRG16Snorm, true, true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatRGBA16Unorm, true, true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatRGBA16Snorm, true, true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatRGBA16Float, true, true, true, true, true, true);
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatRGBA8Unorm, true, true, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA8Unorm_sRGB, true, display->supportsIOSGPUFamily(2), true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA8Snorm, true, true, true, true, display->supportsEitherGPUFamily(2, 1), true);
|
||||
setFormatCaps(MTLPixelFormatBGRA8Unorm, true, true, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatBGRA8Unorm_sRGB, true, display->supportsIOSGPUFamily(2), true, true, true, true);
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatR16Float, true, true, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatRG16Float, true, true, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatR32Float, display->supportsMacGPUFamily(1), true, true, true, display->supportsMacGPUFamily(1), true);
|
||||
|
||||
#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatB5G6R5Unorm, true, false, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatABGR4Unorm, true, false, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatBGR5A1Unorm, true, false, true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatA1BGR5Unorm, true, false, true, true, true, true);
|
||||
#endif
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatBGR10A2Unorm, true, display->supportsEitherGPUFamily(3, 1), true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatRGB10A2Unorm, true, display->supportsEitherGPUFamily(3, 1), true, true, true, true);
|
||||
setFormatCaps(MTLPixelFormatRGB10A2Uint, false, display->supportsEitherGPUFamily(3, 1), false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRG11B10Float, true, display->supportsEitherGPUFamily(3, 1), true, true, true, true);
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatRGB9E5Float, true, display->supportsIOSGPUFamily(3), display->supportsIOSGPUFamily(1), display->supportsIOSGPUFamily(1), display->supportsIOSGPUFamily(1), display->supportsIOSGPUFamily(1));
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatR8Uint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatR8Sint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatR16Uint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatR16Sint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRG8Uint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRG8Sint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatR32Uint, false, true, false, display->supportsMacGPUFamily(1), false, true);
|
||||
setFormatCaps(MTLPixelFormatR32Sint, false, true, false, display->supportsMacGPUFamily(1), false, true);
|
||||
setFormatCaps(MTLPixelFormatRG16Uint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRG16Sint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA8Uint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA8Sint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRG32Uint, false, true, false, display->supportsMacGPUFamily(1), false, true);
|
||||
setFormatCaps(MTLPixelFormatRG32Sint, false, true, false, display->supportsMacGPUFamily(1), false, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA16Uint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA16Sint, false, true, false, true, false, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA32Uint, false, true, false, display->supportsMacGPUFamily(1), false, true);
|
||||
setFormatCaps(MTLPixelFormatRGBA32Sint, false, true, false, display->supportsMacGPUFamily(1), false, true);
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable |
|
||||
setFormatCaps(MTLPixelFormatRG32Float, display->supportsMacGPUFamily(1), true, true, display->supportsMacGPUFamily(1), display->supportsMacGPUFamily(1), true);
|
||||
setFormatCaps(MTLPixelFormatRGBA32Float, display->supportsMacGPUFamily(1), true, display->supportsMacGPUFamily(1), display->supportsMacGPUFamily(1), display->supportsMacGPUFamily(1), true);
|
||||
|
||||
// | formatId | filterable | writable | blendable | multisample | resolve | colorRenderable | depthRenderable |
|
||||
setFormatCaps(MTLPixelFormatDepth32Float, display->supportsMacGPUFamily(1), false, false, true, supportDepthAutoResolve, false, true);
|
||||
setFormatCaps(MTLPixelFormatStencil8, false, false, false, true, false, false, true);
|
||||
setFormatCaps(MTLPixelFormatDepth32Float_Stencil8, display->supportsMacGPUFamily(1), false, false, true, supportDepthStencilAutoResolve, false, true);
|
||||
#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
|
||||
setFormatCaps(MTLPixelFormatDepth16Unorm, true, false, false, true, supportDepthAutoResolve, false, true);
|
||||
setFormatCaps(MTLPixelFormatDepth24Unorm_Stencil8, display->supportsMacGPUFamily(1), false, false, true, supportDepthStencilAutoResolve, false, display->supportsMacGPUFamily(1));
|
||||
|
||||
setCompressedFormatCaps(MTLPixelFormatBC1_RGBA, true);
|
||||
setCompressedFormatCaps(MTLPixelFormatBC1_RGBA_sRGB, true);
|
||||
setCompressedFormatCaps(MTLPixelFormatBC2_RGBA, true);
|
||||
|
||||
Reference in New Issue
Block a user