Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder_autogen.h

Issue 2264253003: Command buffers: ensure we only read immediate data once (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index d9091dc3bddfbb69615248ae4cc619a6f65294c9..87de64c7e82ad11b7c4e8688cffb4790f575c6d4 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -1566,7 +1566,12 @@ error::Error GLES2DecoderImpl::HandleGenBuffersImmediate(
if (buffers == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, buffers) || !GenBuffersHelper(n, buffers)) {
+ auto buffers_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* buffers_safe = buffers_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ buffers_safe[i] = buffers[i];
+ if (!CheckUniqueAndNonNullIds(n, buffers_safe) ||
+ !GenBuffersHelper(n, buffers_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -1603,8 +1608,12 @@ error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate(
if (framebuffers == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, framebuffers) ||
- !GenFramebuffersHelper(n, framebuffers)) {
+ auto framebuffers_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* framebuffers_safe = framebuffers_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ framebuffers_safe[i] = framebuffers[i];
+ if (!CheckUniqueAndNonNullIds(n, framebuffers_safe) ||
+ !GenFramebuffersHelper(n, framebuffers_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -1626,8 +1635,12 @@ error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate(
if (renderbuffers == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, renderbuffers) ||
- !GenRenderbuffersHelper(n, renderbuffers)) {
+ auto renderbuffers_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* renderbuffers_safe = renderbuffers_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ renderbuffers_safe[i] = renderbuffers[i];
+ if (!CheckUniqueAndNonNullIds(n, renderbuffers_safe) ||
+ !GenRenderbuffersHelper(n, renderbuffers_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -1651,8 +1664,12 @@ error::Error GLES2DecoderImpl::HandleGenSamplersImmediate(
if (samplers == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, samplers) ||
- !GenSamplersHelper(n, samplers)) {
+ auto samplers_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* samplers_safe = samplers_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ samplers_safe[i] = samplers[i];
+ if (!CheckUniqueAndNonNullIds(n, samplers_safe) ||
+ !GenSamplersHelper(n, samplers_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -1674,8 +1691,12 @@ error::Error GLES2DecoderImpl::HandleGenTexturesImmediate(
if (textures == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, textures) ||
- !GenTexturesHelper(n, textures)) {
+ auto textures_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* textures_safe = textures_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ textures_safe[i] = textures[i];
+ if (!CheckUniqueAndNonNullIds(n, textures_safe) ||
+ !GenTexturesHelper(n, textures_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -1699,8 +1720,12 @@ error::Error GLES2DecoderImpl::HandleGenTransformFeedbacksImmediate(
if (ids == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, ids) ||
- !GenTransformFeedbacksHelper(n, ids)) {
+ auto ids_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* ids_safe = ids_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ ids_safe[i] = ids[i];
+ if (!CheckUniqueAndNonNullIds(n, ids_safe) ||
+ !GenTransformFeedbacksHelper(n, ids_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -4769,8 +4794,12 @@ error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate(
if (queries == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, queries) ||
- !GenQueriesEXTHelper(n, queries)) {
+ auto queries_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* queries_safe = queries_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ queries_safe[i] = queries[i];
+ if (!CheckUniqueAndNonNullIds(n, queries_safe) ||
+ !GenQueriesEXTHelper(n, queries_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;
@@ -4892,8 +4921,12 @@ error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate(
if (arrays == NULL) {
return error::kOutOfBounds;
}
- if (!CheckUniqueAndNonNullIds(n, arrays) ||
- !GenVertexArraysOESHelper(n, arrays)) {
+ auto arrays_copy = base::MakeUnique<GLuint[]>(n);
+ GLuint* arrays_safe = arrays_copy.get();
+ for (GLsizei i = 0; i < n; ++i)
+ arrays_safe[i] = arrays[i];
+ if (!CheckUniqueAndNonNullIds(n, arrays_safe) ||
+ !GenVertexArraysOESHelper(n, arrays_safe)) {
return error::kInvalidArguments;
}
return error::kNoError;

Powered by Google App Engine
This is Rietveld 408576698