blob: a636c5e7773d4186fc58a665b1a4e6c0cf7cc345 [file] [log] [blame]
{
"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": "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": "emulate_alpha_to_coverage",
"category": "Workarounds",
"description": [
"Some GPUs ignore alpha-to-coverage when [[sample_mask]] is written"
]
},
{
"name": "write_helper_sample_mask",
"category": "Workarounds",
"description": [
"Some GPUs produce incorrect derivatives unless [[sample_mask]] is written"
]
},
{
"name": "pre_transform_texture_cube_grad_derivatives",
"category": "Workarounds",
"description": [
"Apply a vendor-specific transformation to explicit cubemap derivatives"
]
},
{
"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"
},
{
"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"
},
{
"name": "always_prefer_staged_texture_uploads",
"category": "Features",
"description": [
"Always prefer to upload texture data via a staging buffer and avoid MTLTexture::replaceRegion."
],
"issue": "http://crbug.com/1380790"
},
{
"name": "disable_staged_initialization_of_packed_texture_formats",
"category": "Features",
"description": [
"Staged GPU upload of some packed texture formats such as RGB9_E5 fail on Intel GPUs."
],
"issue": "http://anglebug.com/8092"
},
{
"name": "compile_metal_shaders",
"category": "Features",
"description": [
"Compiles metal shaders using command line tools and saves to BlobCache. ",
"Requires using --no-sandbox and disabling enableParallelMtlLibraryCompilation."
],
"issue": "http://crbug.com/1423136"
},
{
"name": "load_metal_shaders_from_blob_cache",
"category": "Features",
"description": [
"Loads metal shaders from blob cache. Useful if compile_metal_shaders was used to ",
"generate shaders."
],
"issue": "http://crbug.com/1423136"
},
{
"name": "print_metal_shaders",
"category": "Features",
"description": [
"Prints the source to a shader before it's compiled."
],
"issue": "http://crbug.com/1423136"
},
{
"name": "generate_shareable_shaders",
"category": "Features",
"description": [
"Attempts to generate shaders that are shareable. More specifically, shaders",
" end up with conditionals that are decided at run time via input parameters vs",
" compile time. This results in bigger shaders."
],
"issue": "http://crbug.com/1423136"
},
{
"name": "disable_metal_on_nvidia",
"category": "Features",
"description": [
"NVIDIA GPUs are unsupported due to scarcity of the hardware."
],
"issue": "http://anglebug.com/8170"
},
{
"name": "flush_after_stream_vertex_data",
"category": "Features",
"description": [
"Flush after calls to StreamVertexData to work around driver bugs."
]
},
{
"name": "require_gpu_family_2",
"category": "Features",
"description": [
"Mac GPU Family 2 is required to support all the features of OpenGL ES 2.0"
],
"issue": "http://anglebug.com/7952"
},
{
"name": "require_msl_2_1",
"category": "Features",
"description": [
"MSL 2.1 is required to support all the features of OpenGL ES 2.0"
],
"issue": "http://anglebug.com/8258"
},
{
"name": "rescope_global_variables",
"category": "Features",
"description": [
"Rescope global variables that are only used in one function to be function-local."
],
"issue": "http://anglebug.com/8311"
},
{
"name": "always_resolve_multisample_render_buffers",
"category": "Features",
"description": [
"Always automatically resolve MSAA render buffers to single sampled texture."
],
"issue": "http://crbug.com/1486094"
},
{
"name": "inject_asm_statement_into_loop_bodies",
"category": "Features",
"description": [
"Inject asm(\"\") statements into loop bodies to force all loops to be treated as ",
"having side effects and not optimized out."
],
"issue": "http://crbug.com/1513738"
}
]
}