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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 863253002: Update from https://crrev.com/312600 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <list> 10 #include <list>
(...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 GLuint client_id, GLint location, const char* name); 1163 GLuint client_id, GLint location, const char* name);
1164 1164
1165 error::Error GetAttribLocationHelper( 1165 error::Error GetAttribLocationHelper(
1166 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset, 1166 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
1167 const std::string& name_str); 1167 const std::string& name_str);
1168 1168
1169 error::Error GetUniformLocationHelper( 1169 error::Error GetUniformLocationHelper(
1170 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset, 1170 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
1171 const std::string& name_str); 1171 const std::string& name_str);
1172 1172
1173 // Helper for glShaderSource. 1173 // Wrapper for glShaderSource.
1174 error::Error ShaderSourceHelper( 1174 void DoShaderSource(
1175 GLuint client_id, const char* data, uint32 data_size); 1175 GLuint client_id, GLsizei count, const char** data, const GLint* length);
1176 1176
1177 // Clear any textures used by the current program. 1177 // Clear any textures used by the current program.
1178 bool ClearUnclearedTextures(); 1178 bool ClearUnclearedTextures();
1179 1179
1180 // Clears any uncleared attachments attached to the given frame buffer. 1180 // Clears any uncleared attachments attached to the given frame buffer.
1181 // Returns false if there was a generated GL error. 1181 // Returns false if there was a generated GL error.
1182 void ClearUnclearedAttachments(GLenum target, Framebuffer* framebuffer); 1182 void ClearUnclearedAttachments(GLenum target, Framebuffer* framebuffer);
1183 1183
1184 // overridden from GLES2Decoder 1184 // overridden from GLES2Decoder
1185 bool ClearLevel(unsigned service_id, 1185 bool ClearLevel(unsigned service_id,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 // Gets the service id for any simulated backbuffer fbo. 1271 // Gets the service id for any simulated backbuffer fbo.
1272 GLuint GetBackbufferServiceId() const; 1272 GLuint GetBackbufferServiceId() const;
1273 1273
1274 // Helper for glGetBooleanv, glGetFloatv and glGetIntegerv 1274 // Helper for glGetBooleanv, glGetFloatv and glGetIntegerv
1275 bool GetHelper(GLenum pname, GLint* params, GLsizei* num_written); 1275 bool GetHelper(GLenum pname, GLint* params, GLsizei* num_written);
1276 1276
1277 // Helper for glGetVertexAttrib 1277 // Helper for glGetVertexAttrib
1278 void GetVertexAttribHelper( 1278 void GetVertexAttribHelper(
1279 const VertexAttrib* attrib, GLenum pname, GLint* param); 1279 const VertexAttrib* attrib, GLenum pname, GLint* param);
1280 1280
1281 // Wrapper for glCreateProgram
1282 bool CreateProgramHelper(GLuint client_id);
1283
1284 // Wrapper for glCreateShader
1285 bool CreateShaderHelper(GLenum type, GLuint client_id);
1286
1287 // Wrapper for glActiveTexture 1281 // Wrapper for glActiveTexture
1288 void DoActiveTexture(GLenum texture_unit); 1282 void DoActiveTexture(GLenum texture_unit);
1289 1283
1290 // Wrapper for glAttachShader 1284 // Wrapper for glAttachShader
1291 void DoAttachShader(GLuint client_program_id, GLint client_shader_id); 1285 void DoAttachShader(GLuint client_program_id, GLint client_shader_id);
1292 1286
1293 // Wrapper for glBindBuffer since we need to track the current targets. 1287 // Wrapper for glBindBuffer since we need to track the current targets.
1294 void DoBindBuffer(GLenum target, GLuint buffer); 1288 void DoBindBuffer(GLenum target, GLuint buffer);
1295 1289
1296 // Wrapper for glBindFramebuffer since we need to track the current targets. 1290 // Wrapper for glBindFramebuffer since we need to track the current targets.
(...skipping 2745 matching lines...) Expand 10 before | Expand all | Expand 10 after
4042 } else { 4036 } else {
4043 return DoCommandsImpl<false>( 4037 return DoCommandsImpl<false>(
4044 num_commands, buffer, num_entries, entries_processed); 4038 num_commands, buffer, num_entries, entries_processed);
4045 } 4039 }
4046 } 4040 }
4047 4041
4048 void GLES2DecoderImpl::RemoveBuffer(GLuint client_id) { 4042 void GLES2DecoderImpl::RemoveBuffer(GLuint client_id) {
4049 buffer_manager()->RemoveBuffer(client_id); 4043 buffer_manager()->RemoveBuffer(client_id);
4050 } 4044 }
4051 4045
4052 bool GLES2DecoderImpl::CreateProgramHelper(GLuint client_id) {
4053 if (GetProgram(client_id)) {
4054 return false;
4055 }
4056 GLuint service_id = glCreateProgram();
4057 if (service_id != 0) {
4058 CreateProgram(client_id, service_id);
4059 }
4060 return true;
4061 }
4062
4063 bool GLES2DecoderImpl::CreateShaderHelper(GLenum type, GLuint client_id) {
4064 if (GetShader(client_id)) {
4065 return false;
4066 }
4067 GLuint service_id = glCreateShader(type);
4068 if (service_id != 0) {
4069 CreateShader(client_id, service_id, type);
4070 }
4071 return true;
4072 }
4073
4074 void GLES2DecoderImpl::DoFinish() { 4046 void GLES2DecoderImpl::DoFinish() {
4075 glFinish(); 4047 glFinish();
4076 ProcessPendingReadPixels(); 4048 ProcessPendingReadPixels();
4077 ProcessPendingQueries(true); 4049 ProcessPendingQueries(true);
4078 } 4050 }
4079 4051
4080 void GLES2DecoderImpl::DoFlush() { 4052 void GLES2DecoderImpl::DoFlush() {
4081 glFlush(); 4053 glFlush();
4082 ProcessPendingQueries(false); 4054 ProcessPendingQueries(false);
4083 } 4055 }
(...skipping 2975 matching lines...) Expand 10 before | Expand all | Expand 10 after
7059 offset, count, type, &max_vertex_accessed)) { 7031 offset, count, type, &max_vertex_accessed)) {
7060 // TODO(gman): Should this be a GL error or a command buffer error? 7032 // TODO(gman): Should this be a GL error or a command buffer error?
7061 LOCAL_SET_GL_ERROR( 7033 LOCAL_SET_GL_ERROR(
7062 GL_INVALID_OPERATION, 7034 GL_INVALID_OPERATION,
7063 "GetMaxValueInBufferCHROMIUM", "range out of bounds for buffer"); 7035 "GetMaxValueInBufferCHROMIUM", "range out of bounds for buffer");
7064 } 7036 }
7065 } 7037 }
7066 return max_vertex_accessed; 7038 return max_vertex_accessed;
7067 } 7039 }
7068 7040
7069 // Calls glShaderSource for the various versions of the ShaderSource command. 7041 void GLES2DecoderImpl::DoShaderSource(
7070 // Assumes that data / data_size points to a piece of memory that is in range 7042 GLuint client_id, GLsizei count, const char** data, const GLint* length) {
7071 // of whatever context it came from (shared memory, immediate memory, bucket 7043 std::string str;
7072 // memory.) 7044 for (GLsizei ii = 0; ii < count; ++ii) {
7073 error::Error GLES2DecoderImpl::ShaderSourceHelper( 7045 str.append(data[ii]);
7074 GLuint client_id, const char* data, uint32 data_size) { 7046 }
7075 std::string str(data, data + data_size);
7076 Shader* shader = GetShaderInfoNotProgram(client_id, "glShaderSource"); 7047 Shader* shader = GetShaderInfoNotProgram(client_id, "glShaderSource");
7077 if (!shader) { 7048 if (!shader) {
7078 return error::kNoError; 7049 return;
7079 } 7050 }
7080 // Note: We don't actually call glShaderSource here. We wait until 7051 // Note: We don't actually call glShaderSource here. We wait until
7081 // the call to glCompileShader. 7052 // the call to glCompileShader.
7082 shader->set_source(str); 7053 shader->set_source(str);
7083 return error::kNoError;
7084 }
7085
7086 error::Error GLES2DecoderImpl::HandleShaderSourceBucket(
7087 uint32 immediate_data_size,
7088 const void* cmd_data) {
7089 const gles2::cmds::ShaderSourceBucket& c =
7090 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data);
7091 Bucket* bucket = GetBucket(c.data_bucket_id);
7092 if (!bucket || bucket->size() == 0) {
7093 return error::kInvalidArguments;
7094 }
7095 return ShaderSourceHelper(
7096 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1),
7097 bucket->size() - 1);
7098 } 7054 }
7099 7055
7100 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) { 7056 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) {
7101 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompileShader"); 7057 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompileShader");
7102 Shader* shader = GetShaderInfoNotProgram(client_id, "glCompileShader"); 7058 Shader* shader = GetShaderInfoNotProgram(client_id, "glCompileShader");
7103 if (!shader) { 7059 if (!shader) {
7104 return; 7060 return;
7105 } 7061 }
7106 ShaderTranslator* translator = NULL; 7062 ShaderTranslator* translator = NULL;
7107 if (use_shader_translator_) { 7063 if (use_shader_translator_) {
(...skipping 4542 matching lines...) Expand 10 before | Expand all | Expand 10 after
11650 } 11606 }
11651 } 11607 }
11652 11608
11653 // Include the auto-generated part of this file. We split this because it means 11609 // Include the auto-generated part of this file. We split this because it means
11654 // we can easily edit the non-auto generated parts right here in this file 11610 // we can easily edit the non-auto generated parts right here in this file
11655 // instead of having to edit some template or the code generator. 11611 // instead of having to edit some template or the code generator.
11656 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 11612 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
11657 11613
11658 } // namespace gles2 11614 } // namespace gles2
11659 } // namespace gpu 11615 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698