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

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

Issue 566023002: Clean up interfaces between Shader / ShaderTranslator / ANGLE side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 6816 matching lines...) Expand 10 before | Expand all | Expand 10 after
6827 // memory.) 6827 // memory.)
6828 error::Error GLES2DecoderImpl::ShaderSourceHelper( 6828 error::Error GLES2DecoderImpl::ShaderSourceHelper(
6829 GLuint client_id, const char* data, uint32 data_size) { 6829 GLuint client_id, const char* data, uint32 data_size) {
6830 std::string str(data, data + data_size); 6830 std::string str(data, data + data_size);
6831 Shader* shader = GetShaderInfoNotProgram(client_id, "glShaderSource"); 6831 Shader* shader = GetShaderInfoNotProgram(client_id, "glShaderSource");
6832 if (!shader) { 6832 if (!shader) {
6833 return error::kNoError; 6833 return error::kNoError;
6834 } 6834 }
6835 // Note: We don't actually call glShaderSource here. We wait until 6835 // Note: We don't actually call glShaderSource here. We wait until
6836 // the call to glCompileShader. 6836 // the call to glCompileShader.
6837 shader->UpdateSource(str.c_str()); 6837 shader->set_source(str);
6838 return error::kNoError; 6838 return error::kNoError;
6839 } 6839 }
6840 6840
6841 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( 6841 error::Error GLES2DecoderImpl::HandleShaderSourceBucket(
6842 uint32 immediate_data_size, 6842 uint32 immediate_data_size,
6843 const void* cmd_data) { 6843 const void* cmd_data) {
6844 const gles2::cmds::ShaderSourceBucket& c = 6844 const gles2::cmds::ShaderSourceBucket& c =
6845 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data); 6845 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data);
6846 Bucket* bucket = GetBucket(c.data_bucket_id); 6846 Bucket* bucket = GetBucket(c.data_bucket_id);
6847 if (!bucket || bucket->size() == 0) { 6847 if (!bucket || bucket->size() == 0) {
6848 return error::kInvalidArguments; 6848 return error::kInvalidArguments;
6849 } 6849 }
6850 return ShaderSourceHelper( 6850 return ShaderSourceHelper(
6851 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1), 6851 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1),
6852 bucket->size() - 1); 6852 bucket->size() - 1);
6853 } 6853 }
6854 6854
6855 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) { 6855 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) {
6856 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompileShader"); 6856 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompileShader");
6857 Shader* shader = GetShaderInfoNotProgram(client_id, "glCompileShader"); 6857 Shader* shader = GetShaderInfoNotProgram(client_id, "glCompileShader");
6858 if (!shader) { 6858 if (!shader) {
6859 return; 6859 return;
6860 } 6860 }
6861 ShaderTranslator* translator = NULL; 6861 ShaderTranslator* translator = NULL;
6862 if (use_shader_translator_) { 6862 if (use_shader_translator_) {
6863 translator = shader->shader_type() == GL_VERTEX_SHADER ? 6863 translator = shader->shader_type() == GL_VERTEX_SHADER ?
6864 vertex_translator_.get() : fragment_translator_.get(); 6864 vertex_translator_.get() : fragment_translator_.get();
6865 } 6865 }
6866 6866
6867 program_manager()->DoCompileShader( 6867 shader->DoCompile(
6868 shader,
6869 translator, 6868 translator,
6870 feature_info_->feature_flags().angle_translated_shader_source ? 6869 feature_info_->feature_flags().angle_translated_shader_source ?
6871 ProgramManager::kANGLE : ProgramManager::kGL); 6870 Shader::kANGLE : Shader::kGL);
6872 6871
6873 // CompileShader can be very slow. Exit command processing to allow for 6872 // CompileShader can be very slow. Exit command processing to allow for
6874 // context preemption and GPU watchdog checks. 6873 // context preemption and GPU watchdog checks.
6875 ExitCommandProcessingEarly(); 6874 ExitCommandProcessingEarly();
6876 } 6875 }
6877 6876
6878 void GLES2DecoderImpl::DoGetShaderiv( 6877 void GLES2DecoderImpl::DoGetShaderiv(
6879 GLuint shader_id, GLenum pname, GLint* params) { 6878 GLuint shader_id, GLenum pname, GLint* params) {
6880 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderiv"); 6879 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderiv");
6881 if (!shader) { 6880 if (!shader) {
6882 return; 6881 return;
6883 } 6882 }
6884 switch (pname) { 6883 switch (pname) {
6885 case GL_SHADER_SOURCE_LENGTH: 6884 case GL_SHADER_SOURCE_LENGTH:
6886 *params = shader->source() ? shader->source()->size() + 1 : 0; 6885 *params = shader->source().size();
6886 if (*params)
6887 ++(*params);
6887 return; 6888 return;
6888 case GL_COMPILE_STATUS: 6889 case GL_COMPILE_STATUS:
6889 *params = compile_shader_always_succeeds_ ? true : shader->IsValid(); 6890 *params = compile_shader_always_succeeds_ ? true : shader->valid();
6890 return; 6891 return;
6891 case GL_INFO_LOG_LENGTH: 6892 case GL_INFO_LOG_LENGTH:
6892 *params = shader->log_info() ? shader->log_info()->size() + 1 : 0; 6893 *params = shader->log_info().size();
6894 if (*params)
6895 ++(*params);
6893 return; 6896 return;
6894 case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE: 6897 case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
6895 *params = shader->translated_source() ? 6898 *params = shader->translated_source().size();
6896 shader->translated_source()->size() + 1 : 0; 6899 if (*params)
6900 ++(*params);
6897 return; 6901 return;
6898 default: 6902 default:
6899 break; 6903 break;
6900 } 6904 }
6901 glGetShaderiv(shader->service_id(), pname, params); 6905 glGetShaderiv(shader->service_id(), pname, params);
6902 } 6906 }
6903 6907
6904 error::Error GLES2DecoderImpl::HandleGetShaderSource(uint32 immediate_data_size, 6908 error::Error GLES2DecoderImpl::HandleGetShaderSource(uint32 immediate_data_size,
6905 const void* cmd_data) { 6909 const void* cmd_data) {
6906 const gles2::cmds::GetShaderSource& c = 6910 const gles2::cmds::GetShaderSource& c =
6907 *static_cast<const gles2::cmds::GetShaderSource*>(cmd_data); 6911 *static_cast<const gles2::cmds::GetShaderSource*>(cmd_data);
6908 GLuint shader_id = c.shader; 6912 GLuint shader_id = c.shader;
6909 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6913 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6910 Bucket* bucket = CreateBucket(bucket_id); 6914 Bucket* bucket = CreateBucket(bucket_id);
6911 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderSource"); 6915 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderSource");
6912 if (!shader || !shader->source()) { 6916 if (!shader || shader->source().empty()) {
6913 bucket->SetSize(0); 6917 bucket->SetSize(0);
6914 return error::kNoError; 6918 return error::kNoError;
6915 } 6919 }
6916 bucket->SetFromString(shader->source()->c_str()); 6920 bucket->SetFromString(shader->source().c_str());
6917 return error::kNoError; 6921 return error::kNoError;
6918 } 6922 }
6919 6923
6920 error::Error GLES2DecoderImpl::HandleGetTranslatedShaderSourceANGLE( 6924 error::Error GLES2DecoderImpl::HandleGetTranslatedShaderSourceANGLE(
6921 uint32 immediate_data_size, 6925 uint32 immediate_data_size,
6922 const void* cmd_data) { 6926 const void* cmd_data) {
6923 const gles2::cmds::GetTranslatedShaderSourceANGLE& c = 6927 const gles2::cmds::GetTranslatedShaderSourceANGLE& c =
6924 *static_cast<const gles2::cmds::GetTranslatedShaderSourceANGLE*>( 6928 *static_cast<const gles2::cmds::GetTranslatedShaderSourceANGLE*>(
6925 cmd_data); 6929 cmd_data);
6926 GLuint shader_id = c.shader; 6930 GLuint shader_id = c.shader;
6927 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6931 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6928 Bucket* bucket = CreateBucket(bucket_id); 6932 Bucket* bucket = CreateBucket(bucket_id);
6929 Shader* shader = GetShaderInfoNotProgram( 6933 Shader* shader = GetShaderInfoNotProgram(
6930 shader_id, "glGetTranslatedShaderSourceANGLE"); 6934 shader_id, "glGetTranslatedShaderSourceANGLE");
6931 if (!shader) { 6935 if (!shader) {
6932 bucket->SetSize(0); 6936 bucket->SetSize(0);
6933 return error::kNoError; 6937 return error::kNoError;
6934 } 6938 }
6935 6939
6936 bucket->SetFromString(shader->translated_source() ? 6940 bucket->SetFromString(shader->translated_source().c_str());
6937 shader->translated_source()->c_str() : NULL);
6938 return error::kNoError; 6941 return error::kNoError;
6939 } 6942 }
6940 6943
6941 error::Error GLES2DecoderImpl::HandleGetProgramInfoLog( 6944 error::Error GLES2DecoderImpl::HandleGetProgramInfoLog(
6942 uint32 immediate_data_size, 6945 uint32 immediate_data_size,
6943 const void* cmd_data) { 6946 const void* cmd_data) {
6944 const gles2::cmds::GetProgramInfoLog& c = 6947 const gles2::cmds::GetProgramInfoLog& c =
6945 *static_cast<const gles2::cmds::GetProgramInfoLog*>(cmd_data); 6948 *static_cast<const gles2::cmds::GetProgramInfoLog*>(cmd_data);
6946 GLuint program_id = c.program; 6949 GLuint program_id = c.program;
6947 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6950 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
(...skipping 10 matching lines...) Expand all
6958 6961
6959 error::Error GLES2DecoderImpl::HandleGetShaderInfoLog( 6962 error::Error GLES2DecoderImpl::HandleGetShaderInfoLog(
6960 uint32 immediate_data_size, 6963 uint32 immediate_data_size,
6961 const void* cmd_data) { 6964 const void* cmd_data) {
6962 const gles2::cmds::GetShaderInfoLog& c = 6965 const gles2::cmds::GetShaderInfoLog& c =
6963 *static_cast<const gles2::cmds::GetShaderInfoLog*>(cmd_data); 6966 *static_cast<const gles2::cmds::GetShaderInfoLog*>(cmd_data);
6964 GLuint shader_id = c.shader; 6967 GLuint shader_id = c.shader;
6965 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6968 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6966 Bucket* bucket = CreateBucket(bucket_id); 6969 Bucket* bucket = CreateBucket(bucket_id);
6967 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderInfoLog"); 6970 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderInfoLog");
6968 if (!shader || !shader->log_info()) { 6971 if (!shader) {
6969 bucket->SetFromString(""); 6972 bucket->SetFromString("");
6970 return error::kNoError; 6973 return error::kNoError;
6971 } 6974 }
6972 bucket->SetFromString(shader->log_info()->c_str()); 6975 bucket->SetFromString(shader->log_info().c_str());
6973 return error::kNoError; 6976 return error::kNoError;
6974 } 6977 }
6975 6978
6976 bool GLES2DecoderImpl::DoIsEnabled(GLenum cap) { 6979 bool GLES2DecoderImpl::DoIsEnabled(GLenum cap) {
6977 return state_.GetEnabled(cap); 6980 return state_.GetEnabled(cap);
6978 } 6981 }
6979 6982
6980 bool GLES2DecoderImpl::DoIsBuffer(GLuint client_id) { 6983 bool GLES2DecoderImpl::DoIsBuffer(GLuint client_id) {
6981 const Buffer* buffer = GetBuffer(client_id); 6984 const Buffer* buffer = GetBuffer(client_id);
6982 return buffer && buffer->IsValid() && !buffer->IsDeleted(); 6985 return buffer && buffer->IsValid() && !buffer->IsDeleted();
(...skipping 4255 matching lines...) Expand 10 before | Expand all | Expand 10 after
11238 } 11241 }
11239 } 11242 }
11240 11243
11241 // Include the auto-generated part of this file. We split this because it means 11244 // Include the auto-generated part of this file. We split this because it means
11242 // we can easily edit the non-auto generated parts right here in this file 11245 // we can easily edit the non-auto generated parts right here in this file
11243 // instead of having to edit some template or the code generator. 11246 // instead of having to edit some template or the code generator.
11244 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 11247 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
11245 11248
11246 } // namespace gles2 11249 } // namespace gles2
11247 } // namespace gpu 11250 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698