summaryrefslogtreecommitdiff
path: root/gpu
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-11-06 12:27:47 +0000
committerTorne (Richard Coles) <torne@google.com>2013-11-06 12:27:47 +0000
commit0f1bc08d4cfcc34181b0b5cbf065c40f687bf740 (patch)
tree08e3fb2fdca3674ceb4d6cf527cb65e755cd993e /gpu
parent0bdaf95291fc46702f274f40e8e5081e9ef23011 (diff)
downloadchromium_org-0f1bc08d4cfcc34181b0b5cbf065c40f687bf740.tar.gz
Merge from Chromium at DEPS revision 232870
This commit was generated by merge_to_master.py. Change-Id: I9cd2139013538e8bcd17966e8ff30ca5651d1a3d
Diffstat (limited to 'gpu')
-rw-r--r--gpu/OWNERS1
-rw-r--r--gpu/command_buffer/OWNERS3
-rw-r--r--gpu/command_buffer/common/gpu_memory_allocation.h22
-rw-r--r--gpu/command_buffer/service/feature_info.cc4
-rw-r--r--gpu/command_buffer/service/feature_info.h1
-rw-r--r--gpu/command_buffer/service/feature_info_unittest.cc9
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.cc10
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.h14
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc8
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc56
-rw-r--r--gpu/config/OWNERS1
-rw-r--r--gpu/config/gpu_driver_bug_list_json.cc8
12 files changed, 102 insertions, 35 deletions
diff --git a/gpu/OWNERS b/gpu/OWNERS
index 1cf4e0238a..b32f729e05 100644
--- a/gpu/OWNERS
+++ b/gpu/OWNERS
@@ -1,3 +1,2 @@
piman@chromium.org
-apatrick@chromium.org
sievers@chromium.org
diff --git a/gpu/command_buffer/OWNERS b/gpu/command_buffer/OWNERS
index 7ef33ed2f5..bb8ea76f76 100644
--- a/gpu/command_buffer/OWNERS
+++ b/gpu/command_buffer/OWNERS
@@ -1,5 +1,4 @@
piman@chromium.org
-apatrick@chromium.org
jbauman@chromium.org
bajones@chromium.org
-zmo@chromium.org \ No newline at end of file
+zmo@chromium.org
diff --git a/gpu/command_buffer/common/gpu_memory_allocation.h b/gpu/command_buffer/common/gpu_memory_allocation.h
index 3057592f5f..57be4c5490 100644
--- a/gpu/command_buffer/common/gpu_memory_allocation.h
+++ b/gpu/command_buffer/common/gpu_memory_allocation.h
@@ -31,36 +31,20 @@ struct MemoryAllocation {
uint64 bytes_limit_when_visible;
PriorityCutoff priority_cutoff_when_visible;
- // Limits when this renderer is not visible.
- uint64 bytes_limit_when_not_visible;
- PriorityCutoff priority_cutoff_when_not_visible;
- bool have_backbuffer_when_not_visible;
-
MemoryAllocation()
: bytes_limit_when_visible(0),
- priority_cutoff_when_visible(CUTOFF_ALLOW_NOTHING),
- bytes_limit_when_not_visible(0),
- priority_cutoff_when_not_visible(CUTOFF_ALLOW_NOTHING),
- have_backbuffer_when_not_visible(false) {
+ priority_cutoff_when_visible(CUTOFF_ALLOW_NOTHING) {
}
MemoryAllocation(uint64 bytes_limit_when_visible)
: bytes_limit_when_visible(bytes_limit_when_visible),
- priority_cutoff_when_visible(CUTOFF_ALLOW_EVERYTHING),
- bytes_limit_when_not_visible(0),
- priority_cutoff_when_not_visible(CUTOFF_ALLOW_NOTHING),
- have_backbuffer_when_not_visible(false) {
+ priority_cutoff_when_visible(CUTOFF_ALLOW_EVERYTHING) {
}
bool Equals(const MemoryAllocation& other) const {
return bytes_limit_when_visible ==
other.bytes_limit_when_visible &&
- priority_cutoff_when_visible == other.priority_cutoff_when_visible &&
- bytes_limit_when_not_visible == other.bytes_limit_when_not_visible &&
- priority_cutoff_when_not_visible ==
- other.priority_cutoff_when_not_visible &&
- have_backbuffer_when_not_visible ==
- other.have_backbuffer_when_not_visible;
+ priority_cutoff_when_visible == other.priority_cutoff_when_visible;
}
};
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 6e6b363220..9329bc590f 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -122,7 +122,8 @@ FeatureInfo::FeatureFlags::FeatureFlags()
ext_draw_buffers(false),
ext_frag_depth(false),
use_async_readpixels(false),
- map_buffer_range(false) {
+ map_buffer_range(false),
+ ext_discard_framebuffer(false) {
}
FeatureInfo::Workarounds::Workarounds() :
@@ -697,6 +698,7 @@ void FeatureInfo::InitializeFeatures() {
!workarounds_.disable_ext_discard_framebuffer) {
// DiscardFramebufferEXT is automatically bound to InvalidateFramebuffer.
AddExtensionString("GL_EXT_discard_framebuffer");
+ feature_flags_.ext_discard_framebuffer = true;
}
}
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index 7d5041f26b..1b0fc77a81 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -51,6 +51,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool ext_frag_depth;
bool use_async_readpixels;
bool map_buffer_range;
+ bool ext_discard_framebuffer;
};
struct Workarounds {
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index c5e8301e7c..5b071061dc 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -116,6 +116,7 @@ TEST_F(FeatureInfoTest, Basic) {
EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
EXPECT_FALSE(info_->feature_flags().map_buffer_range);
EXPECT_FALSE(info_->feature_flags().use_async_readpixels);
+ EXPECT_FALSE(info_->feature_flags().ext_discard_framebuffer);
#define GPU_OP(type, name) EXPECT_FALSE(info_->workarounds().name);
GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
@@ -850,6 +851,12 @@ TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) {
EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth"));
}
+TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
+ SetupInitExpectations("GL_EXT_discard_framebuffer");
+ EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
+ EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
+}
+
TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) {
SetupInitExpectationsWithGLVersion("GL_ARB_sampler_objects", "OpenGL 3.0");
EXPECT_TRUE(info_->feature_flags().enable_samplers);
@@ -859,6 +866,8 @@ TEST_F(FeatureInfoTest, InitializeWithES3) {
SetupInitExpectationsWithGLVersion("", "OpenGL ES 3.0");
EXPECT_TRUE(info_->feature_flags().enable_samplers);
EXPECT_TRUE(info_->feature_flags().map_buffer_range);
+ EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
+ EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
EXPECT_FALSE(info_->feature_flags().use_async_readpixels);
}
diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc
index 194fe370a3..7dd1d820ec 100644
--- a/gpu/command_buffer/service/framebuffer_manager.cc
+++ b/gpu/command_buffer/service/framebuffer_manager.cc
@@ -632,9 +632,13 @@ bool FramebufferManager::IsComplete(
}
void FramebufferManager::OnTextureRefDetached(TextureRef* texture) {
- FOR_EACH_OBSERVER(TextureDetachObserver,
- texture_detach_observers_,
- OnTextureRefDetachedFromFramebuffer(texture));
+ for (TextureDetachObserverVector::iterator it =
+ texture_detach_observers_.begin();
+ it != texture_detach_observers_.end();
+ ++it) {
+ TextureDetachObserver* observer = *it;
+ observer->OnTextureRefDetachedFromFramebuffer(texture);
+ }
}
} // namespace gles2
diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h
index 06a75b4824..23fd1baf6a 100644
--- a/gpu/command_buffer/service/framebuffer_manager.h
+++ b/gpu/command_buffer/service/framebuffer_manager.h
@@ -5,11 +5,12 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_
#define GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_
+#include <vector>
+
#include "base/basictypes.h"
#include "base/containers/hash_tables.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "base/observer_list.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/gpu_export.h"
@@ -245,11 +246,15 @@ class GPU_EXPORT FramebufferManager {
}
void AddObserver(TextureDetachObserver* observer) {
- texture_detach_observers_.AddObserver(observer);
+ texture_detach_observers_.push_back(observer);
}
void RemoveObserver(TextureDetachObserver* observer) {
- texture_detach_observers_.RemoveObserver(observer);
+ texture_detach_observers_.erase(
+ std::remove(texture_detach_observers_.begin(),
+ texture_detach_observers_.end(),
+ observer),
+ texture_detach_observers_.end());
}
private:
@@ -278,7 +283,8 @@ class GPU_EXPORT FramebufferManager {
uint32 max_draw_buffers_;
uint32 max_color_attachments_;
- ObserverList<TextureDetachObserver> texture_detach_observers_;
+ typedef std::vector<TextureDetachObserver*> TextureDetachObserverVector;
+ TextureDetachObserverVector texture_detach_observers_;
DISALLOW_COPY_AND_ASSIGN(FramebufferManager);
};
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 2e82d98982..be0ee10b50 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3892,6 +3892,13 @@ void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) {
void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target,
GLsizei numAttachments,
const GLenum* attachments) {
+ if (!features().ext_discard_framebuffer) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glDiscardFramebufferEXT",
+ "function not available");
+ return;
+ }
+
Framebuffer* framebuffer =
GetFramebufferInfoForTarget(GL_FRAMEBUFFER);
@@ -4977,6 +4984,7 @@ void GLES2DecoderImpl::DoBlitFramebufferEXT(
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
"glBlitFramebufferEXT", "function not available");
+ return;
}
if (!CheckBoundFramebuffersValid("glBlitFramebufferEXT")) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index 573ba6e613..af127bfaca 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -8610,6 +8610,62 @@ TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
+TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) {
+ InitDecoder("GL_EXT_discard_framebuffer", // extensions
+ false, // has alpha
+ false, // has depth
+ false, // has stencil
+ false, // request alpha
+ false, // request depth
+ false, // request stencil
+ false); // bind generates resource
+
+ const GLenum target = GL_FRAMEBUFFER;
+ const GLsizei count = 1;
+ const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 };
+
+ SetupTexture();
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_,
+ kServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+ FramebufferManager* framebuffer_manager = group().framebuffer_manager();
+ Framebuffer* framebuffer =
+ framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
+ EXPECT_TRUE(framebuffer->IsCleared());
+
+ EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ DiscardFramebufferEXTImmediate& cmd =
+ *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ cmd.Init(target, count, attachments);
+
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(cmd, sizeof(attachments)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_FALSE(framebuffer->IsCleared());
+}
+
+TEST_F(GLES2DecoderTest, DiscardFramebufferEXTUnsupported) {
+ const GLenum target = GL_FRAMEBUFFER;
+ const GLsizei count = 1;
+ const GLenum attachments[] = { GL_COLOR_EXT };
+ DiscardFramebufferEXTImmediate& cmd =
+ *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ cmd.Init(target, count, attachments);
+
+ // Should not result into a call into GL.
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(cmd, sizeof(attachments)));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
// TODO(gman): Complete this test.
// TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) {
// }
diff --git a/gpu/config/OWNERS b/gpu/config/OWNERS
index 92ac85812f..b66635ae03 100644
--- a/gpu/config/OWNERS
+++ b/gpu/config/OWNERS
@@ -1,4 +1,3 @@
-apatrick@chromium.org
kbr@chromium.org
piman@chromium.org
zmo@chromium.org
diff --git a/gpu/config/gpu_driver_bug_list_json.cc b/gpu/config/gpu_driver_bug_list_json.cc
index dd38d57ab6..49d34f1b56 100644
--- a/gpu/config/gpu_driver_bug_list_json.cc
+++ b/gpu/config/gpu_driver_bug_list_json.cc
@@ -396,8 +396,8 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
},
{
"id": 31,
- "cr_bugs": [154715, 10068, 269829, 294779],
- "description": "The Mali T-6xx driver does not guarantee flush ordering.",
+ "cr_bugs": [154715, 10068, 269829],
+ "description": "The Nexus 10 Mali driver does not guarantee flush ordering.",
"os": {
"type": "android"
},
@@ -406,8 +406,8 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
"value": "ARM"
},
"gl_renderer": {
- "op": "beginwith",
- "value": "Mali-T6"
+ "op": "contains",
+ "value": "Mali-T604"
},
"features": [
"use_virtualized_gl_contexts"