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

Side by Side Diff: src/gpu/gl/GrGLCaps.cpp

Issue 1001503002: Implement support for mixed sampled render targets (Closed) Base URL: https://skia.googlesource.com/skia.git@mix1
Patch Set: Fix build error related to isMultisamped renaming Created 5 years, 6 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 | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLGpu.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 8
9 #include "GrGLCaps.h" 9 #include "GrGLCaps.h"
10 10
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 285
286 // We need dual source blending and the ability to disable multisample in or der to support mixed 286 // We need dual source blending and the ability to disable multisample in or der to support mixed
287 // samples in every corner case. 287 // samples in every corner case.
288 if (fMultisampleDisableSupport && glslCaps->fDualSourceBlendingSupport) { 288 if (fMultisampleDisableSupport && glslCaps->fDualSourceBlendingSupport) {
289 // We understand "mixed samples" to mean the collective capability of 3 different extensions 289 // We understand "mixed samples" to mean the collective capability of 3 different extensions
290 glslCaps->fMixedSamplesSupport = 290 glslCaps->fMixedSamplesSupport =
291 ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") && 291 ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") &&
292 ctxInfo.hasExtension("GL_NV_sample_mask_override_coverage") && 292 ctxInfo.hasExtension("GL_NV_sample_mask_override_coverage") &&
293 ctxInfo.hasExtension("GL_EXT_raster_multisample"); 293 ctxInfo.hasExtension("GL_EXT_raster_multisample");
294 } 294 }
295 // Workaround NVIDIA bug related to glInvalidateFramebuffer and mixed sample s.
296 if (kNVIDIA_GrGLDriver == ctxInfo.driver() && fShaderCaps->mixedSamplesSuppo rt()) {
297 fDiscardRenderTargetSupport = false;
298 fInvalidateFBType = kNone_InvalidateFBType;
299 }
295 300
296 /************************************************************************** 301 /**************************************************************************
297 * GrCaps fields 302 * GrCaps fields
298 **************************************************************************/ 303 **************************************************************************/
299 304
300 this->initFSAASupport(ctxInfo, gli); 305 this->initFSAASupport(ctxInfo, gli);
301 this->initStencilFormats(ctxInfo); 306 this->initStencilFormats(ctxInfo);
302 307
303 if (kGL_GrGLStandard == standard) { 308 if (kGL_GrGLStandard == standard) {
304 // we could also look for GL_ATI_separate_stencil extension or 309 // we could also look for GL_ATI_separate_stencil extension or
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa ce* gli) { 787 void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa ce* gli) {
783 788
784 fMSFBOType = kNone_MSFBOType; 789 fMSFBOType = kNone_MSFBOType;
785 if (kGL_GrGLStandard != ctxInfo.standard()) { 790 if (kGL_GrGLStandard != ctxInfo.standard()) {
786 // We prefer the EXT/IMG extension over ES3 MSAA because we've observed 791 // We prefer the EXT/IMG extension over ES3 MSAA because we've observed
787 // ES3 driver bugs on at least one device with a tiled GPU (N10). 792 // ES3 driver bugs on at least one device with a tiled GPU (N10).
788 if (ctxInfo.hasExtension("GL_EXT_multisampled_render_to_texture")) { 793 if (ctxInfo.hasExtension("GL_EXT_multisampled_render_to_texture")) {
789 fMSFBOType = kES_EXT_MsToTexture_MSFBOType; 794 fMSFBOType = kES_EXT_MsToTexture_MSFBOType;
790 } else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture") ) { 795 } else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture") ) {
791 fMSFBOType = kES_IMG_MsToTexture_MSFBOType; 796 fMSFBOType = kES_IMG_MsToTexture_MSFBOType;
797 } else if (fShaderCaps->mixedSamplesSupport() && fShaderCaps->pathRender ingSupport()) {
798 fMSFBOType = kMixedSamples_MSFBOType;
792 } else if (ctxInfo.version() >= GR_GL_VER(3,0)) { 799 } else if (ctxInfo.version() >= GR_GL_VER(3,0)) {
793 fMSFBOType = GrGLCaps::kES_3_0_MSFBOType; 800 fMSFBOType = GrGLCaps::kES_3_0_MSFBOType;
794 } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) { 801 } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) {
795 // chrome's extension is equivalent to the EXT msaa 802 // chrome's extension is equivalent to the EXT msaa
796 // and fbo_blit extensions. 803 // and fbo_blit extensions.
797 fMSFBOType = kDesktop_EXT_MSFBOType; 804 fMSFBOType = kDesktop_EXT_MSFBOType;
798 } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) { 805 } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) {
799 fMSFBOType = kES_Apple_MSFBOType; 806 fMSFBOType = kES_Apple_MSFBOType;
800 } 807 }
801 } else { 808 } else {
802 if ((ctxInfo.version() >= GR_GL_VER(3,0)) || 809 if (fShaderCaps->mixedSamplesSupport() && fShaderCaps->pathRenderingSupp ort()) {
810 fMSFBOType = kMixedSamples_MSFBOType;
811 } else if ((ctxInfo.version() >= GR_GL_VER(3,0)) ||
803 ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { 812 ctxInfo.hasExtension("GL_ARB_framebuffer_object")) {
804 fMSFBOType = GrGLCaps::kDesktop_ARB_MSFBOType; 813 fMSFBOType = GrGLCaps::kDesktop_ARB_MSFBOType;
805 } else if (ctxInfo.hasExtension("GL_EXT_framebuffer_multisample") && 814 } else if (ctxInfo.hasExtension("GL_EXT_framebuffer_multisample") &&
806 ctxInfo.hasExtension("GL_EXT_framebuffer_blit")) { 815 ctxInfo.hasExtension("GL_EXT_framebuffer_blit")) {
807 fMSFBOType = GrGLCaps::kDesktop_EXT_MSFBOType; 816 fMSFBOType = GrGLCaps::kDesktop_EXT_MSFBOType;
808 } 817 }
809 } 818 }
810 } 819 }
811 820
812 namespace { 821 namespace {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 } 934 }
926 935
927 static const char* kMSFBOExtStr[] = { 936 static const char* kMSFBOExtStr[] = {
928 "None", 937 "None",
929 "ARB", 938 "ARB",
930 "EXT", 939 "EXT",
931 "ES 3.0", 940 "ES 3.0",
932 "Apple", 941 "Apple",
933 "IMG MS To Texture", 942 "IMG MS To Texture",
934 "EXT MS To Texture", 943 "EXT MS To Texture",
944 "MixedSamples",
935 }; 945 };
936 GR_STATIC_ASSERT(0 == kNone_MSFBOType); 946 GR_STATIC_ASSERT(0 == kNone_MSFBOType);
937 GR_STATIC_ASSERT(1 == kDesktop_ARB_MSFBOType); 947 GR_STATIC_ASSERT(1 == kDesktop_ARB_MSFBOType);
938 GR_STATIC_ASSERT(2 == kDesktop_EXT_MSFBOType); 948 GR_STATIC_ASSERT(2 == kDesktop_EXT_MSFBOType);
939 GR_STATIC_ASSERT(3 == kES_3_0_MSFBOType); 949 GR_STATIC_ASSERT(3 == kES_3_0_MSFBOType);
940 GR_STATIC_ASSERT(4 == kES_Apple_MSFBOType); 950 GR_STATIC_ASSERT(4 == kES_Apple_MSFBOType);
941 GR_STATIC_ASSERT(5 == kES_IMG_MsToTexture_MSFBOType); 951 GR_STATIC_ASSERT(5 == kES_IMG_MsToTexture_MSFBOType);
942 GR_STATIC_ASSERT(6 == kES_EXT_MsToTexture_MSFBOType); 952 GR_STATIC_ASSERT(6 == kES_EXT_MsToTexture_MSFBOType);
953 GR_STATIC_ASSERT(7 == kMixedSamples_MSFBOType);
943 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kMSFBOExtStr) == kLast_MSFBOType + 1); 954 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kMSFBOExtStr) == kLast_MSFBOType + 1);
944 955
945 static const char* kInvalidateFBTypeStr[] = { 956 static const char* kInvalidateFBTypeStr[] = {
946 "None", 957 "None",
947 "Discard", 958 "Discard",
948 "Invalidate", 959 "Invalidate",
949 }; 960 };
950 GR_STATIC_ASSERT(0 == kNone_InvalidateFBType); 961 GR_STATIC_ASSERT(0 == kNone_InvalidateFBType);
951 GR_STATIC_ASSERT(1 == kDiscard_InvalidateFBType); 962 GR_STATIC_ASSERT(1 == kDiscard_InvalidateFBType);
952 GR_STATIC_ASSERT(2 == kInvalidate_InvalidateFBType); 963 GR_STATIC_ASSERT(2 == kInvalidate_InvalidateFBType);
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 if (fGeometryShaderSupport) { 1120 if (fGeometryShaderSupport) {
1110 for (int p = 0; p < kGrSLPrecisionCount; ++p) { 1121 for (int p = 0; p < kGrSLPrecisionCount; ++p) {
1111 fFloatPrecisions[kGeometry_GrShaderType][p] = fFloatPrecisions[kVert ex_GrShaderType][p]; 1122 fFloatPrecisions[kGeometry_GrShaderType][p] = fFloatPrecisions[kVert ex_GrShaderType][p];
1112 } 1123 }
1113 } 1124 }
1114 } 1125 }
1115 1126
1116 1127
1117 1128
1118 1129
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLGpu.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698