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

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

Issue 1344373004: TexSubImage2D no longer needs to match the type in ES3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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_textures.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 <cmath> 10 #include <cmath>
(...skipping 10436 matching lines...) Expand 10 before | Expand all | Expand 10 after
10447 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCompressedTexSubImage3D", 10447 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCompressedTexSubImage3D",
10448 "level does not exist"); 10448 "level does not exist");
10449 return; 10449 return;
10450 } 10450 }
10451 if (internal_format != format) { 10451 if (internal_format != format) {
10452 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCompressedTexSubImage3D", 10452 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCompressedTexSubImage3D",
10453 "format does not match internal format"); 10453 "format does not match internal format");
10454 return; 10454 return;
10455 } 10455 }
10456 if (!texture->ValidForTexture(target, level, xoffset, yoffset, zoffset, 10456 if (!texture->ValidForTexture(target, level, xoffset, yoffset, zoffset,
10457 width, height, depth, type)) { 10457 width, height, depth)) {
10458 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedTexSubImage3D", 10458 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedTexSubImage3D",
10459 "bad dimensions"); 10459 "bad dimensions");
10460 return; 10460 return;
10461 } 10461 }
10462 if (!ValidateCompressedTexFuncData("glCompressedTexSubImage3D", 10462 if (!ValidateCompressedTexFuncData("glCompressedTexSubImage3D",
10463 width, height, depth, format, 10463 width, height, depth, format,
10464 image_size) || 10464 image_size) ||
10465 !ValidateCompressedTexSubDimensions("glCompressedTexSubImage3D", 10465 !ValidateCompressedTexSubDimensions("glCompressedTexSubImage3D",
10466 target, level, xoffset, yoffset, 10466 target, level, xoffset, yoffset,
10467 zoffset, width, height, depth, 10467 zoffset, width, height, depth,
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
10654 "glCompressedTexSubImage2D", "level does not exist."); 10654 "glCompressedTexSubImage2D", "level does not exist.");
10655 return; 10655 return;
10656 } 10656 }
10657 if (internal_format != format) { 10657 if (internal_format != format) {
10658 LOCAL_SET_GL_ERROR( 10658 LOCAL_SET_GL_ERROR(
10659 GL_INVALID_OPERATION, 10659 GL_INVALID_OPERATION,
10660 "glCompressedTexSubImage2D", "format does not match internal format."); 10660 "glCompressedTexSubImage2D", "format does not match internal format.");
10661 return; 10661 return;
10662 } 10662 }
10663 if (!texture->ValidForTexture(target, level, xoffset, yoffset, 0, width, 10663 if (!texture->ValidForTexture(target, level, xoffset, yoffset, 0, width,
10664 height, 1, type)) { 10664 height, 1)) {
10665 LOCAL_SET_GL_ERROR( 10665 LOCAL_SET_GL_ERROR(
10666 GL_INVALID_VALUE, "glCompressedTexSubImage2D", "bad dimensions."); 10666 GL_INVALID_VALUE, "glCompressedTexSubImage2D", "bad dimensions.");
10667 return; 10667 return;
10668 } 10668 }
10669 10669
10670 if (!ValidateCompressedTexFuncData("glCompressedTexSubImage2D", 10670 if (!ValidateCompressedTexFuncData("glCompressedTexSubImage2D",
10671 width, height, 1, format, image_size) || 10671 width, height, 1, format, image_size) ||
10672 !ValidateCompressedTexSubDimensions("glCompressedTexSubImage2D", 10672 !ValidateCompressedTexSubDimensions("glCompressedTexSubImage2D",
10673 target, level, xoffset, yoffset, 0, 10673 target, level, xoffset, yoffset, 0,
10674 width, height, 1, format, texture)) { 10674 width, height, 1, format, texture)) {
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
10864 LOCAL_SET_GL_ERROR( 10864 LOCAL_SET_GL_ERROR(
10865 GL_INVALID_OPERATION, 10865 GL_INVALID_OPERATION,
10866 "glCopyTexSubImage2D", "unknown texture for target"); 10866 "glCopyTexSubImage2D", "unknown texture for target");
10867 return; 10867 return;
10868 } 10868 }
10869 Texture* texture = texture_ref->texture(); 10869 Texture* texture = texture_ref->texture();
10870 GLenum type = 0; 10870 GLenum type = 0;
10871 GLenum format = 0; 10871 GLenum format = 0;
10872 if (!texture->GetLevelType(target, level, &type, &format) || 10872 if (!texture->GetLevelType(target, level, &type, &format) ||
10873 !texture->ValidForTexture( 10873 !texture->ValidForTexture(
10874 target, level, xoffset, yoffset, 0, width, height, 1, type)) { 10874 target, level, xoffset, yoffset, 0, width, height, 1)) {
10875 LOCAL_SET_GL_ERROR( 10875 LOCAL_SET_GL_ERROR(
10876 GL_INVALID_VALUE, "glCopyTexSubImage2D", "bad dimensions."); 10876 GL_INVALID_VALUE, "glCopyTexSubImage2D", "bad dimensions.");
10877 return; 10877 return;
10878 } 10878 }
10879 10879
10880 // Check we have compatible formats. 10880 // Check we have compatible formats.
10881 GLenum read_format = GetBoundReadFrameBufferInternalFormat(); 10881 GLenum read_format = GetBoundReadFrameBufferInternalFormat();
10882 uint32 channels_exist = GLES2Util::GetChannelsForFormat(read_format); 10882 uint32 channels_exist = GLES2Util::GetChannelsForFormat(read_format);
10883 uint32 channels_needed = GLES2Util::GetChannelsForFormat(format); 10883 uint32 channels_needed = GLES2Util::GetChannelsForFormat(format);
10884 10884
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
11019 GLenum internal_format = 0; 11019 GLenum internal_format = 0;
11020 if (!texture->GetLevelType(target, level, &current_type, &internal_format)) { 11020 if (!texture->GetLevelType(target, level, &current_type, &internal_format)) {
11021 LOCAL_SET_GL_ERROR( 11021 LOCAL_SET_GL_ERROR(
11022 GL_INVALID_OPERATION, function_name, "level does not exist."); 11022 GL_INVALID_OPERATION, function_name, "level does not exist.");
11023 return false; 11023 return false;
11024 } 11024 }
11025 if (!texture_manager()->ValidateTextureParameters(state_.GetErrorState(), 11025 if (!texture_manager()->ValidateTextureParameters(state_.GetErrorState(),
11026 function_name, format, type, internal_format, level)) { 11026 function_name, format, type, internal_format, level)) {
11027 return false; 11027 return false;
11028 } 11028 }
11029 if (type != current_type) { 11029 if (type != current_type && !feature_info_->IsES3Enabled()) {
11030 LOCAL_SET_GL_ERROR( 11030 LOCAL_SET_GL_ERROR(
11031 GL_INVALID_OPERATION, 11031 GL_INVALID_OPERATION,
11032 function_name, "type does not match type of texture."); 11032 function_name, "type does not match type of texture.");
11033 return false; 11033 return false;
11034 } 11034 }
11035 if (!texture->ValidForTexture( 11035 if (!texture->ValidForTexture(
11036 target, level, xoffset, yoffset, 0, width, height, 1, type)) { 11036 target, level, xoffset, yoffset, 0, width, height, 1)) {
11037 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "bad dimensions."); 11037 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "bad dimensions.");
11038 return false; 11038 return false;
11039 } 11039 }
11040 if ((GLES2Util::GetChannelsForFormat(format) & 11040 if ((GLES2Util::GetChannelsForFormat(format) &
11041 (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 11041 (GLES2Util::kDepth | GLES2Util::kStencil)) != 0
11042 && !feature_info_->IsES3Enabled()) { 11042 && !feature_info_->IsES3Enabled()) {
11043 LOCAL_SET_GL_ERROR( 11043 LOCAL_SET_GL_ERROR(
11044 GL_INVALID_OPERATION, 11044 GL_INVALID_OPERATION,
11045 function_name, "can not supply data for depth or stencil textures"); 11045 function_name, "can not supply data for depth or stencil textures");
11046 return false; 11046 return false;
(...skipping 2045 matching lines...) Expand 10 before | Expand all | Expand 10 after
13092 "source texture bad dimensions"); 13092 "source texture bad dimensions");
13093 return; 13093 return;
13094 } 13094 }
13095 } 13095 }
13096 13096
13097 GLenum source_type = 0; 13097 GLenum source_type = 0;
13098 GLenum source_internal_format = 0; 13098 GLenum source_internal_format = 0;
13099 source_texture->GetLevelType(source_texture->target(), 0, &source_type, 13099 source_texture->GetLevelType(source_texture->target(), 0, &source_type,
13100 &source_internal_format); 13100 &source_internal_format);
13101 if (!source_texture->ValidForTexture(source_texture->target(), 0, x, y, 0, 13101 if (!source_texture->ValidForTexture(source_texture->target(), 0, x, y, 0,
13102 width, height, 1, source_type)) { 13102 width, height, 1)) {
13103 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM", 13103 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
13104 "source texture bad dimensions."); 13104 "source texture bad dimensions.");
13105 return; 13105 return;
13106 } 13106 }
13107 13107
13108 GLenum dest_type = 0; 13108 GLenum dest_type = 0;
13109 GLenum dest_internal_format = 0; 13109 GLenum dest_internal_format = 0;
13110 bool dest_level_defined = dest_texture->GetLevelType( 13110 bool dest_level_defined = dest_texture->GetLevelType(
13111 dest_texture->target(), 0, &dest_type, &dest_internal_format); 13111 dest_texture->target(), 0, &dest_type, &dest_internal_format);
13112 if (!dest_level_defined) { 13112 if (!dest_level_defined) {
13113 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCopySubTextureCHROMIUM", 13113 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glCopySubTextureCHROMIUM",
13114 "destination texture is not defined"); 13114 "destination texture is not defined");
13115 return; 13115 return;
13116 } 13116 }
13117 if (!dest_texture->ValidForTexture(dest_texture->target(), 0, xoffset, 13117 if (!dest_texture->ValidForTexture(dest_texture->target(), 0, xoffset,
13118 yoffset, 0, width, height, 1, dest_type)) { 13118 yoffset, 0, width, height, 1)) {
13119 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM", 13119 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopySubTextureCHROMIUM",
13120 "destination texture bad dimensions."); 13120 "destination texture bad dimensions.");
13121 return; 13121 return;
13122 } 13122 }
13123 13123
13124 if (!ValidateCopyTextureCHROMIUM("glCopySubTextureCHROMIUM", target, 13124 if (!ValidateCopyTextureCHROMIUM("glCopySubTextureCHROMIUM", target,
13125 source_texture_ref, dest_texture_ref, 13125 source_texture_ref, dest_texture_ref,
13126 dest_internal_format)) { 13126 dest_internal_format)) {
13127 return; 13127 return;
13128 } 13128 }
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
13424 "source texture bad dimensions"); 13424 "source texture bad dimensions");
13425 return; 13425 return;
13426 } 13426 }
13427 } 13427 }
13428 13428
13429 GLenum source_type = 0; 13429 GLenum source_type = 0;
13430 GLenum source_internal_format = 0; 13430 GLenum source_internal_format = 0;
13431 source_texture->GetLevelType(source_texture->target(), 0, &source_type, 13431 source_texture->GetLevelType(source_texture->target(), 0, &source_type,
13432 &source_internal_format); 13432 &source_internal_format);
13433 if (!source_texture->ValidForTexture(source_texture->target(), 0, x, y, 0, 13433 if (!source_texture->ValidForTexture(source_texture->target(), 0, x, y, 0,
13434 width, height, 1, source_type)) { 13434 width, height, 1)) {
13435 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedCopySubTextureCHROMIUM", 13435 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedCopySubTextureCHROMIUM",
13436 "source texture bad dimensions."); 13436 "source texture bad dimensions.");
13437 return; 13437 return;
13438 } 13438 }
13439 13439
13440 GLenum dest_type = 0; 13440 GLenum dest_type = 0;
13441 GLenum dest_internal_format = 0; 13441 GLenum dest_internal_format = 0;
13442 bool dest_level_defined = dest_texture->GetLevelType( 13442 bool dest_level_defined = dest_texture->GetLevelType(
13443 dest_texture->target(), 0, &dest_type, &dest_internal_format); 13443 dest_texture->target(), 0, &dest_type, &dest_internal_format);
13444 if (!dest_level_defined) { 13444 if (!dest_level_defined) {
13445 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 13445 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
13446 "glCompressedCopySubTextureCHROMIUM", 13446 "glCompressedCopySubTextureCHROMIUM",
13447 "destination texture is not defined"); 13447 "destination texture is not defined");
13448 return; 13448 return;
13449 } 13449 }
13450 if (!dest_texture->ValidForTexture(dest_texture->target(), 0, xoffset, 13450 if (!dest_texture->ValidForTexture(dest_texture->target(), 0, xoffset,
13451 yoffset, 0, width, height, 1, dest_type)) { 13451 yoffset, 0, width, height, 1)) {
13452 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedCopySubTextureCHROMIUM", 13452 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCompressedCopySubTextureCHROMIUM",
13453 "destination texture bad dimensions."); 13453 "destination texture bad dimensions.");
13454 return; 13454 return;
13455 } 13455 }
13456 13456
13457 if (!ValidateCompressedCopyTextureCHROMIUM( 13457 if (!ValidateCompressedCopyTextureCHROMIUM(
13458 "glCompressedCopySubTextureCHROMIUM", target, source_texture_ref, 13458 "glCompressedCopySubTextureCHROMIUM", target, source_texture_ref,
13459 dest_texture_ref)) { 13459 dest_texture_ref)) {
13460 return; 13460 return;
13461 } 13461 }
(...skipping 1587 matching lines...) Expand 10 before | Expand all | Expand 10 after
15049 return error::kNoError; 15049 return error::kNoError;
15050 } 15050 }
15051 15051
15052 // Include the auto-generated part of this file. We split this because it means 15052 // Include the auto-generated part of this file. We split this because it means
15053 // we can easily edit the non-auto generated parts right here in this file 15053 // we can easily edit the non-auto generated parts right here in this file
15054 // instead of having to edit some template or the code generator. 15054 // instead of having to edit some template or the code generator.
15055 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 15055 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
15056 15056
15057 } // namespace gles2 15057 } // namespace gles2
15058 } // namespace gpu 15058 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698