// 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 BlitResolve_frag
{
enum flags
{
    kSrcIsArray = 0x00000001,
    kIsResolve  = 0x00000002,
};
enum Blit
{
    kBlitColorFloat   = 0x00000000,
    kBlitColorInt     = 0x00000004,
    kBlitColorUint    = 0x00000008,
    kBlitDepth        = 0x0000000C,
    kBlitStencil      = 0x00000010,
    kBlitDepthStencil = 0x00000014,
};
constexpr size_t kArrayLen = 0x00000018;
}  // namespace BlitResolve_frag

namespace BlitResolveStencilNoExport_comp
{
enum flags
{
    kSrcIsArray = 0x00000001,
    kIsResolve  = 0x00000002,
};
constexpr size_t kArrayLen = 0x00000004;
}  // namespace BlitResolveStencilNoExport_comp

namespace BufferUtils_comp
{
enum flags
{
    kIsAligned = 0x00000001,
};
enum Function
{
    kIsClear = 0x00000000,
    kIsCopy  = 0x00000002,
};
enum Format
{
    kIsFloat = 0x00000000,
    kIsSint  = 0x00000004,
    kIsUint  = 0x00000008,
};
constexpr size_t kArrayLen = 0x0000000C;
}  // namespace BufferUtils_comp

namespace ConvertIndex_comp
{
enum flags
{
    kIsPrimitiveRestartEnabled = 0x00000001,
};
constexpr size_t kArrayLen = 0x00000002;
}  // namespace ConvertIndex_comp

namespace ConvertVertex_comp
{
enum flags
{
    kIsAligned = 0x00000001,
};
enum Conversion
{
    kSintToSint          = 0x00000000,
    kUintToUint          = 0x00000002,
    kSintToFloat         = 0x00000004,
    kUintToFloat         = 0x00000006,
    kSnormToFloat        = 0x00000008,
    kUnormToFloat        = 0x0000000A,
    kFixedToFloat        = 0x0000000C,
    kFloatToFloat        = 0x0000000E,
    kA2BGR10SintToSint   = 0x00000010,
    kA2BGR10UintToUint   = 0x00000012,
    kA2BGR10SintToFloat  = 0x00000014,
    kA2BGR10UintToFloat  = 0x00000016,
    kA2BGR10SnormToFloat = 0x00000018,
};
constexpr size_t kArrayLen = 0x0000001A;
}  // namespace ConvertVertex_comp

namespace FullScreenQuad_vert
{
constexpr size_t kArrayLen = 0x00000001;
}  // namespace FullScreenQuad_vert

namespace ImageClear_frag
{
enum AttachmentIndex
{
    kAttachment0 = 0x00000000,
    kAttachment1 = 0x00000001,
    kAttachment2 = 0x00000002,
    kAttachment3 = 0x00000003,
    kAttachment4 = 0x00000004,
    kAttachment5 = 0x00000005,
    kAttachment6 = 0x00000006,
    kAttachment7 = 0x00000007,
};
enum Format
{
    kIsFloat = 0x00000000,
    kIsSint  = 0x00000008,
    kIsUint  = 0x00000010,
};
constexpr size_t kArrayLen = 0x00000018;
}  // namespace ImageClear_frag

namespace ImageCopy_frag
{
enum flags
{
    kSrcIsArray = 0x00000001,
};
enum SrcFormat
{
    kSrcIsFloat = 0x00000000,
    kSrcIsSint  = 0x00000002,
    kSrcIsUint  = 0x00000004,
};
enum DestFormat
{
    kDestIsFloat = 0x00000000,
    kDestIsSint  = 0x00000008,
    kDestIsUint  = 0x00000010,
};
constexpr size_t kArrayLen = 0x00000016;
}  // namespace ImageCopy_frag

}  // namespace InternalShader

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

    void destroy(VkDevice device);

    angle::Result getBlitResolve_frag(Context *context,
                                      uint32_t shaderFlags,
                                      RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getBlitResolveStencilNoExport_comp(Context *context,
                                                     uint32_t shaderFlags,
                                                     RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getBufferUtils_comp(Context *context,
                                      uint32_t shaderFlags,
                                      RefCounted<ShaderAndSerial> **shaderOut);
    angle::Result getConvertIndex_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>
        mBlitResolve_frag_shaders[InternalShader::BlitResolve_frag::kArrayLen];
    RefCounted<ShaderAndSerial> mBlitResolveStencilNoExport_comp_shaders
        [InternalShader::BlitResolveStencilNoExport_comp::kArrayLen];
    RefCounted<ShaderAndSerial>
        mBufferUtils_comp_shaders[InternalShader::BufferUtils_comp::kArrayLen];
    RefCounted<ShaderAndSerial>
        mConvertIndex_comp_shaders[InternalShader::ConvertIndex_comp::kArrayLen];
    RefCounted<ShaderAndSerial>
        mConvertVertex_comp_shaders[InternalShader::ConvertVertex_comp::kArrayLen];
    RefCounted<ShaderAndSerial>
        mFullScreenQuad_vert_shaders[InternalShader::FullScreenQuad_vert::kArrayLen];
    RefCounted<ShaderAndSerial>
        mImageClear_frag_shaders[InternalShader::ImageClear_frag::kArrayLen];
    RefCounted<ShaderAndSerial> mImageCopy_frag_shaders[InternalShader::ImageCopy_frag::kArrayLen];
};
}  // namespace vk
}  // namespace rx

#endif  // LIBANGLE_RENDERER_VULKAN_VK_INTERNAL_SHADERS_AUTOGEN_H_
