Commit 2a2ea235 authored by bajones's avatar bajones Committed by Commit bot

Enabled EXT_sRGB WebGL extension support in the command buffer.

BUG=386048

Review URL: https://codereview.chromium.org/638143003

Cr-Commit-Position: refs/heads/master@{#299371}
parent 193a17dd
...@@ -232,6 +232,10 @@ int GLES2Util::GLGetNumValuesReturned(int id) const { ...@@ -232,6 +232,10 @@ int GLES2Util::GLGetNumValuesReturned(int id) const {
// GL_EXT_multisampled_render_to_texture // GL_EXT_multisampled_render_to_texture
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT: case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT:
return 1; return 1;
// -- glGetFramebufferAttachmentParameteriv with
// GL_EXT_sRGB
case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:
return 1;
// -- glGetProgramiv // -- glGetProgramiv
case GL_DELETE_STATUS: case GL_DELETE_STATUS:
...@@ -352,11 +356,13 @@ int ElementsPerGroup(int format, int type) { ...@@ -352,11 +356,13 @@ int ElementsPerGroup(int format, int type) {
switch (format) { switch (format) {
case GL_RGB: case GL_RGB:
case GL_SRGB_EXT:
return 3; return 3;
case GL_LUMINANCE_ALPHA: case GL_LUMINANCE_ALPHA:
return 2; return 2;
case GL_RGBA: case GL_RGBA:
case GL_BGRA_EXT: case GL_BGRA_EXT:
case GL_SRGB_ALPHA_EXT:
return 4; return 4;
case GL_ALPHA: case GL_ALPHA:
case GL_LUMINANCE: case GL_LUMINANCE:
...@@ -670,6 +676,7 @@ uint32 GLES2Util::GetChannelsForFormat(int format) { ...@@ -670,6 +676,7 @@ uint32 GLES2Util::GetChannelsForFormat(int format) {
case GL_RGB565: case GL_RGB565:
case GL_RGB16F_EXT: case GL_RGB16F_EXT:
case GL_RGB32F_EXT: case GL_RGB32F_EXT:
case GL_SRGB_EXT:
return kRGB; return kRGB;
case GL_BGRA_EXT: case GL_BGRA_EXT:
case GL_BGRA8_EXT: case GL_BGRA8_EXT:
...@@ -679,6 +686,8 @@ uint32 GLES2Util::GetChannelsForFormat(int format) { ...@@ -679,6 +686,8 @@ uint32 GLES2Util::GetChannelsForFormat(int format) {
case GL_RGBA8_OES: case GL_RGBA8_OES:
case GL_RGBA4: case GL_RGBA4:
case GL_RGB5_A1: case GL_RGB5_A1:
case GL_SRGB_ALPHA_EXT:
case GL_SRGB8_ALPHA8_EXT:
return kRGBA; return kRGBA;
case GL_DEPTH_COMPONENT32_OES: case GL_DEPTH_COMPONENT32_OES:
case GL_DEPTH_COMPONENT24_OES: case GL_DEPTH_COMPONENT24_OES:
......
...@@ -393,6 +393,20 @@ void FeatureInfo::InitializeFeatures() { ...@@ -393,6 +393,20 @@ void FeatureInfo::InitializeFeatures() {
validators_.index_type.AddValue(GL_UNSIGNED_INT); validators_.index_type.AddValue(GL_UNSIGNED_INT);
} }
if (is_es3 || extensions.Contains("GL_EXT_sRGB") ||
gfx::HasDesktopGLFeatures()) {
AddExtensionString("GL_EXT_sRGB");
texture_format_validators_[GL_SRGB_EXT].AddValue(GL_UNSIGNED_BYTE);
texture_format_validators_[GL_SRGB_ALPHA_EXT].AddValue(GL_UNSIGNED_BYTE);
validators_.texture_internal_format.AddValue(GL_SRGB_EXT);
validators_.texture_internal_format.AddValue(GL_SRGB_ALPHA_EXT);
validators_.texture_format.AddValue(GL_SRGB_EXT);
validators_.texture_format.AddValue(GL_SRGB_ALPHA_EXT);
validators_.render_buffer_format.AddValue(GL_SRGB8_ALPHA8_EXT);
validators_.frame_buffer_parameter.AddValue(
GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT);
}
bool enable_texture_format_bgra8888 = false; bool enable_texture_format_bgra8888 = false;
bool enable_read_format_bgra = false; bool enable_read_format_bgra = false;
bool enable_render_buffer_bgra = false; bool enable_render_buffer_bgra = false;
......
...@@ -253,6 +253,8 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) { ...@@ -253,6 +253,8 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) {
Not(HasSubstr("GL_AMD_compressed_ATC_texture"))); Not(HasSubstr("GL_AMD_compressed_ATC_texture")));
EXPECT_THAT(info_->extensions(), EXPECT_THAT(info_->extensions(),
Not(HasSubstr("GL_IMG_texture_compression_pvrtc"))); Not(HasSubstr("GL_IMG_texture_compression_pvrtc")));
EXPECT_THAT(info_->extensions(),
Not(HasSubstr("GL_EXT_sRGB")));
EXPECT_FALSE(info_->feature_flags().npot_ok); EXPECT_FALSE(info_->feature_flags().npot_ok);
EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid( EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
GL_COMPRESSED_RGB_S3TC_DXT1_EXT)); GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
...@@ -322,6 +324,22 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) { ...@@ -322,6 +324,22 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) {
EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MIN_EXT)); EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MIN_EXT));
EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MAX_EXT)); EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MAX_EXT));
EXPECT_FALSE(info_->feature_flags().chromium_sync_query); EXPECT_FALSE(info_->feature_flags().chromium_sync_query);
EXPECT_FALSE(info_->GetTextureFormatValidator(GL_SRGB_EXT).IsValid(
GL_UNSIGNED_BYTE));
EXPECT_FALSE(info_->GetTextureFormatValidator(GL_SRGB_ALPHA_EXT).IsValid(
GL_UNSIGNED_BYTE));
EXPECT_FALSE(info_->validators()->texture_format.IsValid(
GL_SRGB_EXT));
EXPECT_FALSE(info_->validators()->texture_format.IsValid(
GL_SRGB_ALPHA_EXT));
EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
GL_SRGB_EXT));
EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
GL_SRGB_ALPHA_EXT));
EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
GL_SRGB8_ALPHA8_EXT));
EXPECT_FALSE(info_->validators()->frame_buffer_parameter.IsValid(
GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT));
} }
TEST_F(FeatureInfoTest, InitializeWithANGLE) { TEST_F(FeatureInfoTest, InitializeWithANGLE) {
...@@ -435,6 +453,28 @@ TEST_F(FeatureInfoTest, InitializeEXT_read_format_bgra) { ...@@ -435,6 +453,28 @@ TEST_F(FeatureInfoTest, InitializeEXT_read_format_bgra) {
GL_BGRA8_EXT)); GL_BGRA8_EXT));
} }
TEST_F(FeatureInfoTest, InitializeEXT_sRGB) {
SetupInitExpectations("GL_EXT_sRGB");
EXPECT_THAT(info_->extensions(),
HasSubstr("GL_EXT_sRGB"));
EXPECT_TRUE(info_->GetTextureFormatValidator(GL_SRGB_EXT).IsValid(
GL_UNSIGNED_BYTE));
EXPECT_TRUE(info_->GetTextureFormatValidator(GL_SRGB_ALPHA_EXT).IsValid(
GL_UNSIGNED_BYTE));
EXPECT_TRUE(info_->validators()->texture_format.IsValid(
GL_SRGB_EXT));
EXPECT_TRUE(info_->validators()->texture_format.IsValid(
GL_SRGB_ALPHA_EXT));
EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
GL_SRGB_EXT));
EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
GL_SRGB_ALPHA_EXT));
EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
GL_SRGB8_ALPHA8_EXT));
EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT));
}
TEST_F(FeatureInfoTest, InitializeEXT_texture_storage) { TEST_F(FeatureInfoTest, InitializeEXT_texture_storage) {
SetupInitExpectations("GL_EXT_texture_storage"); SetupInitExpectations("GL_EXT_texture_storage");
EXPECT_TRUE(info_->feature_flags().ext_texture_storage); EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
......
...@@ -10089,6 +10089,8 @@ static GLenum ExtractFormatFromStorageFormat(GLenum internalformat) { ...@@ -10089,6 +10089,8 @@ static GLenum ExtractFormatFromStorageFormat(GLenum internalformat) {
return GL_LUMINANCE_ALPHA; return GL_LUMINANCE_ALPHA;
case GL_BGRA8_EXT: case GL_BGRA8_EXT:
return GL_BGRA_EXT; return GL_BGRA_EXT;
case GL_SRGB8_ALPHA8_EXT:
return GL_SRGB_ALPHA_EXT;
default: default:
return GL_NONE; return GL_NONE;
} }
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "gpu/command_buffer/service/gles2_cmd_decoder.h" #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/service/mailbox_manager.h" #include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/memory_tracking.h" #include "gpu/command_buffer/service/memory_tracking.h"
#include "ui/gl/gl_implementation.h"
namespace gpu { namespace gpu {
namespace gles2 { namespace gles2 {
...@@ -1640,6 +1641,18 @@ void TextureManager::ValidateAndDoTexImage2D( ...@@ -1640,6 +1641,18 @@ void TextureManager::ValidateAndDoTexImage2D(
texture_ref, args); texture_ref, args);
} }
GLenum TextureManager::AdjustTexFormat(GLenum format) const {
// TODO: GLES 3 allows for internal format and format to differ. This logic
// may need to change as a result.
if (gfx::GetGLImplementation() == gfx::kGLImplementationDesktopGL) {
if (format == GL_SRGB_EXT)
return GL_RGB;
if (format == GL_SRGB_ALPHA_EXT)
return GL_RGBA;
}
return format;
}
void TextureManager::DoTexImage2D( void TextureManager::DoTexImage2D(
DecoderTextureState* texture_state, DecoderTextureState* texture_state,
ErrorState* error_state, ErrorState* error_state,
...@@ -1676,7 +1689,7 @@ void TextureManager::DoTexImage2D( ...@@ -1676,7 +1689,7 @@ void TextureManager::DoTexImage2D(
{ {
ScopedTextureUploadTimer timer(texture_state); ScopedTextureUploadTimer timer(texture_state);
glTexSubImage2D(args.target, args.level, 0, 0, args.width, args.height, glTexSubImage2D(args.target, args.level, 0, 0, args.width, args.height,
args.format, args.type, args.pixels); AdjustTexFormat(args.format), args.type, args.pixels);
} }
SetLevelCleared(texture_ref, args.target, args.level, true); SetLevelCleared(texture_ref, args.target, args.level, true);
texture_state->tex_image_2d_failed = false; texture_state->tex_image_2d_failed = false;
...@@ -1688,7 +1701,7 @@ void TextureManager::DoTexImage2D( ...@@ -1688,7 +1701,7 @@ void TextureManager::DoTexImage2D(
ScopedTextureUploadTimer timer(texture_state); ScopedTextureUploadTimer timer(texture_state);
glTexImage2D( glTexImage2D(
args.target, args.level, args.internal_format, args.width, args.height, args.target, args.level, args.internal_format, args.width, args.height,
args.border, args.format, args.type, args.pixels); args.border, AdjustTexFormat(args.format), args.type, args.pixels);
} }
GLenum error = ERRORSTATE_PEEK_GL_ERROR(error_state, "glTexImage2D"); GLenum error = ERRORSTATE_PEEK_GL_ERROR(error_state, "glTexImage2D");
if (error == GL_NO_ERROR) { if (error == GL_NO_ERROR) {
......
...@@ -814,6 +814,8 @@ class GPU_EXPORT TextureManager { ...@@ -814,6 +814,8 @@ class GPU_EXPORT TextureManager {
void UpdateNumImages(int delta); void UpdateNumImages(int delta);
void IncFramebufferStateChangeCount(); void IncFramebufferStateChangeCount();
GLenum AdjustTexFormat(GLenum format) const;
MemoryTypeTracker* GetMemTracker(GLenum texture_pool); MemoryTypeTracker* GetMemTracker(GLenum texture_pool);
scoped_ptr<MemoryTypeTracker> memory_tracker_managed_; scoped_ptr<MemoryTypeTracker> memory_tracker_managed_;
scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_; scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_;
......
...@@ -191,6 +191,9 @@ ...@@ -191,6 +191,9 @@
#define GL_STENCIL_EXT 0x1802 #define GL_STENCIL_EXT 0x1802
#endif #endif
// GL_EXT_sRGB
#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210
// GL_ARB_get_program_binary // GL_ARB_get_program_binary
#define PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
// GL_OES_get_program_binary // GL_OES_get_program_binary
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment