Hash :
81ee4d29
Author :
Date :
2019-12-04T17:05:11
Workaround EXT_texture_norm16 for OpenGL ES drivers Implement a workaround for widespread bugs calling glReadPixels with RGBA/UNSIGNED_SHORT against R16/RG16 color attachments. Read back the data using the GL_IMPLEMENTATION_COLOR_READ_FORMAT, and then rearrange the read back pixels to fit the RGBA layout. Also skip RGB16/RGB16_SNORM texture sample test on Nexus 5X/Nexus 6P due to a another driver bug. Bug: chromium:1000354, angleproject:4214, angleproject:4215, angleproject:4245 Change-Id: Iedea6f4136878cac5ad0dec3757c77b73502e1cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1952166 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Shrek Shao <shrekshao@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
//
// 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 <map>
#include <string>
#include <vector>
#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();
// Version that this format became supported without extensions
gl::Version version;
// Extensions that are required if the minimum version is not met
std::vector<std::string> 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<std::vector<std::string>> 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;
GLenum format;
GLenum type;
};
TexImageFormat GetTexImageFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum internalFormat,
GLenum format,
GLenum type);
struct TexSubImageFormat
{
GLenum format;
GLenum type;
};
TexSubImageFormat GetTexSubImageFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum format,
GLenum type);
struct CompressedTexImageFormat
{
GLenum internalFormat;
};
CompressedTexImageFormat GetCompressedTexImageFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum internalFormat);
struct CompressedTexSubImageFormat
{
GLenum format;
};
CompressedTexSubImageFormat GetCompressedSubTexImageFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum format);
struct CopyTexImageImageFormat
{
GLenum internalFormat;
};
CopyTexImageImageFormat GetCopyTexImageImageFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum internalFormat,
GLenum framebufferType);
struct TexStorageFormat
{
GLenum internalFormat;
};
TexStorageFormat GetTexStorageFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum internalFormat);
struct RenderbufferFormat
{
GLenum internalFormat;
};
RenderbufferFormat GetRenderbufferFormat(const FunctionsGL *functions,
const angle::FeaturesGL &features,
GLenum internalFormat);
struct ReadPixelsFormat
{
GLenum format;
GLenum type;
};
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_