Path: blob/main_old/include/platform/FeaturesMtl.h
1693 views
//1// Copyright 2019 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//5// FeaturesMtl.h: Optional features for the Metal renderer.6//78#ifndef ANGLE_PLATFORM_FEATURESMTL_H_9#define ANGLE_PLATFORM_FEATURESMTL_H_1011#include "platform/Feature.h"1213namespace angle14{1516struct FeaturesMtl : FeatureSetBase17{18// BaseVertex/Instanced draw support:19Feature hasBaseVertexInstancedDraw = {20"has_base_vertex_instanced_draw", FeatureCategory::MetalFeatures,21"The renderer supports base vertex instanced draw", &members};2223// Support depth texture filtering24Feature hasDepthTextureFiltering = {25"has_depth_texture_filtering", FeatureCategory::MetalFeatures,26"The renderer supports depth texture's filtering other than nearest", &members};2728// Support explicit memory barrier29Feature hasExplicitMemBarrier = {"has_explicit_mem_barrier_mtl", FeatureCategory::MetalFeatures,30"The renderer supports explicit memory barrier", &members};3132// Some renderer can break render pass cheaply, i.e. desktop class GPUs.33Feature hasCheapRenderPass = {"has_cheap_render_pass_mtl", FeatureCategory::MetalFeatures,34"The renderer can cheaply break a render pass.", &members};3536// Non-uniform compute shader dispatch support, i.e. Group size is not necessarily to be fixed:37Feature hasNonUniformDispatch = {38"has_non_uniform_dispatch", FeatureCategory::MetalFeatures,39"The renderer supports non uniform compute shader dispatch's group size", &members};4041// fragment stencil output support42Feature hasStencilOutput = {"has_shader_stencil_output", FeatureCategory::MetalFeatures,43"The renderer supports stencil output from fragment shader",44&members};4546// Texture swizzle support:47Feature hasTextureSwizzle = {"has_texture_swizzle", FeatureCategory::MetalFeatures,48"The renderer supports texture swizzle", &members};4950Feature hasDepthAutoResolve = {51"has_msaa_depth_auto_resolve", FeatureCategory::MetalFeatures,52"The renderer supports MSAA depth auto resolve at the end of render pass", &members};5354Feature hasStencilAutoResolve = {55"has_msaa_stencil_auto_resolve", FeatureCategory::MetalFeatures,56"The renderer supports MSAA stencil auto resolve at the end of render pass", &members};5758Feature hasEvents = {"has_mtl_events", FeatureCategory::MetalFeatures,59"The renderer supports MTL(Shared)Event", &members};6061Feature allowInlineConstVertexData = {62"allow_inline_const_vertex_data", FeatureCategory::MetalFeatures,63"The renderer supports using inline constant data for small client vertex data", &members};6465// On macos, separate depth & stencil buffers are not supproted. However, on iOS devices,66// they are supproted:67Feature allowSeparatedDepthStencilBuffers = {68"allow_separate_depth_stencil_buffers", FeatureCategory::MetalFeatures,69"Some Apple platforms such as iOS allows separate depth & stencil buffers, "70"whereas others such as macOS don't",71&members};7273Feature allowRuntimeSamplerCompareMode = {74"allow_runtime_sampler_compare_mode", FeatureCategory::MetalFeatures,75"The renderer supports changing sampler's compare mode outside shaders", &members};7677Feature allowSamplerCompareGradient = {78"allow_sampler_compare_gradient", FeatureCategory::MetalFeatures,79"The renderer supports sample_compare with gradients", &members};8081Feature allowSamplerCompareLod = {"allow_sampler_compare_lod", FeatureCategory::MetalFeatures,82"The renderer supports sample_compare with lod", &members};8384Feature allowBufferReadWrite = {"allow_buffer_read_write", FeatureCategory::MetalFeatures,85"The renderer supports buffer read & write in the same shader",86&members};8788Feature allowMultisampleStoreAndResolve = {89"allow_msaa_store_and_resolve", FeatureCategory::MetalFeatures,90"The renderer supports MSAA store and resolve in the same pass", &members};9192Feature allowGenMultipleMipsPerPass = {93"gen_multiple_mips_per_pass", FeatureCategory::MetalFeatures,94"The renderer supports generating multiple mipmaps per pass", &members};9596Feature forceD24S8AsUnsupported = {"force_d24s8_as_unsupported", FeatureCategory::MetalFeatures,97"Force Depth24Stencil8 format as unsupported.", &members};9899Feature forceBufferGPUStorage = {100"force_buffer_gpu_storage", FeatureCategory::MetalFeatures,101"On systems that support both buffer' memory allocation on GPU and shared memory (such as "102"macOS), force using GPU memory allocation for buffers everytime or not.",103&members};104105// Whether SPIR-V should be generated directly instead of through glslang. Transitory feature106// until the work is complete.107Feature directSPIRVGeneration = {"directSPIRVGeneration", FeatureCategory::MetalFeatures,108"Direct translation to SPIR-V.", &members,109"http://anglebug.com/4889"};110111// Generate Metal directly instead of generating SPIR-V and then using SPIR-V Cross. Transitory112// feature until the work is complete.113Feature directMetalGeneration = {"directMetalGeneration", FeatureCategory::MetalFeatures,114"Direct translation to Metal.", &members,115"http://anglebug.com/5505"};116117Feature forceNonCSBaseMipmapGeneration = {118"force_non_cs_mipmap_gen", FeatureCategory::MetalFeatures,119"Turn this feature on to disallow Compute Shader based mipmap generation. Compute Shader "120"based mipmap generation might cause GPU hang on some older iOS devices.",121&members};122123Feature emulateTransformFeedback = {124"emulate_transform_feedback", FeatureCategory::MetalFeatures,125"Turn this on to allow transform feedback in Metal using a 2-pass VS for GLES3.", &members};126127// Rewrite row-major matrices as column-major128Feature rewriteRowMajorMatrices = {"rewrite_row_major_matrices", FeatureCategory::MetalFeatures,129"Rewrite row major matrices in shaders as column major.",130&members};131};132133} // namespace angle134135#endif // ANGLE_PLATFORM_FEATURESMTL_H_136137138