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 5898 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5909 const char* function_name, | 5909 const char* function_name, |
5910 FramebufferOperation op) { | 5910 FramebufferOperation op) { |
5911 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); | 5911 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); |
5912 | 5912 |
5913 // Because of performance issues, no-op if the format of the attachment is | 5913 // Because of performance issues, no-op if the format of the attachment is |
5914 // DEPTH_STENCIL and only one part is intended to be invalidated. | 5914 // DEPTH_STENCIL and only one part is intended to be invalidated. |
5915 bool has_depth_stencil_format = framebuffer && | 5915 bool has_depth_stencil_format = framebuffer && |
5916 framebuffer->HasDepthStencilFormatAttachment(); | 5916 framebuffer->HasDepthStencilFormatAttachment(); |
5917 bool invalidate_depth = false; | 5917 bool invalidate_depth = false; |
5918 bool invalidate_stencil = false; | 5918 bool invalidate_stencil = false; |
5919 std::unique_ptr<GLenum[]> validated_attachments(new GLenum[count]); | 5919 std::unique_ptr<GLenum[]> validated_attachments(new GLenum[count+1]); |
5920 GLsizei validated_count = 0; | 5920 GLsizei validated_count = 0; |
5921 | 5921 |
5922 // Validates the attachments. If one of them fails, the whole command fails. | 5922 // Validates the attachments. If one of them fails, the whole command fails. |
5923 GLenum thresh0 = GL_COLOR_ATTACHMENT0 + group_->max_color_attachments(); | 5923 GLenum thresh0 = GL_COLOR_ATTACHMENT0 + group_->max_color_attachments(); |
5924 GLenum thresh1 = GL_COLOR_ATTACHMENT15; | 5924 GLenum thresh1 = GL_COLOR_ATTACHMENT15; |
5925 for (GLsizei i = 0; i < count; ++i) { | 5925 for (GLsizei i = 0; i < count; ++i) { |
5926 GLenum attachment = attachments[i]; | 5926 GLenum attachment = attachments[i]; |
5927 if (framebuffer) { | 5927 if (framebuffer) { |
5928 if (attachment >= thresh0 && attachment <= thresh1) { | 5928 if (attachment >= thresh0 && attachment <= thresh1) { |
5929 LOCAL_SET_GL_ERROR( | 5929 LOCAL_SET_GL_ERROR( |
(...skipping 22 matching lines...) Expand all Loading... |
5952 } else { | 5952 } else { |
5953 if (!validators_->backbuffer_attachment.IsValid(attachment)) { | 5953 if (!validators_->backbuffer_attachment.IsValid(attachment)) { |
5954 LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, attachment, | 5954 LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, attachment, |
5955 "attachments"); | 5955 "attachments"); |
5956 return; | 5956 return; |
5957 } | 5957 } |
5958 } | 5958 } |
5959 validated_attachments[validated_count++] = attachment; | 5959 validated_attachments[validated_count++] = attachment; |
5960 } | 5960 } |
5961 if (invalidate_depth && invalidate_stencil) { | 5961 if (invalidate_depth && invalidate_stencil) { |
5962 validated_attachments[validated_count++] = GL_DEPTH_STENCIL_ATTACHMENT; | 5962 // We do not use GL_DEPTH_STENCIL_ATTACHMENT here because |
| 5963 // it is not a valid token for glDiscardFramebufferEXT. |
| 5964 validated_attachments[validated_count++] = GL_DEPTH_ATTACHMENT; |
| 5965 validated_attachments[validated_count++] = GL_STENCIL_ATTACHMENT; |
5963 } | 5966 } |
5964 | 5967 |
5965 // If the default framebuffer is bound but we are still rendering to an | 5968 // If the default framebuffer is bound but we are still rendering to an |
5966 // FBO, translate attachment names that refer to default framebuffer | 5969 // FBO, translate attachment names that refer to default framebuffer |
5967 // channels to corresponding framebuffer attachments. | 5970 // channels to corresponding framebuffer attachments. |
5968 std::unique_ptr<GLenum[]> translated_attachments(new GLenum[validated_count]); | 5971 std::unique_ptr<GLenum[]> translated_attachments(new GLenum[validated_count]); |
5969 for (GLsizei i = 0; i < validated_count; ++i) { | 5972 for (GLsizei i = 0; i < validated_count; ++i) { |
5970 GLenum attachment = validated_attachments[i]; | 5973 GLenum attachment = validated_attachments[i]; |
5971 if (!framebuffer && GetBackbufferServiceId()) { | 5974 if (!framebuffer && GetBackbufferServiceId()) { |
5972 switch (attachment) { | 5975 switch (attachment) { |
(...skipping 13022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18995 } | 18998 } |
18996 | 18999 |
18997 // Include the auto-generated part of this file. We split this because it means | 19000 // Include the auto-generated part of this file. We split this because it means |
18998 // we can easily edit the non-auto generated parts right here in this file | 19001 // we can easily edit the non-auto generated parts right here in this file |
18999 // instead of having to edit some template or the code generator. | 19002 // instead of having to edit some template or the code generator. |
19000 #include "base/macros.h" | 19003 #include "base/macros.h" |
19001 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 19004 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
19002 | 19005 |
19003 } // namespace gles2 | 19006 } // namespace gles2 |
19004 } // namespace gpu | 19007 } // namespace gpu |
OLD | NEW |