| OLD | NEW |
| 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/texture_manager.h" | 5 #include "gpu/command_buffer/service/texture_manager.h" |
| 6 #include "base/bits.h" | 6 #include "base/bits.h" |
| 7 #include "base/stringprintf.h" | 7 #include "base/stringprintf.h" |
| 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 9 #include "gpu/command_buffer/service/error_state.h" |
| 9 #include "gpu/command_buffer/service/feature_info.h" | 10 #include "gpu/command_buffer/service/feature_info.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 11 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 11 #include "gpu/command_buffer/service/mailbox_manager.h" | 12 #include "gpu/command_buffer/service/mailbox_manager.h" |
| 12 #include "gpu/command_buffer/service/memory_tracking.h" | 13 #include "gpu/command_buffer/service/memory_tracking.h" |
| 13 #include "gpu/command_buffer/service/texture_definition.h" | 14 #include "gpu/command_buffer/service/texture_definition.h" |
| 14 | 15 |
| 15 namespace gpu { | 16 namespace gpu { |
| 16 namespace gles2 { | 17 namespace gles2 { |
| 17 | 18 |
| 18 static size_t GLTargetToFaceIndex(GLenum target) { | 19 static size_t GLTargetToFaceIndex(GLenum target) { |
| (...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 level_info.type, | 1037 level_info.type, |
| 1037 level_info.cleared); | 1038 level_info.cleared); |
| 1038 } | 1039 } |
| 1039 } | 1040 } |
| 1040 | 1041 |
| 1041 GLuint old_service_id = texture->service_id(); | 1042 GLuint old_service_id = texture->service_id(); |
| 1042 glDeleteTextures(1, &old_service_id); | 1043 glDeleteTextures(1, &old_service_id); |
| 1043 texture->SetServiceId(definition->ReleaseServiceId()); | 1044 texture->SetServiceId(definition->ReleaseServiceId()); |
| 1044 glBindTexture(texture->target(), texture->service_id()); | 1045 glBindTexture(texture->target(), texture->service_id()); |
| 1045 texture->SetImmutable(definition->immutable()); | 1046 texture->SetImmutable(definition->immutable()); |
| 1046 SetParameter(function_name, decoder, texture, GL_TEXTURE_MIN_FILTER, | 1047 ErrorState* error_state = decoder->GetErrorState(); |
| 1048 SetParameter(function_name, error_state, texture, GL_TEXTURE_MIN_FILTER, |
| 1047 definition->min_filter()); | 1049 definition->min_filter()); |
| 1048 SetParameter(function_name, decoder, texture, GL_TEXTURE_MAG_FILTER, | 1050 SetParameter(function_name, error_state, texture, GL_TEXTURE_MAG_FILTER, |
| 1049 definition->mag_filter()); | 1051 definition->mag_filter()); |
| 1050 SetParameter(function_name, decoder, texture, GL_TEXTURE_WRAP_S, | 1052 SetParameter(function_name, error_state, texture, GL_TEXTURE_WRAP_S, |
| 1051 definition->wrap_s()); | 1053 definition->wrap_s()); |
| 1052 SetParameter(function_name, decoder, texture, GL_TEXTURE_WRAP_T, | 1054 SetParameter(function_name, error_state, texture, GL_TEXTURE_WRAP_T, |
| 1053 definition->wrap_t()); | 1055 definition->wrap_t()); |
| 1054 if (feature_info_->validators()->texture_parameter.IsValid( | 1056 if (feature_info_->validators()->texture_parameter.IsValid( |
| 1055 GL_TEXTURE_USAGE_ANGLE)) { | 1057 GL_TEXTURE_USAGE_ANGLE)) { |
| 1056 SetParameter(function_name, decoder, texture, GL_TEXTURE_USAGE_ANGLE, | 1058 SetParameter(function_name, error_state, texture, GL_TEXTURE_USAGE_ANGLE, |
| 1057 definition->usage()); | 1059 definition->usage()); |
| 1058 } | 1060 } |
| 1059 | 1061 |
| 1060 return true; | 1062 return true; |
| 1061 } | 1063 } |
| 1062 | 1064 |
| 1063 void TextureManager::SetParameter( | 1065 void TextureManager::SetParameter( |
| 1064 const char* function_name, GLES2Decoder* decoder, | 1066 const char* function_name, ErrorState* error_state, |
| 1065 Texture* texture, GLenum pname, GLint param) { | 1067 Texture* texture, GLenum pname, GLint param) { |
| 1066 DCHECK(decoder); | 1068 DCHECK(error_state); |
| 1067 DCHECK(texture); | 1069 DCHECK(texture); |
| 1068 if (!texture->CanRender(feature_info_)) { | 1070 if (!texture->CanRender(feature_info_)) { |
| 1069 DCHECK_NE(0, num_unrenderable_textures_); | 1071 DCHECK_NE(0, num_unrenderable_textures_); |
| 1070 --num_unrenderable_textures_; | 1072 --num_unrenderable_textures_; |
| 1071 } | 1073 } |
| 1072 if (!texture->SafeToRenderFrom()) { | 1074 if (!texture->SafeToRenderFrom()) { |
| 1073 DCHECK_NE(0, num_unsafe_textures_); | 1075 DCHECK_NE(0, num_unsafe_textures_); |
| 1074 --num_unsafe_textures_; | 1076 --num_unsafe_textures_; |
| 1075 } | 1077 } |
| 1076 GLenum result = texture->SetParameter(feature_info_, pname, param); | 1078 GLenum result = texture->SetParameter(feature_info_, pname, param); |
| 1077 if (result != GL_NO_ERROR) { | 1079 if (result != GL_NO_ERROR) { |
| 1078 if (result == GL_INVALID_ENUM) { | 1080 if (result == GL_INVALID_ENUM) { |
| 1079 GLESDECODER_SET_GL_ERROR_INVALID_ENUM( | 1081 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( |
| 1080 decoder, function_name, param, "param"); | 1082 error_state, function_name, param, "param"); |
| 1081 } else { | 1083 } else { |
| 1082 GLESDECODER_SET_GL_ERROR_INVALID_PARAM( | 1084 ERRORSTATE_SET_GL_ERROR_INVALID_PARAM( |
| 1083 decoder, result, function_name, pname, static_cast<GLint>(param)); | 1085 error_state, result, function_name, pname, static_cast<GLint>(param)); |
| 1084 } | 1086 } |
| 1085 } else { | 1087 } else { |
| 1086 // Texture tracking pools exist only for the command decoder, so | 1088 // Texture tracking pools exist only for the command decoder, so |
| 1087 // do not pass them on to the native GL implementation. | 1089 // do not pass them on to the native GL implementation. |
| 1088 if (pname != GL_TEXTURE_POOL_CHROMIUM) { | 1090 if (pname != GL_TEXTURE_POOL_CHROMIUM) { |
| 1089 glTexParameteri(texture->target(), pname, param); | 1091 glTexParameteri(texture->target(), pname, param); |
| 1090 } | 1092 } |
| 1091 } | 1093 } |
| 1092 | 1094 |
| 1093 if (!texture->CanRender(feature_info_)) { | 1095 if (!texture->CanRender(feature_info_)) { |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1233 void TextureManager::AddToSignature( | 1235 void TextureManager::AddToSignature( |
| 1234 Texture* texture, | 1236 Texture* texture, |
| 1235 GLenum target, | 1237 GLenum target, |
| 1236 GLint level, | 1238 GLint level, |
| 1237 std::string* signature) const { | 1239 std::string* signature) const { |
| 1238 texture->AddToSignature(feature_info_.get(), target, level, signature); | 1240 texture->AddToSignature(feature_info_.get(), target, level, signature); |
| 1239 } | 1241 } |
| 1240 | 1242 |
| 1241 } // namespace gles2 | 1243 } // namespace gles2 |
| 1242 } // namespace gpu | 1244 } // namespace gpu |
| OLD | NEW |