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

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

Issue 996163003: Offscreen framebuffer creation on Mali-400 GPU (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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/config/gpu_driver_bug_list_json.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 <list> 10 #include <list>
(...skipping 2595 matching lines...) Expand 10 before | Expand all | Expand 10 after
2606 const bool rgb8_supported = 2606 const bool rgb8_supported =
2607 context_->HasExtension("GL_OES_rgb8_rgba8"); 2607 context_->HasExtension("GL_OES_rgb8_rgba8");
2608 // The only available default render buffer formats in GLES2 have very 2608 // The only available default render buffer formats in GLES2 have very
2609 // little precision. Don't enable multisampling unless 8-bit render 2609 // little precision. Don't enable multisampling unless 8-bit render
2610 // buffer formats are available--instead fall back to 8-bit textures. 2610 // buffer formats are available--instead fall back to 8-bit textures.
2611 if (rgb8_supported && offscreen_target_samples_ > 1) { 2611 if (rgb8_supported && offscreen_target_samples_ > 1) {
2612 offscreen_target_color_format_ = attrib_parser.alpha_size > 0 ? 2612 offscreen_target_color_format_ = attrib_parser.alpha_size > 0 ?
2613 GL_RGBA8 : GL_RGB8; 2613 GL_RGBA8 : GL_RGB8;
2614 } else { 2614 } else {
2615 offscreen_target_samples_ = 1; 2615 offscreen_target_samples_ = 1;
2616 offscreen_target_color_format_ = attrib_parser.alpha_size > 0 ? 2616 offscreen_target_color_format_ = attrib_parser.alpha_size > 0 ||
2617 GL_RGBA : GL_RGB; 2617 workarounds().disable_gl_rgb_format ? GL_RGBA : GL_RGB;
piman 2015/03/31 04:06:30 nit: can you fix indenting? e.g. by running git cl
2618 } 2618 }
2619 2619
2620 // ANGLE only supports packed depth/stencil formats, so use it if it is 2620 // ANGLE only supports packed depth/stencil formats, so use it if it is
2621 // available. 2621 // available.
2622 const bool depth24_stencil8_supported = 2622 const bool depth24_stencil8_supported =
2623 feature_info_->feature_flags().packed_depth24_stencil8; 2623 feature_info_->feature_flags().packed_depth24_stencil8;
2624 VLOG(1) << "GL_OES_packed_depth_stencil " 2624 VLOG(1) << "GL_OES_packed_depth_stencil "
2625 << (depth24_stencil8_supported ? "" : "not ") << "supported."; 2625 << (depth24_stencil8_supported ? "" : "not ") << "supported.";
2626 if ((attrib_parser.depth_size > 0 || attrib_parser.stencil_size > 0) && 2626 if ((attrib_parser.depth_size > 0 || attrib_parser.stencil_size > 0) &&
2627 depth24_stencil8_supported) { 2627 depth24_stencil8_supported) {
2628 offscreen_target_depth_format_ = GL_DEPTH24_STENCIL8; 2628 offscreen_target_depth_format_ = GL_DEPTH24_STENCIL8;
2629 offscreen_target_stencil_format_ = 0; 2629 offscreen_target_stencil_format_ = 0;
2630 } else { 2630 } else {
2631 // It may be the case that this depth/stencil combination is not 2631 // It may be the case that this depth/stencil combination is not
2632 // supported, but this will be checked later by CheckFramebufferStatus. 2632 // supported, but this will be checked later by CheckFramebufferStatus.
2633 offscreen_target_depth_format_ = attrib_parser.depth_size > 0 ? 2633 offscreen_target_depth_format_ = attrib_parser.depth_size > 0 ?
2634 GL_DEPTH_COMPONENT16 : 0; 2634 GL_DEPTH_COMPONENT16 : 0;
2635 offscreen_target_stencil_format_ = attrib_parser.stencil_size > 0 ? 2635 offscreen_target_stencil_format_ = attrib_parser.stencil_size > 0 ?
2636 GL_STENCIL_INDEX8 : 0; 2636 GL_STENCIL_INDEX8 : 0;
2637 } 2637 }
2638 } else { 2638 } else {
2639 offscreen_target_color_format_ = attrib_parser.alpha_size > 0 ? 2639 offscreen_target_color_format_ = attrib_parser.alpha_size > 0 ||
2640 GL_RGBA : GL_RGB; 2640 workarounds().disable_gl_rgb_format ? GL_RGBA : GL_RGB;
2641 2641
2642 // If depth is requested at all, use the packed depth stencil format if 2642 // If depth is requested at all, use the packed depth stencil format if
2643 // it's available, as some desktop GL drivers don't support any non-packed 2643 // it's available, as some desktop GL drivers don't support any non-packed
2644 // formats for depth attachments. 2644 // formats for depth attachments.
2645 const bool depth24_stencil8_supported = 2645 const bool depth24_stencil8_supported =
2646 feature_info_->feature_flags().packed_depth24_stencil8; 2646 feature_info_->feature_flags().packed_depth24_stencil8;
2647 VLOG(1) << "GL_EXT_packed_depth_stencil " 2647 VLOG(1) << "GL_EXT_packed_depth_stencil "
2648 << (depth24_stencil8_supported ? "" : "not ") << "supported."; 2648 << (depth24_stencil8_supported ? "" : "not ") << "supported.";
2649 2649
2650 if ((attrib_parser.depth_size > 0 || attrib_parser.stencil_size > 0) && 2650 if ((attrib_parser.depth_size > 0 || attrib_parser.stencil_size > 0) &&
2651 depth24_stencil8_supported) { 2651 depth24_stencil8_supported) {
2652 offscreen_target_depth_format_ = GL_DEPTH24_STENCIL8; 2652 offscreen_target_depth_format_ = GL_DEPTH24_STENCIL8;
2653 offscreen_target_stencil_format_ = 0; 2653 offscreen_target_stencil_format_ = 0;
2654 } else { 2654 } else {
2655 offscreen_target_depth_format_ = attrib_parser.depth_size > 0 ? 2655 offscreen_target_depth_format_ = attrib_parser.depth_size > 0 ?
2656 GL_DEPTH_COMPONENT : 0; 2656 GL_DEPTH_COMPONENT : 0;
2657 offscreen_target_stencil_format_ = attrib_parser.stencil_size > 0 ? 2657 offscreen_target_stencil_format_ = attrib_parser.stencil_size > 0 ?
2658 GL_STENCIL_INDEX : 0; 2658 GL_STENCIL_INDEX : 0;
2659 } 2659 }
2660 } 2660 }
2661 2661
2662 offscreen_saved_color_format_ = attrib_parser.alpha_size > 0 ? 2662 offscreen_saved_color_format_ = attrib_parser.alpha_size > 0 ||
2663 GL_RGBA : GL_RGB; 2663 workarounds().disable_gl_rgb_format ? GL_RGBA : GL_RGB;
2664 2664
2665 // Create the target frame buffer. This is the one that the client renders 2665 // Create the target frame buffer. This is the one that the client renders
2666 // directly to. 2666 // directly to.
2667 offscreen_target_frame_buffer_.reset(new BackFramebuffer(this)); 2667 offscreen_target_frame_buffer_.reset(new BackFramebuffer(this));
2668 offscreen_target_frame_buffer_->Create(); 2668 offscreen_target_frame_buffer_->Create();
2669 // Due to GLES2 format limitations, either the color texture (for 2669 // Due to GLES2 format limitations, either the color texture (for
2670 // non-multisampling) or the color render buffer (for multisampling) will be 2670 // non-multisampling) or the color render buffer (for multisampling) will be
2671 // attached to the offscreen frame buffer. The render buffer has more 2671 // attached to the offscreen frame buffer. The render buffer has more
2672 // limited formats available to it, but the texture can't do multisampling. 2672 // limited formats available to it, but the texture can't do multisampling.
2673 if (IsOffscreenBufferMultisampled()) { 2673 if (IsOffscreenBufferMultisampled()) {
(...skipping 9757 matching lines...) Expand 10 before | Expand all | Expand 10 after
12431 } 12431 }
12432 } 12432 }
12433 12433
12434 // Include the auto-generated part of this file. We split this because it means 12434 // Include the auto-generated part of this file. We split this because it means
12435 // we can easily edit the non-auto generated parts right here in this file 12435 // we can easily edit the non-auto generated parts right here in this file
12436 // instead of having to edit some template or the code generator. 12436 // instead of having to edit some template or the code generator.
12437 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 12437 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
12438 12438
12439 } // namespace gles2 12439 } // namespace gles2
12440 } // namespace gpu 12440 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | gpu/config/gpu_driver_bug_list_json.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698