summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorkbr@chromium.org <kbr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-25 21:52:13 +0000
committerkbr@chromium.org <kbr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-25 21:52:13 +0000
commita39370651d9af05bc429312d44d00c6edcc963ff (patch)
treeef3daeb47dfd411a82314be825ee9abb35a6518f /gpu
parentedde96fd7348eb8ef2523c2e07d76d5a9839ead7 (diff)
downloadchromium_src-a39370651d9af05bc429312d44d00c6edcc963ff.zip
chromium_src-a39370651d9af05bc429312d44d00c6edcc963ff.tar.gz
chromium_src-a39370651d9af05bc429312d44d00c6edcc963ff.tar.bz2
Defend against NULL pointer dereferences in buggy OpenGL drivers.
BUG=149904 TEST=test case from bug; unit tests Review URL: https://chromiumcodereview.appspot.com/10989011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158665 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc19
1 files changed, 3 insertions, 16 deletions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 7074606..644dfbf 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1537,7 +1537,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
bool back_buffer_has_stencil_;
bool teximage2d_faster_than_texsubimage2d_;
- bool bufferdata_faster_than_buffersubdata_;
// The last error message set.
std::string last_error_;
@@ -1991,7 +1990,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
back_buffer_has_depth_(false),
back_buffer_has_stencil_(false),
teximage2d_faster_than_texsubimage2d_(true),
- bufferdata_faster_than_buffersubdata_(true),
log_message_count_(0),
current_decoder_error_(error::kNoError),
use_shader_translator_(true),
@@ -2039,10 +2037,9 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
use_shader_translator_ = false;
}
- // TODO(gman): Consider setting these based on GPU and/or driver.
+ // TODO(gman): Consider setting this based on GPU and/or driver.
if (IsAngle()) {
teximage2d_faster_than_texsubimage2d_ = false;
- bufferdata_faster_than_buffersubdata_ = false;
}
}
@@ -6860,19 +6857,14 @@ void GLES2DecoderImpl::DoBufferData(
data = zero.get();
}
- if (!bufferdata_faster_than_buffersubdata_ &&
- size == info->size() && usage == info->usage()) {
- glBufferSubData(target, 0, size, data);
- info->SetRange(0, size, data);
- return;
- }
-
CopyRealGLErrorsToWrapper();
glBufferData(target, size, data, usage);
GLenum error = PeekGLError();
if (error == GL_NO_ERROR) {
buffer_manager()->SetInfo(info, size, usage);
info->SetRange(0, size, data);
+ } else {
+ buffer_manager()->SetInfo(info, 0, usage);
}
}
@@ -6919,11 +6911,6 @@ void GLES2DecoderImpl::DoBufferSubData(
SetGLError(GL_INVALID_VALUE, "glBufferSubData", "out of range");
return;
}
- if (bufferdata_faster_than_buffersubdata_ &&
- offset == 0 && size == info->size()) {
- glBufferData(target, size, data, info->usage());
- return;
- }
glBufferSubData(target, offset, size, data);
}