diff options
Diffstat (limited to 'gfx/angle/checkout/include/platform/FeaturesMtl.h')
-rw-r--r-- | gfx/angle/checkout/include/platform/FeaturesMtl.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/gfx/angle/checkout/include/platform/FeaturesMtl.h b/gfx/angle/checkout/include/platform/FeaturesMtl.h new file mode 100644 index 0000000000..fe5e8abdf0 --- /dev/null +++ b/gfx/angle/checkout/include/platform/FeaturesMtl.h @@ -0,0 +1,90 @@ +// +// 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. +// +// FeaturesMtl.h: Optional features for the Metal renderer. +// + +#ifndef ANGLE_PLATFORM_FEATURESMTL_H_ +#define ANGLE_PLATFORM_FEATURESMTL_H_ + +#include "platform/Feature.h" + +namespace angle +{ + +struct FeaturesMtl : FeatureSetBase +{ + // BaseVertex/Instanced draw support: + Feature hasBaseVertexInstancedDraw = { + "has_base_vertex_instanced_draw", FeatureCategory::MetalFeatures, + "The renderer supports base vertex instanced draw", &members}; + + // Support depth texture filtering + Feature hasDepthTextureFiltering = { + "has_depth_texture_filtering", FeatureCategory::MetalFeatures, + "The renderer supports depth texture's filtering other than nearest", &members}; + + // Support explicit memory barrier + Feature hasExplicitMemBarrier = {"has_explicit_mem_barrier_mtl", FeatureCategory::MetalFeatures, + "The renderer supports explicit memory barrier", &members}; + + // Some renderer can break render pass cheaply, i.e. desktop class GPUs. + Feature hasCheapRenderPass = {"has_cheap_render_pass_mtl", FeatureCategory::MetalFeatures, + "The renderer can cheaply break a render pass.", &members}; + + // Non-uniform compute shader dispatch support, i.e. Group size is not necessarily to be fixed: + Feature hasNonUniformDispatch = { + "has_non_uniform_dispatch", FeatureCategory::MetalFeatures, + "The renderer supports non uniform compute shader dispatch's group size", &members}; + + // fragment stencil output support + Feature hasStencilOutput = {"has_shader_stencil_output", FeatureCategory::MetalFeatures, + "The renderer supports stencil output from fragment shader", + &members}; + + // Texture swizzle support: + Feature hasTextureSwizzle = {"has_texture_swizzle", FeatureCategory::MetalFeatures, + "The renderer supports texture swizzle", &members}; + + Feature hasDepthAutoResolve = { + "has_msaa_depth_auto_resolve", FeatureCategory::MetalFeatures, + "The renderer supports MSAA depth auto resolve at the end of render pass", &members}; + + Feature hasStencilAutoResolve = { + "has_msaa_stencil_auto_resolve", FeatureCategory::MetalFeatures, + "The renderer supports MSAA stencil auto resolve at the end of render pass", &members}; + + Feature hasEvents = {"has_mtl_events", FeatureCategory::MetalFeatures, + "The renderer supports MTL(Shared)Event", &members}; + + // On macos, separate depth & stencil buffers are not supproted. However, on iOS devices, + // they are supproted: + Feature allowSeparatedDepthStencilBuffers = { + "allow_separate_depth_stencil_buffers", FeatureCategory::MetalFeatures, + "Some Apple platforms such as iOS allows separate depth & stencil buffers, " + "whereas others such as macOS don't", + &members}; + + Feature allowMultisampleStoreAndResolve = { + "allow_msaa_store_and_resolve", FeatureCategory::MetalFeatures, + "The renderer supports MSAA store and resolve in the same pass", &members}; + + Feature allowGenMultipleMipsPerPass = { + "gen_multiple_mips_per_pass", FeatureCategory::MetalFeatures, + "The renderer supports generating multiple mipmaps per pass", &members}; + + Feature forceBufferGPUStorage = { + "force_buffer_gpu_storage_mtl", FeatureCategory::MetalFeatures, + "On systems that support both buffer's memory allocation on GPU and shared memory (such as " + "macOS), force using GPU memory allocation for buffers.", + &members}; + + Feature forceD24S8AsUnsupported = {"force_d24s8_as_unsupported", FeatureCategory::MetalFeatures, + "Force Depth24Stencil8 format as unsupported.", &members}; +}; + +} // namespace angle + +#endif // ANGLE_PLATFORM_FEATURESMTL_H_ |