{ "description": [ "Copyright 2022 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_features.json: Optional features for the Metal renderer." ], "features": [ { "name": "has_base_vertex_instanced_draw", "category": "Features", "description": [ "The renderer supports base vertex instanced draw" ] }, { "name": "has_explicit_mem_barrier", "category": "Features", "description": [ "The renderer supports explicit memory barrier" ] }, { "name": "has_cheap_render_pass", "category": "Features", "description": [ "The renderer can cheaply break a render pass." ] }, { "name": "has_non_uniform_dispatch", "category": "Features", "description": [ "The renderer supports non uniform compute shader dispatch's group size" ] }, { "name": "has_shader_stencil_output", "category": "Features", "description": [ "The renderer supports stencil output from fragment shader" ] }, { "name": "has_texture_swizzle", "category": "Features", "description": [ "The renderer supports texture swizzle" ] }, { "name": "has_depth_auto_resolve", "category": "Features", "description": [ "The renderer supports MSAA depth auto resolve at the end of render pass" ] }, { "name": "has_stencil_auto_resolve", "category": "Features", "description": [ "The renderer supports MSAA stencil auto resolve at the end of render pass" ] }, { "name": "has_events", "category": "Features", "description": [ "The renderer supports MTL(Shared)Event" ] }, { "name": "allow_inline_const_vertex_data", "category": "Features", "description": [ "The renderer supports using inline constant data for small client vertex data" ] }, { "name": "allow_separate_depth_stencil_buffers", "category": "Features", "description": [ "Some Apple platforms such as iOS allows separate depth and stencil buffers, ", "whereas others such as macOS don't" ] }, { "name": "allow_runtime_sampler_compare_mode", "category": "Features", "description": [ "The renderer supports changing sampler's compare mode outside shaders" ] }, { "name": "allow_sampler_compare_gradient", "category": "Features", "description": [ "The renderer supports sample_compare with gradients" ] }, { "name": "allow_sampler_compare_lod", "category": "Features", "description": [ "The renderer supports sample_compare with lod" ] }, { "name": "allow_buffer_read_write", "category": "Features", "description": [ "The renderer supports buffer read and write in the same shader" ] }, { "name": "allow_multisample_store_and_resolve", "category": "Features", "description": [ "The renderer supports MSAA store and resolve in the same pass" ] }, { "name": "allow_gen_multiple_mips_per_pass", "category": "Features", "description": [ "The renderer supports generating multiple mipmaps per pass" ] }, { "name": "force_D24S8_as_unsupported", "category": "Features", "description": [ "Force Depth24Stencil8 format as unsupported." ] }, { "name": "force_buffer_GPU_storage", "category": "Features", "description": [ "On systems that support both buffer' memory allocation on GPU and shared memory (such as ", "macOS), force using GPU memory allocation for buffers everytime or not." ] }, { "name": "force_non_CS_base_mipmap_generation", "category": "Features", "description": [ "Turn this feature on to disallow Compute Shader based mipmap generation. Compute Shader ", "based mipmap generation might cause GPU hang on some older iOS devices." ] }, { "name": "emulate_transform_feedback", "category": "Features", "description": [ "Turn this on to allow transform feedback in Metal using a 2-pass VS for GLES3." ] }, { "name": "rewrite_row_major_matrices", "category": "Features", "description": [ "Rewrite row major matrices in shaders as column major." ] }, { "name": "intel_explicit_bool_cast_workaround", "category": "Workarounds", "description": [ "Insert explicit casts for float/double/unsigned/signed int on macOS 10.15 with Intel ", "driver" ] }, { "name": "intel_disable_fast_math", "category": "Workarounds", "description": [ "Disable fast math in atan and invariance cases when running below macOS 12.0" ] }, { "name": "allow_renderpass_without_attachment", "category": "Features", "description": [ "Allow creation of render passes without any attachments" ] }, { "name": "multisample_color_format_shader_read_workaround", "category": "Workarounds", "description": [ "Add shaderRead usage to some multisampled texture formats" ], "issue": "http://anglebug.com/7049" }, { "name": "copy_IOSurface_to_non_IOSurface_for_read_optimization", "category": "Workarounds", "description": [ "some GPUs are faster to read an IOSurface texture by first copying the texture to a ", "non-IOSurface texture" ], "issue": "http://anglebug.com/7117 http://anglebug.com/7573" }, { "name": "copy_texture_to_buffer_for_read_optimization", "category": "Workarounds", "description": [ "some GPUs are faster to read a texture by first copying the texture to a buffer" ], "issue": "http://anglebug.com/7117" }, { "name": "limit_max_draw_buffers_for_testing", "category": "Features", "description": [ "Used to check the backend works when the device's advertized limit is less than the code's limit" ], "issue": "http://anglebug.com/7280" }, { "name": "limit_max_color_target_bits_for_testing", "category": "Features", "description": [ "Metal iOS has a limit on the number of color target bits per pixel." ], "issue": "http://anglebug.com/7280" }, { "name": "preemptively_start_provoking_vertex_command_buffer", "category": "Features", "description": [ "AMD Metal Drivers appear to have a bug this works around" ], "issue": "http://anglebug.com/7635" }, { "name": "upload_data_to_iosurfaces_with_staging_buffers", "category": "Workarounds", "description": [ "When uploading data to IOSurface-backed textures, use a staging buffer." ], "issue": "http://anglebug.com/7573" }, { "name": "always_use_staged_buffer_updates", "category": "Features", "description": [ "Always update buffers by copying the data to a staging buffer and then blitting it to the actual buffer" ], "issue": "http://anglebug.com/7544" }, { "name": "use_shadow_buffers_when_appropriate", "category": "Features", "description": [ "On some architectures using a shadow buffer can be faster for certain size buffers" ], "issue": "http://anglebug.com/7544" }, { "name": "always_use_managed_storage_mode_for_buffers", "category": "Features", "description": [ "Metal buffers can be managed, shared, or private. Sometimes managed is fastest" ], "issue": "http://anglebug.com/7544" }, { "name": "always_use_shared_storage_mode_for_buffers", "category": "Features", "description": [ "Metal buffers can be managed, shared, or private. Sometimes shared is fastest" ], "issue": "http://anglebug.com/7544" }, { "name": "prefer_cpu_for_buffersubdata", "category": "Features", "description": [ "Makes bufferSubData always update via CPU" ], "issue": "http://anglebug.com/7544" }, { "name": "disable_programmable_blending", "category": "Features", "description": [ "Disable programmable blending in order to test read_write pixel local storage textures" ], "issue": "http://anglebug.com/7279" }, { "name": "disable_r_w_texture_tier2_support", "category": "Features", "description": [ "Disable tier2 read_write textures in order to test tier1 support" ], "issue": "http://anglebug.com/7279" }, { "name": "disable_raster_order_groups", "category": "Features", "description": [ "Disable raster order groups in order to test pixel local storage memory barriers" ], "issue": "http://anglebug.com/7279" } ] }