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/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 16394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16405 // INVALID_OPERATION is already generated by | 16405 // INVALID_OPERATION is already generated by |
16406 // ValidateCopyTextureCHROMIUMInternalFormats. | 16406 // ValidateCopyTextureCHROMIUMInternalFormats. |
16407 if (method == NOT_COPYABLE) { | 16407 if (method == NOT_COPYABLE) { |
16408 return; | 16408 return; |
16409 } | 16409 } |
16410 | 16410 |
16411 // Draw to a fbo attaching level 0 of an intermediate texture, | 16411 // Draw to a fbo attaching level 0 of an intermediate texture, |
16412 // then copy from the fbo to dest texture level with glCopyTexImage2D. | 16412 // then copy from the fbo to dest texture level with glCopyTexImage2D. |
16413 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for | 16413 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for |
16414 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D | 16414 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D |
16415 // in ES2 context. Go to DRAW_AND_COPY path in this case. | 16415 // in ES2 context. DIRECT_DRAW path isn't available for cube map dest texture |
| 16416 // either due to it may be cube map incomplete. Go to DRAW_AND_COPY path in |
| 16417 // these cases. |
16416 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both | 16418 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both |
16417 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > | 16419 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > |
16418 // 0 are not available due to a framebuffer completeness bug: | 16420 // 0 are not available due to a framebuffer completeness bug: |
16419 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and | 16421 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and |
16420 // OpenGL ES 3.0 can be lifted. | 16422 // OpenGL ES 3.0 can be lifted. |
16421 if ((dest_level > 0 && method == DIRECT_DRAW) || | 16423 if (((dest_level > 0 || dest_binding_target == GL_TEXTURE_CUBE_MAP) && |
| 16424 method == DIRECT_DRAW) || |
16422 (source_level > 0 && method == DIRECT_COPY)) { | 16425 (source_level > 0 && method == DIRECT_COPY)) { |
16423 method = DRAW_AND_COPY; | 16426 method = DRAW_AND_COPY; |
16424 } | 16427 } |
16425 | 16428 |
16426 if (feature_info_->feature_flags().desktop_srgb_support) { | 16429 if (feature_info_->feature_flags().desktop_srgb_support) { |
16427 bool enable_framebuffer_srgb = | 16430 bool enable_framebuffer_srgb = |
16428 GetColorEncodingFromInternalFormat(source_internal_format) == GL_SRGB || | 16431 GetColorEncodingFromInternalFormat(source_internal_format) == GL_SRGB || |
16429 GetColorEncodingFromInternalFormat(internal_format) == GL_SRGB; | 16432 GetColorEncodingFromInternalFormat(internal_format) == GL_SRGB; |
16430 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); | 16433 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); |
16431 } | 16434 } |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16669 // INVALID_OPERATION is already generated by | 16672 // INVALID_OPERATION is already generated by |
16670 // ValidateCopyTextureCHROMIUMInternalFormats. | 16673 // ValidateCopyTextureCHROMIUMInternalFormats. |
16671 if (method == NOT_COPYABLE) { | 16674 if (method == NOT_COPYABLE) { |
16672 return; | 16675 return; |
16673 } | 16676 } |
16674 | 16677 |
16675 // Draw to a fbo attaching level 0 of an intermediate texture, | 16678 // Draw to a fbo attaching level 0 of an intermediate texture, |
16676 // then copy from the fbo to dest texture level with glCopyTexImage2D. | 16679 // then copy from the fbo to dest texture level with glCopyTexImage2D. |
16677 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for | 16680 // For WebGL 1.0 or OpenGL ES 2.0, DIRECT_DRAW path isn't available for |
16678 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D | 16681 // dest_level > 0 due to level > 0 isn't supported by glFramebufferTexture2D |
16679 // in ES2 context. Go to DRAW_AND_COPY path in this case. | 16682 // in ES2 context. DIRECT_DRAW path isn't available for cube map dest texture |
| 16683 // either due to it may be cube map incomplete. Go to DRAW_AND_COPY path in |
| 16684 // these cases. |
16680 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both | 16685 // TODO(qiankun.miao@intel.com): for WebGL 2.0 or OpenGL ES 3.0, both |
16681 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > | 16686 // DIRECT_DRAW path for dest_level > 0 and DIRECT_COPY path for source_level > |
16682 // 0 are not available due to a framebuffer completeness bug: | 16687 // 0 are not available due to a framebuffer completeness bug: |
16683 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and | 16688 // crbug.com/678526. Once the bug is fixed, the limitation for WebGL 2.0 and |
16684 // OpenGL ES 3.0 can be lifted. | 16689 // OpenGL ES 3.0 can be lifted. |
16685 if ((dest_level > 0 && method == DIRECT_DRAW) || | 16690 if (((dest_level > 0 || dest_binding_target == GL_TEXTURE_CUBE_MAP) && |
| 16691 method == DIRECT_DRAW) || |
16686 (source_level > 0 && method == DIRECT_COPY)) { | 16692 (source_level > 0 && method == DIRECT_COPY)) { |
16687 method = DRAW_AND_COPY; | 16693 method = DRAW_AND_COPY; |
16688 } | 16694 } |
16689 | 16695 |
16690 if (feature_info_->feature_flags().desktop_srgb_support) { | 16696 if (feature_info_->feature_flags().desktop_srgb_support) { |
16691 bool enable_framebuffer_srgb = | 16697 bool enable_framebuffer_srgb = |
16692 GetColorEncodingFromInternalFormat(source_internal_format) == GL_SRGB || | 16698 GetColorEncodingFromInternalFormat(source_internal_format) == GL_SRGB || |
16693 GetColorEncodingFromInternalFormat(dest_internal_format) == GL_SRGB; | 16699 GetColorEncodingFromInternalFormat(dest_internal_format) == GL_SRGB; |
16694 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); | 16700 state_.EnableDisableFramebufferSRGB(enable_framebuffer_srgb); |
16695 } | 16701 } |
(...skipping 2501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19197 } | 19203 } |
19198 | 19204 |
19199 // Include the auto-generated part of this file. We split this because it means | 19205 // Include the auto-generated part of this file. We split this because it means |
19200 // we can easily edit the non-auto generated parts right here in this file | 19206 // we can easily edit the non-auto generated parts right here in this file |
19201 // instead of having to edit some template or the code generator. | 19207 // instead of having to edit some template or the code generator. |
19202 #include "base/macros.h" | 19208 #include "base/macros.h" |
19203 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 19209 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
19204 | 19210 |
19205 } // namespace gles2 | 19211 } // namespace gles2 |
19206 } // namespace gpu | 19212 } // namespace gpu |
OLD | NEW |