// // Copyright 2015 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. // // formatutilsgl.h: Queries for GL image formats and their translations to native // GL formats. #ifndef LIBANGLE_RENDERER_GL_FORMATUTILSGL_H_ #define LIBANGLE_RENDERER_GL_FORMATUTILSGL_H_ #include #include #include #include "angle_gl.h" #include "libANGLE/Version.h" #include "libANGLE/renderer/gl/FunctionsGL.h" namespace angle { struct FeaturesGL; } // namespace angle namespace rx { namespace nativegl { struct SupportRequirement { SupportRequirement(); SupportRequirement(const SupportRequirement &other); SupportRequirement &operator=(const SupportRequirement &other); ~SupportRequirement(); // Version that this format became supported without extensions gl::Version version; // Extensions that are required if the minimum version is not met std::vector versionExtensions; // Sets of extensions that are required to support this format // All the extensions in one of the sets have to be available for a format to be supported std::vector> requiredExtensions; }; struct InternalFormat { InternalFormat(); InternalFormat(const InternalFormat &other); ~InternalFormat(); SupportRequirement texture; SupportRequirement filter; // Texture created with InternalFormat can be used in glFramebufferTexture2D SupportRequirement textureAttachment; // Renderbuffer created with InternalFormat can be used in glFramebufferRenderbuffer SupportRequirement renderbuffer; }; const InternalFormat &GetInternalFormatInfo(GLenum internalFormat, StandardGL standard); struct TexImageFormat { GLenum internalFormat = GL_NONE; GLenum format = GL_NONE; GLenum type = GL_NONE; }; TexImageFormat GetTexImageFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum internalFormat, GLenum format, GLenum type); struct TexSubImageFormat { GLenum format = GL_NONE; GLenum type = GL_NONE; }; TexSubImageFormat GetTexSubImageFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum format, GLenum type); struct CompressedTexImageFormat { GLenum internalFormat = GL_NONE; }; CompressedTexImageFormat GetCompressedTexImageFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum internalFormat); struct CompressedTexSubImageFormat { GLenum format = GL_NONE; }; CompressedTexSubImageFormat GetCompressedSubTexImageFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum format); struct CopyTexImageImageFormat { GLenum internalFormat = GL_NONE; }; CopyTexImageImageFormat GetCopyTexImageImageFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum internalFormat, GLenum framebufferType); struct TexStorageFormat { GLenum internalFormat = GL_NONE; }; TexStorageFormat GetTexStorageFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum internalFormat); struct RenderbufferFormat { GLenum internalFormat = GL_NONE; }; RenderbufferFormat GetRenderbufferFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum internalFormat); struct ReadPixelsFormat { GLenum format = GL_NONE; GLenum type = GL_NONE; }; ReadPixelsFormat GetReadPixelsFormat(const FunctionsGL *functions, const angle::FeaturesGL &features, GLenum readAttachmentFormat, GLenum format, GLenum type); } // namespace nativegl } // namespace rx #endif // LIBANGLE_RENDERER_GL_FORMATUTILSGL_H_