1 // 2 // Copyright 2015 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // formatutilsgl.h: Queries for GL image formats and their translations to native 8 // GL formats. 9 10 #ifndef LIBANGLE_RENDERER_GL_FORMATUTILSGL_H_ 11 #define LIBANGLE_RENDERER_GL_FORMATUTILSGL_H_ 12 13 #include <map> 14 #include <string> 15 #include <vector> 16 17 #include "angle_gl.h" 18 #include "libANGLE/Version.h" 19 #include "libANGLE/renderer/gl/FunctionsGL.h" 20 21 namespace angle 22 { 23 struct FeaturesGL; 24 } // namespace angle 25 26 namespace rx 27 { 28 29 namespace nativegl 30 { 31 32 struct SupportRequirement 33 { 34 SupportRequirement(); 35 SupportRequirement(const SupportRequirement &other); 36 SupportRequirement &operator=(const SupportRequirement &other); 37 38 ~SupportRequirement(); 39 40 // Version that this format became supported without extensions 41 gl::Version version; 42 43 // Extensions that are required if the minimum version is not met 44 std::vector<std::string> versionExtensions; 45 46 // Sets of extensions that are required to support this format 47 // All the extensions in one of the sets have to be available for a format to be supported 48 std::vector<std::vector<std::string>> requiredExtensions; 49 }; 50 51 struct InternalFormat 52 { 53 InternalFormat(); 54 InternalFormat(const InternalFormat &other); 55 ~InternalFormat(); 56 57 SupportRequirement texture; 58 SupportRequirement filter; 59 // Texture created with InternalFormat can be used in glFramebufferTexture2D 60 SupportRequirement textureAttachment; 61 // Renderbuffer created with InternalFormat can be used in glFramebufferRenderbuffer 62 SupportRequirement renderbuffer; 63 }; 64 const InternalFormat &GetInternalFormatInfo(GLenum internalFormat, StandardGL standard); 65 66 struct TexImageFormat 67 { 68 GLenum internalFormat = GL_NONE; 69 GLenum format = GL_NONE; 70 GLenum type = GL_NONE; 71 }; 72 TexImageFormat GetTexImageFormat(const FunctionsGL *functions, 73 const angle::FeaturesGL &features, 74 GLenum internalFormat, 75 GLenum format, 76 GLenum type); 77 78 struct TexSubImageFormat 79 { 80 GLenum format = GL_NONE; 81 GLenum type = GL_NONE; 82 }; 83 TexSubImageFormat GetTexSubImageFormat(const FunctionsGL *functions, 84 const angle::FeaturesGL &features, 85 GLenum format, 86 GLenum type); 87 88 struct CompressedTexImageFormat 89 { 90 GLenum internalFormat = GL_NONE; 91 }; 92 CompressedTexImageFormat GetCompressedTexImageFormat(const FunctionsGL *functions, 93 const angle::FeaturesGL &features, 94 GLenum internalFormat); 95 96 struct CompressedTexSubImageFormat 97 { 98 GLenum format = GL_NONE; 99 }; 100 CompressedTexSubImageFormat GetCompressedSubTexImageFormat(const FunctionsGL *functions, 101 const angle::FeaturesGL &features, 102 GLenum format); 103 104 struct CopyTexImageImageFormat 105 { 106 GLenum internalFormat = GL_NONE; 107 }; 108 CopyTexImageImageFormat GetCopyTexImageImageFormat(const FunctionsGL *functions, 109 const angle::FeaturesGL &features, 110 GLenum internalFormat, 111 GLenum framebufferType); 112 113 struct TexStorageFormat 114 { 115 GLenum internalFormat = GL_NONE; 116 }; 117 TexStorageFormat GetTexStorageFormat(const FunctionsGL *functions, 118 const angle::FeaturesGL &features, 119 GLenum internalFormat); 120 121 struct RenderbufferFormat 122 { 123 GLenum internalFormat = GL_NONE; 124 }; 125 RenderbufferFormat GetRenderbufferFormat(const FunctionsGL *functions, 126 const angle::FeaturesGL &features, 127 GLenum internalFormat); 128 129 struct ReadPixelsFormat 130 { 131 GLenum format = GL_NONE; 132 GLenum type = GL_NONE; 133 }; 134 ReadPixelsFormat GetReadPixelsFormat(const FunctionsGL *functions, 135 const angle::FeaturesGL &features, 136 GLenum readAttachmentFormat, 137 GLenum format, 138 GLenum type); 139 } // namespace nativegl 140 141 } // namespace rx 142 143 #endif // LIBANGLE_RENDERER_GL_FORMATUTILSGL_H_ 144