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 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
7 #include <algorithm> | 10 #include <algorithm> |
8 #include <set> | 11 #include <set> |
9 #include <utility> | 12 #include <utility> |
10 | 13 |
11 #include "base/bits.h" | 14 #include "base/bits.h" |
12 #include "base/lazy_instance.h" | 15 #include "base/lazy_instance.h" |
13 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
14 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
15 #include "base/trace_event/memory_dump_manager.h" | 18 #include "base/trace_event/memory_dump_manager.h" |
16 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 19 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 target_ == GL_TEXTURE_RECTANGLE_ARB) { | 587 target_ == GL_TEXTURE_RECTANGLE_ARB) { |
585 return false; | 588 return false; |
586 } | 589 } |
587 | 590 |
588 if (static_cast<size_t>(base_level_) >= face_infos_[0].level_infos.size()) { | 591 if (static_cast<size_t>(base_level_) >= face_infos_[0].level_infos.size()) { |
589 return false; | 592 return false; |
590 } | 593 } |
591 | 594 |
592 // Can't generate mips for depth or stencil textures. | 595 // Can't generate mips for depth or stencil textures. |
593 const Texture::LevelInfo& base = face_infos_[0].level_infos[base_level_]; | 596 const Texture::LevelInfo& base = face_infos_[0].level_infos[base_level_]; |
594 uint32 channels = GLES2Util::GetChannelsForFormat(base.format); | 597 uint32_t channels = GLES2Util::GetChannelsForFormat(base.format); |
595 if (channels & (GLES2Util::kDepth | GLES2Util::kStencil)) { | 598 if (channels & (GLES2Util::kDepth | GLES2Util::kStencil)) { |
596 return false; | 599 return false; |
597 } | 600 } |
598 | 601 |
599 // TODO(gman): Check internal_format, format and type. | 602 // TODO(gman): Check internal_format, format and type. |
600 for (size_t ii = 0; ii < face_infos_.size(); ++ii) { | 603 for (size_t ii = 0; ii < face_infos_.size(); ++ii) { |
601 const LevelInfo& info = face_infos_[ii].level_infos[base_level_]; | 604 const LevelInfo& info = face_infos_[ii].level_infos[base_level_]; |
602 if ((info.target == 0) || (info.width != base.width) || | 605 if ((info.target == 0) || (info.width != base.width) || |
603 (info.height != base.height) || (info.depth != base.depth) || | 606 (info.height != base.height) || (info.depth != base.depth) || |
604 (info.format != base.format) || | 607 (info.format != base.format) || |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 GLint xoffset, | 900 GLint xoffset, |
898 GLint yoffset, | 901 GLint yoffset, |
899 GLint zoffset, | 902 GLint zoffset, |
900 GLsizei width, | 903 GLsizei width, |
901 GLsizei height, | 904 GLsizei height, |
902 GLsizei depth) const { | 905 GLsizei depth) const { |
903 size_t face_index = GLES2Util::GLTargetToFaceIndex(target); | 906 size_t face_index = GLES2Util::GLTargetToFaceIndex(target); |
904 if (level >= 0 && face_index < face_infos_.size() && | 907 if (level >= 0 && face_index < face_infos_.size() && |
905 static_cast<size_t>(level) < face_infos_[face_index].level_infos.size()) { | 908 static_cast<size_t>(level) < face_infos_[face_index].level_infos.size()) { |
906 const LevelInfo& info = face_infos_[face_index].level_infos[level]; | 909 const LevelInfo& info = face_infos_[face_index].level_infos[level]; |
907 int32 max_x; | 910 int32_t max_x; |
908 int32 max_y; | 911 int32_t max_y; |
909 int32 max_z; | 912 int32_t max_z; |
910 return SafeAddInt32(xoffset, width, &max_x) && | 913 return SafeAddInt32(xoffset, width, &max_x) && |
911 SafeAddInt32(yoffset, height, &max_y) && | 914 SafeAddInt32(yoffset, height, &max_y) && |
912 SafeAddInt32(zoffset, depth, &max_z) && | 915 SafeAddInt32(zoffset, depth, &max_z) && |
913 xoffset >= 0 && | 916 xoffset >= 0 && |
914 yoffset >= 0 && | 917 yoffset >= 0 && |
915 zoffset >= 0 && | 918 zoffset >= 0 && |
916 max_x <= info.width && | 919 max_x <= info.width && |
917 max_y <= info.height && | 920 max_y <= info.height && |
918 max_z <= info.depth; | 921 max_z <= info.depth; |
919 } | 922 } |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1462 this, "gpu::TextureManager", base::ThreadTaskRunnerHandle::Get()); | 1465 this, "gpu::TextureManager", base::ThreadTaskRunnerHandle::Get()); |
1463 } | 1466 } |
1464 | 1467 |
1465 return true; | 1468 return true; |
1466 } | 1469 } |
1467 | 1470 |
1468 scoped_refptr<TextureRef> | 1471 scoped_refptr<TextureRef> |
1469 TextureManager::CreateDefaultAndBlackTextures( | 1472 TextureManager::CreateDefaultAndBlackTextures( |
1470 GLenum target, | 1473 GLenum target, |
1471 GLuint* black_texture) { | 1474 GLuint* black_texture) { |
1472 static uint8 black[] = {0, 0, 0, 255}; | 1475 static uint8_t black[] = {0, 0, 0, 255}; |
1473 | 1476 |
1474 // Sampling a texture not associated with any EGLImage sibling will return | 1477 // Sampling a texture not associated with any EGLImage sibling will return |
1475 // black values according to the spec. | 1478 // black values according to the spec. |
1476 bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES); | 1479 bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES); |
1477 bool needs_faces = (target == GL_TEXTURE_CUBE_MAP); | 1480 bool needs_faces = (target == GL_TEXTURE_CUBE_MAP); |
1478 bool is_3d_or_2d_array_target = (target == GL_TEXTURE_3D || | 1481 bool is_3d_or_2d_array_target = (target == GL_TEXTURE_3D || |
1479 target == GL_TEXTURE_2D_ARRAY); | 1482 target == GL_TEXTURE_2D_ARRAY); |
1480 | 1483 |
1481 // Make default textures and texture for replacing non-renderable textures. | 1484 // Make default textures and texture for replacing non-renderable textures. |
1482 GLuint ids[2]; | 1485 GLuint ids[2]; |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1845 // For TexSubImage calls, internal_format isn't part of the parameters, | 1848 // For TexSubImage calls, internal_format isn't part of the parameters, |
1846 // so its validation needs to be after the internal_format/format/type | 1849 // so its validation needs to be after the internal_format/format/type |
1847 // combination validation. Otherwise, an unexpected INVALID_ENUM could be | 1850 // combination validation. Otherwise, an unexpected INVALID_ENUM could be |
1848 // generated instead of INVALID_OPERATION. | 1851 // generated instead of INVALID_OPERATION. |
1849 if (!validators->texture_internal_format.IsValid(internal_format)) { | 1852 if (!validators->texture_internal_format.IsValid(internal_format)) { |
1850 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( | 1853 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( |
1851 error_state, function_name, internal_format, "internal_format"); | 1854 error_state, function_name, internal_format, "internal_format"); |
1852 return false; | 1855 return false; |
1853 } | 1856 } |
1854 if (!feature_info_->IsES3Enabled()) { | 1857 if (!feature_info_->IsES3Enabled()) { |
1855 uint32 channels = GLES2Util::GetChannelsForFormat(format); | 1858 uint32_t channels = GLES2Util::GetChannelsForFormat(format); |
1856 if ((channels & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 && level) { | 1859 if ((channels & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 && level) { |
1857 ERRORSTATE_SET_GL_ERROR( | 1860 ERRORSTATE_SET_GL_ERROR( |
1858 error_state, GL_INVALID_OPERATION, function_name, | 1861 error_state, GL_INVALID_OPERATION, function_name, |
1859 (std::string("invalid format ") + GLES2Util::GetStringEnum(format) + | 1862 (std::string("invalid format ") + GLES2Util::GetStringEnum(format) + |
1860 " for level != 0").c_str()); | 1863 " for level != 0").c_str()); |
1861 return false; | 1864 return false; |
1862 } | 1865 } |
1863 } | 1866 } |
1864 return true; | 1867 return true; |
1865 } | 1868 } |
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2611 return GL_HALF_FLOAT_OES; | 2614 return GL_HALF_FLOAT_OES; |
2612 case GL_BGRA8_EXT: | 2615 case GL_BGRA8_EXT: |
2613 return GL_UNSIGNED_BYTE; | 2616 return GL_UNSIGNED_BYTE; |
2614 default: | 2617 default: |
2615 return GL_NONE; | 2618 return GL_NONE; |
2616 } | 2619 } |
2617 } | 2620 } |
2618 | 2621 |
2619 } // namespace gles2 | 2622 } // namespace gles2 |
2620 } // namespace gpu | 2623 } // namespace gpu |
OLD | NEW |