{
    "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": "avoid_stencil_texture_swizzle",
            "category": "Features",
            "description": [
                "Do not create swizzled views of stencil textures"
            ]
        },
        {
            "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": "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"
        },
        {
            "name": "enable_in_memory_mtl_library_cache",
            "category": "Features",
            "description": [
                "Cache MTLLibrary objects in memory."
            ],
            "issue": "http://crbug.com/1385510"
        },
        {
            "name": "enable_parallel_mtl_library_compilation",
            "category": "Features",
            "description": [
                "Compile MTLLibrary in multiple threads."
            ],
            "issue": "http://crbug.com/1385510"
        }
    ]
}