// GENERATED FILE - DO NOT EDIT.
// Generated by gen_vk_internal_shaders.py using data from shaders/src/*
//
// 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.
//
// vk_internal_shaders_autogen.h:
//   Pre-generated shader library for the ANGLE Vulkan back-end.

#ifndef LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_
#define LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_

#include "libANGLE/renderer/vulkan/vk_utils.h"

namespace rx
{
namespace vk
{
namespace InternalShader
{
namespace BufferUtils_comp
{
enum flags
{
    kIsAligned = 0x00000001,
    kFlagsMask = 0x00000001,
};
enum Function
{
    kIsClear      = 0x00000000,
    kIsCopy       = 0x00000002,
    kFunctionMask = 0x00000002,
};
enum Format
{
    kIsFloat    = 0x00000000,
    kIsInt      = 0x00000004,
    kIsUint     = 0x00000008,
    kFormatMask = 0x0000000C,
};
}  // namespace BufferUtils_comp

namespace ConvertVertex_comp
{
enum flags
{
    kIsAligned = 0x00000001,
    kFlagsMask = 0x00000001,
};
enum Conversion
{
    kIntToInt       = 0x00000000,
    kUintToUint     = 0x00000002,
    kIntToFloat     = 0x00000004,
    kUintToFloat    = 0x00000006,
    kSnormToFloat   = 0x00000008,
    kUnormToFloat   = 0x0000000A,
    kFixedToFloat   = 0x0000000C,
    kFloatToFloat   = 0x0000000E,
    kConversionMask = 0x0000000E,
};
}  // namespace ConvertVertex_comp

namespace FullScreenQuad_vert
{}  // namespace FullScreenQuad_vert

namespace ImageClear_frag
{}  // namespace ImageClear_frag

namespace ImageCopy_frag
{
enum SrcFormat
{
    kSrcIsFloat    = 0x00000000,
    kSrcIsInt      = 0x00000001,
    kSrcIsUint     = 0x00000002,
    kSrcFormatMask = 0x00000003,
};
enum DestFormat
{
    kDestIsFloat    = 0x00000000,
    kDestIsInt      = 0x00000004,
    kDestIsUint     = 0x00000008,
    kDestFormatMask = 0x0000000C,
};
}  // namespace ImageCopy_frag

}  // namespace InternalShader

class ShaderLibrary final : angle::NonCopyable
{
  public:
    ShaderLibrary();
    ~ShaderLibrary();

    void destroy(VkDevice device);

    angle::Result getBufferUtils_comp(Context *context,
                                      uint32_t shaderFlags,
                                      RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getConvertVertex_comp(Context *context,
                                        uint32_t shaderFlags,
                                        RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getFullScreenQuad_vert(Context *context,
                                         uint32_t shaderFlags,
                                         RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getImageClear_frag(Context *context,
                                     uint32_t shaderFlags,
                                     RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getImageCopy_frag(Context *context,
                                    uint32_t shaderFlags,
                                    RefCounted<ShaderAndSerial> **shaderOut);

  private:
    RefCounted<ShaderAndSerial>
        mBufferUtils_comp_shaders[InternalShader::BufferUtils_comp::kFlagsMask |
                                  InternalShader::BufferUtils_comp::kFunctionMask |
                                  InternalShader::BufferUtils_comp::kFormatMask];
    RefCounted<ShaderAndSerial>
        mConvertVertex_comp_shaders[InternalShader::ConvertVertex_comp::kFlagsMask |
                                    InternalShader::ConvertVertex_comp::kConversionMask];
    RefCounted<ShaderAndSerial> mFullScreenQuad_vert_shaders[1];
    RefCounted<ShaderAndSerial> mImageClear_frag_shaders[1];
    RefCounted<ShaderAndSerial>
        mImageCopy_frag_shaders[InternalShader::ImageCopy_frag::kSrcFormatMask |
                                InternalShader::ImageCopy_frag::kDestFormatMask];
};
}  // namespace vk
}  // namespace rx

#endif  // LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_
