// Copyright 2018 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.

#ifndef DAWNNATIVE_DAWNPLATFORM_H_
#define DAWNNATIVE_DAWNPLATFORM_H_

// Use webgpu_cpp to have the enum and bitfield definitions
#include <dawn/webgpu_cpp.h>

#include <dawn_native/dawn_platform_autogen.h>

namespace dawn_native {
    // Extra buffer usages
    // Add an extra buffer usage and an extra binding type for binding the buffers with QueryResolve
    // usage as storage buffer in the internal pipeline.
    static constexpr wgpu::BufferUsage kInternalStorageBuffer =
        static_cast<wgpu::BufferUsage>(0x40000000);

    // Add an extra buffer usage (readonly storage buffer usage) for render pass resource tracking
    static constexpr wgpu::BufferUsage kReadOnlyStorageBuffer =
        static_cast<wgpu::BufferUsage>(0x80000000);

    // Extra texture usages
    // Add an extra texture usage (readonly render attachment usage) for render pass resource
    // tracking
    static constexpr wgpu::TextureUsage kReadOnlyRenderAttachment =
        static_cast<wgpu::TextureUsage>(0x40000000);

    // Internal usage to help tracking when a subresource is used as render attachment usage
    // more than once in a render pass.
    static constexpr wgpu::TextureUsage kAgainAsRenderAttachment =
        static_cast<wgpu::TextureUsage>(0x80000001);

    // Add an extra texture usage for textures that will be presented, for use in backends
    // that needs to transition to present usage.
    // This currently aliases wgpu::TextureUsage::Present, we would assign it
    // some bit when wgpu::TextureUsage::Present is removed.
    static constexpr wgpu::TextureUsage kPresentTextureUsage = wgpu::TextureUsage::Present;

    static constexpr wgpu::BufferBindingType kInternalStorageBufferBinding =
        static_cast<wgpu::BufferBindingType>(0xFFFFFFFF);
}  // namespace dawn_native

#endif  // DAWNNATIVE_DAWNPLATFORM_H_
