Differentiate maxColorSamples and maxStencilSamples in GrCaps
BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1592803002 Review URL: https://codereview.chromium.org/1592803002
This commit is contained in:
parent
03108de163
commit
eed519e6a2
@ -122,7 +122,7 @@ public:
|
||||
bool compressedTexSubImageSupport() const { return fCompressedTexSubImageSupport; }
|
||||
bool oversizedStencilSupport() const { return fOversizedStencilSupport; }
|
||||
bool textureBarrierSupport() const { return fTextureBarrierSupport; }
|
||||
bool mixedSamplesSupport() const { return fMixedSamplesSupport; }
|
||||
bool usesMixedSamples() const { return fUsesMixedSamples; }
|
||||
|
||||
bool useDrawInsteadOfClear() const { return fUseDrawInsteadOfClear; }
|
||||
bool useDrawInsteadOfPartialRenderTargetWrite() const {
|
||||
@ -188,7 +188,19 @@ public:
|
||||
int maxTileSize() const { SkASSERT(fMaxTileSize <= fMaxTextureSize); return fMaxTileSize; }
|
||||
|
||||
// Will be 0 if MSAA is not supported
|
||||
int maxSampleCount() const { return fMaxSampleCount; }
|
||||
int maxColorSampleCount() const { return fMaxColorSampleCount; }
|
||||
// Will be 0 if MSAA is not supported
|
||||
int maxStencilSampleCount() const { return fMaxStencilSampleCount; }
|
||||
// We require the sample count to be less than maxColorSampleCount and maxStencilSampleCount.
|
||||
// If we are using mixed samples, we only care about stencil.
|
||||
int maxSampleCount() const {
|
||||
if (this->usesMixedSamples()) {
|
||||
return this->maxStencilSampleCount();
|
||||
} else {
|
||||
return SkTMin(this->maxColorSampleCount(), this->maxStencilSampleCount());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
virtual bool isConfigTexturable(GrPixelConfig config) const = 0;
|
||||
virtual bool isConfigRenderable(GrPixelConfig config, bool withMSAA) const = 0;
|
||||
@ -235,7 +247,7 @@ protected:
|
||||
bool fCompressedTexSubImageSupport : 1;
|
||||
bool fOversizedStencilSupport : 1;
|
||||
bool fTextureBarrierSupport : 1;
|
||||
bool fMixedSamplesSupport : 1;
|
||||
bool fUsesMixedSamples : 1;
|
||||
bool fSupportsInstancedDraws : 1;
|
||||
bool fFullClearIsFree : 1;
|
||||
bool fMustClearUploadedBufferData : 1;
|
||||
@ -257,7 +269,8 @@ protected:
|
||||
int fMaxRenderTargetSize;
|
||||
int fMaxTextureSize;
|
||||
int fMaxTileSize;
|
||||
int fMaxSampleCount;
|
||||
int fMaxColorSampleCount;
|
||||
int fMaxStencilSampleCount;
|
||||
|
||||
private:
|
||||
virtual void onApplyOptionsOverrides(const GrContextOptions&) {};
|
||||
|
@ -90,7 +90,7 @@ GrCaps::GrCaps(const GrContextOptions& options) {
|
||||
fCompressedTexSubImageSupport = false;
|
||||
fOversizedStencilSupport = false;
|
||||
fTextureBarrierSupport = false;
|
||||
fMixedSamplesSupport = false;
|
||||
fUsesMixedSamples = false;
|
||||
fSupportsInstancedDraws = false;
|
||||
fFullClearIsFree = false;
|
||||
fMustClearUploadedBufferData = false;
|
||||
@ -104,7 +104,8 @@ GrCaps::GrCaps(const GrContextOptions& options) {
|
||||
|
||||
fMaxRenderTargetSize = 1;
|
||||
fMaxTextureSize = 1;
|
||||
fMaxSampleCount = 0;
|
||||
fMaxColorSampleCount = 0;
|
||||
fMaxStencilSampleCount = 0;
|
||||
|
||||
fSuppressPrints = options.fSuppressPrints;
|
||||
fImmediateFlush = options.fImmediateMode;
|
||||
@ -160,7 +161,7 @@ SkString GrCaps::dump() const {
|
||||
r.appendf("Compressed Update Support : %s\n", gNY[fCompressedTexSubImageSupport]);
|
||||
r.appendf("Oversized Stencil Support : %s\n", gNY[fOversizedStencilSupport]);
|
||||
r.appendf("Texture Barrier Support : %s\n", gNY[fTextureBarrierSupport]);
|
||||
r.appendf("Mixed Samples Support : %s\n", gNY[fMixedSamplesSupport]);
|
||||
r.appendf("Uses Mixed Samples : %s\n", gNY[fUsesMixedSamples]);
|
||||
r.appendf("Supports instanced draws : %s\n", gNY[fSupportsInstancedDraws]);
|
||||
r.appendf("Full screen clear is free : %s\n", gNY[fFullClearIsFree]);
|
||||
r.appendf("Must clear buffer memory : %s\n", gNY[fMustClearUploadedBufferData]);
|
||||
@ -175,7 +176,8 @@ SkString GrCaps::dump() const {
|
||||
|
||||
r.appendf("Max Texture Size : %d\n", fMaxTextureSize);
|
||||
r.appendf("Max Render Target Size : %d\n", fMaxRenderTargetSize);
|
||||
r.appendf("Max Sample Count : %d\n", fMaxSampleCount);
|
||||
r.appendf("Max Color Sample Count : %d\n", fMaxColorSampleCount);
|
||||
r.appendf("Max Stencil Sample Count : %d\n", fMaxStencilSampleCount);
|
||||
|
||||
static const char* kBlendEquationSupportNames[] = {
|
||||
"Basic",
|
||||
|
@ -572,8 +572,7 @@ int GrContext::getRecommendedSampleCount(GrPixelConfig config,
|
||||
chosenSampleCount = 16;
|
||||
}
|
||||
}
|
||||
return chosenSampleCount <= fGpu->caps()->maxSampleCount() ?
|
||||
chosenSampleCount : 0;
|
||||
return chosenSampleCount <= fGpu->caps()->maxSampleCount() ? chosenSampleCount : 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -283,17 +283,19 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
||||
|
||||
// We need dual source blending and the ability to disable multisample in order to support mixed
|
||||
// samples in every corner case.
|
||||
if (fMultisampleDisableSupport && glslCaps->dualSourceBlendingSupport()) {
|
||||
fMixedSamplesSupport = ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") ||
|
||||
if (fMultisampleDisableSupport &&
|
||||
glslCaps->dualSourceBlendingSupport() &&
|
||||
fShaderCaps->pathRenderingSupport()) {
|
||||
fUsesMixedSamples = ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") ||
|
||||
ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_mixed_samples");
|
||||
// Workaround NVIDIA bug related to glInvalidateFramebuffer and mixed samples.
|
||||
if (fMixedSamplesSupport && kNVIDIA_GrGLDriver == ctxInfo.driver()) {
|
||||
if (fUsesMixedSamples && kNVIDIA_GrGLDriver == ctxInfo.driver()) {
|
||||
fDiscardRenderTargetSupport = false;
|
||||
fInvalidateFBType = kNone_InvalidateFBType;
|
||||
}
|
||||
}
|
||||
|
||||
// fPathRenderingSupport and fMixedSamplesSupport must be set before calling initFSAASupport.
|
||||
// fUsesMixedSamples must be set before calling initFSAASupport.
|
||||
this->initFSAASupport(ctxInfo, gli);
|
||||
this->initBlendEqationSupport(ctxInfo);
|
||||
this->initStencilFormats(ctxInfo);
|
||||
@ -402,10 +404,11 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
||||
|
||||
// initFSAASupport() must have been called before this point
|
||||
if (GrGLCaps::kES_IMG_MsToTexture_MSFBOType == fMSFBOType) {
|
||||
GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES_IMG, &fMaxSampleCount);
|
||||
GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES_IMG, &fMaxColorSampleCount);
|
||||
} else if (GrGLCaps::kNone_MSFBOType != fMSFBOType) {
|
||||
GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES, &fMaxSampleCount);
|
||||
GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES, &fMaxColorSampleCount);
|
||||
}
|
||||
fMaxStencilSampleCount = fMaxColorSampleCount;
|
||||
|
||||
if (kPowerVR54x_GrGLRenderer == ctxInfo.renderer() ||
|
||||
kPowerVRRogue_GrGLRenderer == ctxInfo.renderer() ||
|
||||
@ -684,7 +687,7 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
||||
fMSFBOType = kES_EXT_MsToTexture_MSFBOType;
|
||||
} else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture")) {
|
||||
fMSFBOType = kES_IMG_MsToTexture_MSFBOType;
|
||||
} else if (fMixedSamplesSupport && fShaderCaps->pathRenderingSupport()) {
|
||||
} else if (fUsesMixedSamples) {
|
||||
fMSFBOType = kMixedSamples_MSFBOType;
|
||||
} else if (ctxInfo.version() >= GR_GL_VER(3,0)) {
|
||||
fMSFBOType = GrGLCaps::kES_3_0_MSFBOType;
|
||||
@ -696,7 +699,7 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
||||
fMSFBOType = kES_Apple_MSFBOType;
|
||||
}
|
||||
} else {
|
||||
if (fMixedSamplesSupport && fShaderCaps->pathRenderingSupport()) {
|
||||
if (fUsesMixedSamples) {
|
||||
fMSFBOType = kMixedSamples_MSFBOType;
|
||||
} else if ((ctxInfo.version() >= GR_GL_VER(3,0)) ||
|
||||
ctxInfo.hasExtension("GL_ARB_framebuffer_object")) {
|
||||
|
@ -341,7 +341,7 @@ void GrGLGpu::onResetContext(uint32_t resetBits) {
|
||||
// "opacity", which can then be blended into the color buffer to accomplish antialiasing.
|
||||
// Enable coverage modulation suitable for premultiplied alpha colors.
|
||||
// This state has no effect when not rendering to a mixed sampled target.
|
||||
if (this->caps()->mixedSamplesSupport()) {
|
||||
if (this->caps()->usesMixedSamples()) {
|
||||
GL_CALL(CoverageModulation(GR_GL_RGBA));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user