// GENERATED FILE - DO NOT EDIT.
// Generated by gen_features.py using data from mtl_features.json.
//
// 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.
//
// FeaturesMtl_autogen.h: Optional features for the Metal renderer.

#ifndef ANGLE_PLATFORM_AUTOGEN_FEATURESMTL_H_
#define ANGLE_PLATFORM_AUTOGEN_FEATURESMTL_H_

#include "platform/Feature.h"

namespace angle
{

struct FeaturesMtl : FeatureSetBase
{
    FeaturesMtl();
    ~FeaturesMtl();

    FeatureInfo hasBaseVertexInstancedDraw = {
        "hasBaseVertexInstancedDraw",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasExplicitMemBarrier = {
        "hasExplicitMemBarrier",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasCheapRenderPass = {
        "hasCheapRenderPass",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasNonUniformDispatch = {
        "hasNonUniformDispatch",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasShaderStencilOutput = {
        "hasShaderStencilOutput",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasTextureSwizzle = {
        "hasTextureSwizzle",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasDepthAutoResolve = {
        "hasDepthAutoResolve",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasStencilAutoResolve = {
        "hasStencilAutoResolve",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo hasEvents = {
        "hasEvents",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowInlineConstVertexData = {
        "allowInlineConstVertexData",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowSeparateDepthStencilBuffers = {
        "allowSeparateDepthStencilBuffers",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowRuntimeSamplerCompareMode = {
        "allowRuntimeSamplerCompareMode",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowSamplerCompareGradient = {
        "allowSamplerCompareGradient",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowBufferReadWrite = {
        "allowBufferReadWrite",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowMultisampleStoreAndResolve = {
        "allowMultisampleStoreAndResolve",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo allowGenMultipleMipsPerPass = {
        "allowGenMultipleMipsPerPass",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo forceD24S8AsUnsupported = {
        "forceD24S8AsUnsupported",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo forceBufferGPUStorage = {
        "forceBufferGPUStorage",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo forceNonCSBaseMipmapGeneration = {
        "forceNonCSBaseMipmapGeneration",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo emulateTransformFeedback = {
        "emulateTransformFeedback",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo intelExplicitBoolCastWorkaround = {
        "intelExplicitBoolCastWorkaround",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo intelDisableFastMath = {
        "intelDisableFastMath",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo allowRenderpassWithoutAttachment = {
        "allowRenderpassWithoutAttachment",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo avoidStencilTextureSwizzle = {
        "avoidStencilTextureSwizzle",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo emulateAlphaToCoverage = {
        "emulateAlphaToCoverage",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo writeHelperSampleMask = {
        "writeHelperSampleMask",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo preTransformTextureCubeGradDerivatives = {
        "preTransformTextureCubeGradDerivatives",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo multisampleColorFormatShaderReadWorkaround = {
        "multisampleColorFormatShaderReadWorkaround",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo copyIOSurfaceToNonIOSurfaceForReadOptimization = {
        "copyIOSurfaceToNonIOSurfaceForReadOptimization",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo copyTextureToBufferForReadOptimization = {
        "copyTextureToBufferForReadOptimization",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo limitMaxDrawBuffersForTesting = {
        "limitMaxDrawBuffersForTesting",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo limitMaxColorTargetBitsForTesting = {
        "limitMaxColorTargetBitsForTesting",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo preemptivelyStartProvokingVertexCommandBuffer = {
        "preemptivelyStartProvokingVertexCommandBuffer",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo uploadDataToIosurfacesWithStagingBuffers = {
        "uploadDataToIosurfacesWithStagingBuffers",
        FeatureCategory::MetalWorkarounds,
        &members,
    };

    FeatureInfo alwaysUseStagedBufferUpdates = {
        "alwaysUseStagedBufferUpdates",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo useShadowBuffersWhenAppropriate = {
        "useShadowBuffersWhenAppropriate",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo alwaysUseManagedStorageModeForBuffers = {
        "alwaysUseManagedStorageModeForBuffers",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo alwaysUseSharedStorageModeForBuffers = {
        "alwaysUseSharedStorageModeForBuffers",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo preferCpuForBuffersubdata = {
        "preferCpuForBuffersubdata",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo disableProgrammableBlending = {
        "disableProgrammableBlending",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo disableRWTextureTier2Support = {
        "disableRWTextureTier2Support",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo disableRasterOrderGroups = {
        "disableRasterOrderGroups",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo enableInMemoryMtlLibraryCache = {
        "enableInMemoryMtlLibraryCache",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo enableParallelMtlLibraryCompilation = {
        "enableParallelMtlLibraryCompilation",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo alwaysPreferStagedTextureUploads = {
        "alwaysPreferStagedTextureUploads",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo disableStagedInitializationOfPackedTextureFormats = {
        "disableStagedInitializationOfPackedTextureFormats",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo generateShareableShaders = {
        "generateShareableShaders",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo disableMetalOnNvidia = {
        "disableMetalOnNvidia",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo flushAfterStreamVertexData = {
        "flushAfterStreamVertexData",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo requireGpuFamily2 = {
        "requireGpuFamily2",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo rescopeGlobalVariables = {
        "rescopeGlobalVariables",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo enableMultisampledRenderToTextureOnNonTilers = {
        "enableMultisampledRenderToTextureOnNonTilers",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo emulateDontCareLoadWithRandomClear = {
        "emulateDontCareLoadWithRandomClear",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo injectAsmStatementIntoLoopBodies = {
        "injectAsmStatementIntoLoopBodies",
        FeatureCategory::MetalFeatures,
        &members,
    };

    FeatureInfo ensureLoopForwardProgress = {
        "ensureLoopForwardProgress",
        FeatureCategory::MetalFeatures,
        &members,
    };

};

inline FeaturesMtl::FeaturesMtl()  = default;
inline FeaturesMtl::~FeaturesMtl() = default;

}  // namespace angle

#endif  // ANGLE_PLATFORM_AUTOGEN_FEATURESMTL_H_
