// Copyright 2021 The Dawn Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "dawn_wire/SupportedFeatures.h"

namespace dawn_wire {

    // Note: Upon updating this list, please also update serialization/deserialization
    // of limit structs on Adapter/Device initialization.
    bool IsFeatureSupported(WGPUFeatureName feature) {
        switch (feature) {
            case WGPUFeatureName_Undefined:
            case WGPUFeatureName_Force32:
                return false;
            case WGPUFeatureName_Depth24UnormStencil8:
            case WGPUFeatureName_Depth32FloatStencil8:
            case WGPUFeatureName_TimestampQuery:
            case WGPUFeatureName_PipelineStatisticsQuery:
            case WGPUFeatureName_TextureCompressionBC:
            case WGPUFeatureName_TextureCompressionETC2:
            case WGPUFeatureName_TextureCompressionASTC:
            case WGPUFeatureName_IndirectFirstInstance:
            case WGPUFeatureName_DepthClamping:
            case WGPUFeatureName_DawnShaderFloat16:
            case WGPUFeatureName_DawnInternalUsages:
            case WGPUFeatureName_DawnMultiPlanarFormats:
                return true;
        }

        // Catch-all, for unsupported features.
        // "default:" is not used so we get compiler errors for
        // newly added, unhandled features, but still catch completely
        // unknown enums.
        return false;
    }

}  // namespace dawn_wire
