Added PVRTC compression extension needed for Metal on iOS.

Bug: angleproject:2634
Change-Id: I413f754fe5551b1e248bc2b824b327b92d8c70f9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1849076
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
This commit is contained in:
Le Quyen 2019-10-09 15:19:02 +08:00 коммит произвёл Commit Bot
Родитель ad5f71649e
Коммит 6e65398161
22 изменённых файлов: 514 добавлений и 18 удалений

Просмотреть файл

@ -59,3 +59,4 @@ Thomas Miller
Till Rathmann
Nick Shaforostov
Jaime Bernardo
Le Hoang Quyen

Просмотреть файл

@ -1,14 +1,14 @@
{
"src/libANGLE/renderer/FormatID_autogen.h":
"0e45fa793ccf180d7f608dbe2d9927a5",
"6df4632c2908751635396a073c206da6",
"src/libANGLE/renderer/Format_table_autogen.cpp":
"808c9476e937a1d79d41451c84622541",
"69d5325f5a71af4d7a5017b0a85743a4",
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"src/libANGLE/renderer/angle_format_data.json":
"e39704d451d108335e737c39ad423113",
"b0c39827c36941a283f679345fea6d3e",
"src/libANGLE/renderer/angle_format_map.json":
"7c89f37c637323a34f4ec46ca11a6078",
"bca5e686001f6dd0af306af234a36677",
"src/libANGLE/renderer/gen_angle_format_table.py":
"8e349a643e81a028ebb54bde3756f9f7"
}

Просмотреть файл

@ -6,7 +6,7 @@
"src/libANGLE/renderer/d3d/d3d11/texture_format_data.json":
"d7483ece817e819588f4ca157716dc7b",
"src/libANGLE/renderer/d3d/d3d11/texture_format_map.json":
"511730c698bfc3da18f745d2036c70c7",
"e9dfbd51ff183809f595f8fc5db9c217",
"src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp":
"2e6fef6d2b8bfb0da5a90f5e6aa550b8"
"03d2b85db28de5c94f1e38d2ed4ee385"
}

Просмотреть файл

@ -2,7 +2,7 @@
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"src/libANGLE/renderer/angle_format_map.json":
"7c89f37c637323a34f4ec46ca11a6078",
"bca5e686001f6dd0af306af234a36677",
"src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json":
"24f525b05dc665fbbc8c6d68fb863719",
"src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp":

Просмотреть файл

@ -2,9 +2,9 @@
"src/libANGLE/es3_format_type_combinations.json":
"b44b222c27eea6839c0da3076ee540fc",
"src/libANGLE/format_map_autogen.cpp":
"e59660c3ae6360cb8638fc69583ba7a2",
"4b9927afc6cc47fcea6bfcbcd602b6e5",
"src/libANGLE/format_map_data.json":
"e7985d3132fa396e8d39a5daee29260a",
"2dd1986f49c441ad9a71b82410f57d6e",
"src/libANGLE/gen_format_map.py":
"dbc855d50826670a9e1a4ff2747e7583"
}

Просмотреть файл

@ -2,11 +2,11 @@
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"src/libANGLE/renderer/angle_format_map.json":
"7c89f37c637323a34f4ec46ca11a6078",
"bca5e686001f6dd0af306af234a36677",
"src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"ed6800108a872709e5e53fde2833aa86",
"src/libANGLE/renderer/vulkan/vk_format_map.json":
"ef0c23a6620215cfacfc690e9995ba31",
"src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp":
"ab30905d3d43b2186296f85c69db7e20"
"8363fab619a371c0892f2bebaa480965"
}

Просмотреть файл

@ -662,6 +662,26 @@ static bool DetermineBPTCTextureSupport(const TextureCapsMap &textureCaps)
return GetFormatSupport(textureCaps, requiredFormats, true, true, false, false);
}
// Check for GL_IMG_texture_compression_pvrtc
static bool DeterminePVRTCTextureSupport(const TextureCapsMap &textureCaps)
{
constexpr GLenum requiredFormats[] = {
GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false, false);
}
// Check for GL_EXT_pvrtc_sRGB
static bool DeterminePVRTCsRGBTextureSupport(const TextureCapsMap &textureCaps)
{
constexpr GLenum requiredFormats[] = {
GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT, GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT,
GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT, GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false, false);
}
bool DetermineCompressedTextureETCSupport(const TextureCapsMap &textureCaps)
{
constexpr GLenum requiredFormats[] = {GL_COMPRESSED_R11_EAC,
@ -722,6 +742,8 @@ void Extensions::setTextureExtensionSupport(const TextureCapsMap &textureCaps)
colorBufferFloat = DetermineColorBufferFloatSupport(textureCaps);
textureNorm16 = DetermineTextureNorm16Support(textureCaps);
textureCompressionBPTC = DetermineBPTCTextureSupport(textureCaps);
compressedTexturePVRTC = DeterminePVRTCTextureSupport(textureCaps);
compressedTexturePVRTCsRGB = DeterminePVRTCsRGBTextureSupport(textureCaps);
}
const ExtensionInfoMap &GetExtensionInfoMap()
@ -778,6 +800,8 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_OES_compressed_EAC_RG11_unsigned_texture"] = enableableExtension(&Extensions::compressedEACRG11UnsignedTexture);
map["GL_OES_compressed_EAC_RG11_signed_texture"] = enableableExtension(&Extensions::compressedEACRG11SignedTexture);
map["GL_ANGLE_compressed_texture_etc"] = enableableExtension(&Extensions::compressedTextureETC);
map["GL_IMG_texture_compression_pvrtc"] = enableableExtension(&Extensions::compressedTexturePVRTC);
map["GL_EXT_pvrtc_sRGB"] = enableableExtension(&Extensions::compressedTexturePVRTCsRGB);
map["GL_EXT_sRGB"] = enableableExtension(&Extensions::sRGB);
map["GL_ANGLE_depth_texture"] = esOnlyExtension(&Extensions::depthTextureANGLE);
map["GL_OES_depth_texture"] = esOnlyExtension(&Extensions::depthTextureOES);

Просмотреть файл

@ -241,6 +241,12 @@ struct Extensions
// individual formats required to support this extension are available.
bool compressedTextureETC = false;
// GL_IMG_texture_compression_pvrtc
bool compressedTexturePVRTC = false;
// GL_EXT_pvrtc_sRGB
bool compressedTexturePVRTCsRGB = false;
// GL_EXT_sRGB
// Implies that TextureCaps for GL_SRGB8_ALPHA8 and GL_SRGB8 exist
// TODO: Don't advertise this extension in ES3

Просмотреть файл

@ -62,6 +62,26 @@ GLenum GetSizedFormatInternal(GLenum format, GLenum type)
}
break;
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
default:
break;
}
break;
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
default:
break;
}
break;
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
switch (type)
{
@ -112,6 +132,26 @@ GLenum GetSizedFormatInternal(GLenum format, GLenum type)
}
break;
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
default:
break;
}
break;
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
default:
break;
}
break;
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
switch (type)
{
@ -132,6 +172,26 @@ GLenum GetSizedFormatInternal(GLenum format, GLenum type)
}
break;
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT;
default:
break;
}
break;
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT;
default:
break;
}
break;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
switch (type)
{
@ -162,6 +222,26 @@ GLenum GetSizedFormatInternal(GLenum format, GLenum type)
}
break;
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT;
default:
break;
}
break;
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
switch (type)
{
case GL_UNSIGNED_BYTE:
return GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT;
default:
break;
}
break;
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
switch (type)
{

Просмотреть файл

@ -151,5 +151,29 @@
"GL_DEPTH_STENCIL": {
"GL_UNSIGNED_INT_24_8": "GL_DEPTH24_STENCIL8",
"GL_FLOAT_32_UNSIGNED_INT_24_8_REV": "GL_DEPTH32F_STENCIL8"
},
"GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG"
},
"GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG"
},
"GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"
},
"GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"
},
"GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT"
},
"GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT"
},
"GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT"
},
"GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT": {
"GL_UNSIGNED_BYTE": "GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT"
}
}

Просмотреть файл

@ -392,6 +392,11 @@ GLenum InternalFormat::getReadPixelsType(const Version &version) const
}
}
bool InternalFormat::supportSubImage() const
{
return !CompressedFormatRequiresWholeImage(internalFormat);
}
bool InternalFormat::isRequiredRenderbufferFormat(const Version &version) const
{
// GLES 3.0.5 section 4.4.2.2:
@ -932,6 +937,20 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
AddCompressedFormat(&map, GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, 4, 4, 1, 128, 4, false, RequireExt<&Extensions::textureCompressionBPTC>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, 4, 4, 1, 128, 4, false, RequireExt<&Extensions::textureCompressionBPTC>, AlwaysSupported, NeverSupported, NeverSupported);
// From GL_IMG_texture_compression_pvrtc
// | Internal format | W | H | D | BS |CC| SRGB | Texture supported | Filterable | Texture attachment | Renderbuffer |
AddCompressedFormat(&map, GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 1, 1, 1, 1, 3, false, RequireExt<&Extensions::compressedTexturePVRTC>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, 1, 1, 1, 1, 3, false, RequireExt<&Extensions::compressedTexturePVRTC>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, 1, 1, 1, 1, 4, false, RequireExt<&Extensions::compressedTexturePVRTC>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, 1, 1, 1, 1, 4, false, RequireExt<&Extensions::compressedTexturePVRTC>, AlwaysSupported, NeverSupported, NeverSupported);
// From GL_EXT_pvrtc_sRGB
// | Internal format | W | H | D | BS |CC| SRGB | Texture supported | Filterable | Texture attachment | Renderbuffer |
AddCompressedFormat(&map, GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT, 1, 1, 1, 1, 3, true, RequireExt<&Extensions::compressedTexturePVRTCsRGB>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT, 1, 1, 1, 1, 3, true, RequireExt<&Extensions::compressedTexturePVRTCsRGB>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT, 1, 1, 1, 1, 4, true, RequireExt<&Extensions::compressedTexturePVRTCsRGB>, AlwaysSupported, NeverSupported, NeverSupported);
AddCompressedFormat(&map, GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT, 1, 1, 1, 1, 4, true, RequireExt<&Extensions::compressedTexturePVRTCsRGB>, AlwaysSupported, NeverSupported, NeverSupported);
// For STENCIL_INDEX8 we chose a normalized component type for the following reasons:
// - Multisampled buffer are disallowed for non-normalized integer component types and we want to support it for STENCIL_INDEX8
// - All other stencil formats (all depth-stencil) are either float or normalized
@ -1350,6 +1369,27 @@ GLenum GetUnsizedFormat(GLenum internalFormat)
return internalFormat;
}
bool CompressedFormatRequiresWholeImage(GLenum internalFormat)
{
// List of compressed texture format that require that the sub-image size is equal to texture's
// respective mip level's size
switch (internalFormat)
{
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
return true;
default:
return false;
}
}
const FormatSet &GetAllSizedInternalFormats()
{
static angle::base::NoDestructor<FormatSet> formatSet(BuildAllSizedInternalFormatSet());

Просмотреть файл

@ -120,6 +120,9 @@ struct InternalFormat
GLenum getReadPixelsFormat() const;
GLenum getReadPixelsType(const Version &version) const;
// Support upload a portion of image?
bool supportSubImage() const;
// Return true if the format is a required renderbuffer format in the given version of the core
// spec. Note that it isn't always clear whether all the rules that apply to core required
// renderbuffer formats also apply to additional formats added by extensions. Because of this
@ -205,6 +208,9 @@ const InternalFormat &GetInternalFormatInfo(GLenum internalFormat, GLenum type);
// format is valid.
GLenum GetUnsizedFormat(GLenum internalFormat);
// Return whether the compressed format requires whole image/mip level to be uploaded to texture.
bool CompressedFormatRequiresWholeImage(GLenum internalFormat);
typedef std::set<GLenum> FormatSet;
const FormatSet &GetAllSizedInternalFormats();

Просмотреть файл

@ -120,6 +120,14 @@ enum class FormatID
L32_FLOAT,
L8A8_UNORM,
L8_UNORM,
PVRTC1_RGBA_2BPP_UNORM_BLOCK,
PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK,
PVRTC1_RGBA_4BPP_UNORM_BLOCK,
PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK,
PVRTC1_RGB_2BPP_UNORM_BLOCK,
PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK,
PVRTC1_RGB_4BPP_UNORM_BLOCK,
PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK,
R10G10B10A2_SINT,
R10G10B10A2_SNORM,
R10G10B10A2_SSCALED,
@ -229,7 +237,7 @@ enum class FormatID
X2R10G10B10_USCALED_VERTEX
};
constexpr uint32_t kNumANGLEFormats = 210;
constexpr uint32_t kNumANGLEFormats = 218;
} // namespace angle

Просмотреть файл

@ -127,6 +127,14 @@ const Format gFormatInfoTable[] = {
{ FormatID::L32_FLOAT, GL_LUMINANCE32F_EXT, GL_LUMINANCE32F_EXT, GenerateMip<L32F>, NoCopyFunctions, ReadColor<L32F, GLfloat>, WriteColor<L32F, GLfloat>, GL_FLOAT, 0, 0, 0, 0, 32, 0, 0, 4, std::numeric_limits<GLuint>::max(), false, false, false, gl::VertexAttribType::Float },
{ FormatID::L8A8_UNORM, GL_LUMINANCE8_ALPHA8_EXT, GL_LUMINANCE8_ALPHA8_EXT, GenerateMip<L8A8>, NoCopyFunctions, ReadColor<L8A8, GLfloat>, WriteColor<L8A8, GLfloat>, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 8, 8, 0, 0, 2, std::numeric_limits<GLuint>::max(), false, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::L8_UNORM, GL_LUMINANCE8_EXT, GL_LUMINANCE8_EXT, GenerateMip<L8>, NoCopyFunctions, ReadColor<L8, GLfloat>, WriteColor<L8, GLfloat>, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 8, 0, 0, 1, std::numeric_limits<GLuint>::max(), false, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGBA_2BPP_UNORM_BLOCK, GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK, GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT, GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGBA_4BPP_UNORM_BLOCK, GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK, GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT, GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGB_2BPP_UNORM_BLOCK, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK, GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT, GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGB_4BPP_UNORM_BLOCK, GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK, GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT, GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0, 0, 1, std::numeric_limits<GLuint>::max(), true, false, false, gl::VertexAttribType::InvalidEnum },
{ FormatID::R10G10B10A2_SINT, GL_RGB10_A2_SINT_ANGLEX, GL_RGB10_A2_SINT_ANGLEX, GenerateMip<R10G10B10A2S>, NoCopyFunctions, ReadColor<R10G10B10A2S, GLint>, WriteColor<R10G10B10A2S, GLint>, GL_INT, 10, 10, 10, 2, 0, 0, 0, 4, std::numeric_limits<GLuint>::max(), false, false, false, gl::VertexAttribType::Int2101010 },
{ FormatID::R10G10B10A2_SNORM, GL_RGB10_A2_SNORM_ANGLEX, GL_RGB10_A2_SNORM_ANGLEX, GenerateMip<R10G10B10A2S>, NoCopyFunctions, ReadColor<R10G10B10A2S, GLfloat>, WriteColor<R10G10B10A2S, GLfloat>, GL_SIGNED_NORMALIZED, 10, 10, 10, 2, 0, 0, 0, 4, std::numeric_limits<GLuint>::max(), false, false, false, gl::VertexAttribType::Int2101010 },
{ FormatID::R10G10B10A2_SSCALED, GL_RGB10_A2_SSCALED_ANGLEX, GL_RGB10_A2_SSCALED_ANGLEX, GenerateMip<R10G10B10A2S>, NoCopyFunctions, ReadColor<R10G10B10A2S, GLint>, WriteColor<R10G10B10A2S, GLint>, GL_INT, 10, 10, 10, 2, 0, 0, 0, 4, std::numeric_limits<GLuint>::max(), false, false, true, gl::VertexAttribType::Int2101010 },
@ -334,6 +342,10 @@ FormatID Format::InternalFormatToID(GLenum internalFormat)
return FormatID::ASTC_8x8_UNORM_BLOCK;
case GL_COMPRESSED_RGBA_BPTC_UNORM_EXT:
return FormatID::BPTC_RGBA_UNORM_BLOCK;
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
return FormatID::PVRTC1_RGBA_2BPP_UNORM_BLOCK;
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
return FormatID::PVRTC1_RGBA_4BPP_UNORM_BLOCK;
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
return FormatID::BC1_RGBA_UNORM_BLOCK;
case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
@ -344,6 +356,10 @@ FormatID Format::InternalFormatToID(GLenum internalFormat)
return FormatID::BPTC_RGB_SIGNED_FLOAT_BLOCK;
case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT:
return FormatID::BPTC_RGB_UNSIGNED_FLOAT_BLOCK;
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
return FormatID::PVRTC1_RGB_2BPP_UNORM_BLOCK;
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
return FormatID::PVRTC1_RGB_4BPP_UNORM_BLOCK;
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
return FormatID::BC1_RGB_UNORM_BLOCK;
case GL_COMPRESSED_SIGNED_R11_EAC:
@ -406,12 +422,20 @@ FormatID Format::InternalFormatToID(GLenum internalFormat)
return FormatID::ETC2_R8G8B8A1_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:
return FormatID::BPTC_SRGB_ALPHA_UNORM_BLOCK;
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
return FormatID::PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
return FormatID::PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
return FormatID::BC1_RGBA_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
return FormatID::BC2_RGBA_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
return FormatID::BC3_RGBA_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
return FormatID::PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
return FormatID::PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK;
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
return FormatID::BC1_RGB_UNORM_SRGB_BLOCK;
case GL_DEPTH24_STENCIL8:

Просмотреть файл

@ -248,5 +248,29 @@
},
"ETC2_R8G8B8A8_SRGB_BLOCK": {
"blockPixelBytes": "16"
},
"PVRTC1_RGB_4BPP_UNORM_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGB_2BPP_UNORM_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGBA_4BPP_UNORM_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGBA_2BPP_UNORM_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK": {
"blockPixelBytes": "1"
},
"PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK": {
"blockPixelBytes": "1"
}
}

Просмотреть файл

@ -210,5 +210,13 @@
[ "GL_X2_RGB10_USCALED_ANGLEX", "X2R10G10B10_USCALED_VERTEX" ],
[ "GL_X2_RGB10_SSCALED_ANGLEX", "X2R10G10B10_SSCALED_VERTEX" ],
[ "GL_X2_RGB10_UNORM_ANGLEX", "X2R10G10B10_UNORM_VERTEX" ],
[ "GL_X2_RGB10_SNORM_ANGLEX", "X2R10G10B10_SNORM_VERTEX" ]
[ "GL_X2_RGB10_SNORM_ANGLEX", "X2R10G10B10_SNORM_VERTEX" ],
[ "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG", "PVRTC1_RGB_4BPP_UNORM_BLOCK" ],
[ "GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG", "PVRTC1_RGB_2BPP_UNORM_BLOCK" ],
[ "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG", "PVRTC1_RGBA_4BPP_UNORM_BLOCK" ],
[ "GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG", "PVRTC1_RGBA_2BPP_UNORM_BLOCK" ],
[ "GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT", "PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK" ],
[ "GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT", "PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK" ],
[ "GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT", "PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK" ],
[ "GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT", "PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK" ]
]

Просмотреть файл

@ -94,5 +94,13 @@
"GL_RGB16_SNORM_EXT": "R16G16B16A16_SNORM",
"GL_RGB32F": "R32G32B32A32_FLOAT",
"GL_RGB32I": "R32G32B32A32_SINT",
"GL_RGB32UI": "R32G32B32A32_UINT"
"GL_RGB32UI": "R32G32B32A32_UINT",
"GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG": "NONE",
"GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG": "NONE",
"GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG": "NONE",
"GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG": "NONE",
"GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT": "NONE",
"GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT": "NONE",
"GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT": "NONE",
"GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT": "NONE"
}

Просмотреть файл

@ -658,6 +658,34 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
nullptr);
return info;
}
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
{
static constexpr Format info(GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
{
static constexpr Format info(GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
{
static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
@ -728,6 +756,34 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
nullptr);
return info;
}
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
{
static constexpr Format info(GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
{
static constexpr Format info(GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
{
static constexpr Format info(GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
@ -1190,6 +1246,34 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
nullptr);
return info;
}
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
@ -1232,6 +1316,34 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
nullptr);
return info;
}
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT,
angle::FormatID::NONE,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
GL_NONE,
nullptr);
return info;
}
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_S3TC_DXT1_EXT,

Просмотреть файл

@ -361,6 +361,20 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
InsertFormatMapping(&map, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES, NeverSupported(), NeverSupported(), NeverSupported(), ExtsOnly("GL_OES_texture_compression_astc"), AlwaysSupported(), NeverSupported(), NeverSupported());
InsertFormatMapping(&map, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES, NeverSupported(), NeverSupported(), NeverSupported(), ExtsOnly("GL_OES_texture_compression_astc"), AlwaysSupported(), NeverSupported(), NeverSupported());
// From GL_IMG_texture_compression_pvrtc
// | Format | OpenGL texture support | Filter | Render | OpenGL ES texture support | Filter | OpenGL ES texture attachment support | OpenGL ES renderbuffer support |
InsertFormatMapping(&map, GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), NeverSupported() );
InsertFormatMapping(&map, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), NeverSupported() );
InsertFormatMapping(&map, GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), NeverSupported() );
InsertFormatMapping(&map, GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), ExtsOnly("GL_IMG_texture_compression_pvrtc"), AlwaysSupported(), NeverSupported(), NeverSupported() );
// From GL_EXT_pvrtc_sRGB
// | Format | OpenGL texture support | Filter | Render | OpenGL ES texture support | Filter | OpenGL ES texture attachment support | OpenGL ES renderbuffer support |
InsertFormatMapping(&map, GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT, NeverSupported(), NeverSupported(), NeverSupported(), ExtsOnly("GL_EXT_pvrtc_sRGB"), AlwaysSupported(), NeverSupported(), NeverSupported() );
InsertFormatMapping(&map, GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT, NeverSupported(), NeverSupported(), NeverSupported(), ExtsOnly("GL_EXT_pvrtc_sRGB"), AlwaysSupported(), NeverSupported(), NeverSupported() );
InsertFormatMapping(&map, GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT, NeverSupported(), NeverSupported(), NeverSupported(), ExtsOnly("GL_EXT_pvrtc_sRGB"), AlwaysSupported(), NeverSupported(), NeverSupported() );
InsertFormatMapping(&map, GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT, NeverSupported(), NeverSupported(), NeverSupported(), ExtsOnly("GL_EXT_pvrtc_sRGB"), AlwaysSupported(), NeverSupported(), NeverSupported() );
// clang-format on
return map;

Просмотреть файл

@ -1101,6 +1101,38 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGB_2BPP_UNORM_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGB_4BPP_UNORM_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK:
// This format is not implemented in Vulkan.
break;
case angle::FormatID::R10G10B10A2_SINT:
internalFormat = GL_RGB10_A2_SINT_ANGLEX;
imageFormatID = angle::FormatID::R10G10B10A2_SINT;

Просмотреть файл

@ -894,6 +894,15 @@ bool ValidCompressedSubImageSize(const Context *context,
return false;
}
bool fillsEntireMip =
xoffset == 0 && yoffset == 0 && static_cast<size_t>(width) == textureWidth &&
static_cast<size_t>(height) == textureHeight && static_cast<size_t>(depth) == textureDepth;
if (CompressedFormatRequiresWholeImage(internalFormat))
{
return fillsEntireMip;
}
if (CompressedSubTextureFormatRequiresExactSize(internalFormat))
{
if (xoffset % formatInfo.compressedBlockWidth != 0 ||
@ -905,10 +914,6 @@ bool ValidCompressedSubImageSize(const Context *context,
// Allowed to either have data that is a multiple of block size or is smaller than the block
// size but fills the entire mip
bool fillsEntireMip = xoffset == 0 && yoffset == 0 &&
static_cast<size_t>(width) == textureWidth &&
static_cast<size_t>(height) == textureHeight &&
static_cast<size_t>(depth) == textureDepth;
bool sizeMultipleOfBlockSize = (width % formatInfo.compressedBlockWidth) == 0 &&
(height % formatInfo.compressedBlockHeight) == 0 &&
(depth % formatInfo.compressedBlockDepth) == 0;

Просмотреть файл

@ -727,6 +727,36 @@ bool ValidateES2CopyTexImageParameters(Context *context,
return false;
}
break;
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
if (context->getExtensions().compressedTexturePVRTC)
{
context->validationError(GL_INVALID_OPERATION, kInvalidFormat);
return false;
}
else
{
context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
return false;
}
break;
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
if (context->getExtensions().compressedTexturePVRTCsRGB)
{
context->validationError(GL_INVALID_OPERATION, kInvalidFormat);
return false;
}
else
{
context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
return false;
}
break;
case GL_DEPTH_COMPONENT:
case GL_DEPTH_COMPONENT16:
case GL_DEPTH_COMPONENT32_OES:
@ -1563,6 +1593,36 @@ bool ValidateES2TexImageParametersBase(Context *context,
return false;
}
break;
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
if (context->getExtensions().compressedTexturePVRTC)
{
context->validationError(GL_INVALID_OPERATION, kInvalidFormat);
return false;
}
else
{
context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
return false;
}
break;
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
if (context->getExtensions().compressedTexturePVRTCsRGB)
{
context->validationError(GL_INVALID_OPERATION, kInvalidFormat);
return false;
}
else
{
context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
return false;
}
break;
case GL_DEPTH_COMPONENT:
case GL_DEPTH_STENCIL_OES:
if (!context->getExtensions().depthTextureANGLE &&
@ -1942,6 +2002,26 @@ bool ValidateES2TexStorageParameters(Context *context,
return false;
}
break;
case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
if (!context->getExtensions().compressedTexturePVRTC)
{
context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
return false;
}
break;
case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
if (!context->getExtensions().compressedTexturePVRTCsRGB)
{
context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
return false;
}
break;
case GL_RGBA32F_EXT:
case GL_RGB32F_EXT:
case GL_ALPHA32F_EXT: