Add GrCap for initializing textures
Change-Id: Ifdf50c6686a3369a00cc15fa868a4807f0898fd6 Bug: skia:8378 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/204266 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Kevin Lubick <kjlubick@google.com>
This commit is contained in:
parent
f1633afac3
commit
61a5f0aef8
@ -33,6 +33,7 @@ GrCaps::GrCaps(const GrContextOptions& options) {
|
|||||||
fPreferClientSideDynamicBuffers = false;
|
fPreferClientSideDynamicBuffers = false;
|
||||||
fPreferFullscreenClears = false;
|
fPreferFullscreenClears = false;
|
||||||
fMustClearUploadedBufferData = false;
|
fMustClearUploadedBufferData = false;
|
||||||
|
fShouldInitializeTextures = false;
|
||||||
fSupportsAHardwareBufferImages = false;
|
fSupportsAHardwareBufferImages = false;
|
||||||
fFenceSyncSupport = false;
|
fFenceSyncSupport = false;
|
||||||
fCrossContextTextureSupport = false;
|
fCrossContextTextureSupport = false;
|
||||||
@ -198,6 +199,7 @@ void GrCaps::dumpJSON(SkJSONWriter* writer) const {
|
|||||||
writer->appendBool("Prefer client-side dynamic buffers", fPreferClientSideDynamicBuffers);
|
writer->appendBool("Prefer client-side dynamic buffers", fPreferClientSideDynamicBuffers);
|
||||||
writer->appendBool("Prefer fullscreen clears", fPreferFullscreenClears);
|
writer->appendBool("Prefer fullscreen clears", fPreferFullscreenClears);
|
||||||
writer->appendBool("Must clear buffer memory", fMustClearUploadedBufferData);
|
writer->appendBool("Must clear buffer memory", fMustClearUploadedBufferData);
|
||||||
|
writer->appendBool("Should initialize textures", fShouldInitializeTextures);
|
||||||
writer->appendBool("Supports importing AHardwareBuffers", fSupportsAHardwareBufferImages);
|
writer->appendBool("Supports importing AHardwareBuffers", fSupportsAHardwareBufferImages);
|
||||||
writer->appendBool("Fence sync support", fFenceSyncSupport);
|
writer->appendBool("Fence sync support", fFenceSyncSupport);
|
||||||
writer->appendBool("Cross context texture support", fCrossContextTextureSupport);
|
writer->appendBool("Cross context texture support", fCrossContextTextureSupport);
|
||||||
|
@ -233,6 +233,13 @@ public:
|
|||||||
is not initialized (even if not read by draw calls). */
|
is not initialized (even if not read by draw calls). */
|
||||||
bool mustClearUploadedBufferData() const { return fMustClearUploadedBufferData; }
|
bool mustClearUploadedBufferData() const { return fMustClearUploadedBufferData; }
|
||||||
|
|
||||||
|
/** For some environments, there is a performance or safety concern to not
|
||||||
|
initializing textures. For example, with WebGL and Firefox, there is a large
|
||||||
|
performance hit to not doing it.
|
||||||
|
*/
|
||||||
|
bool shouldInitializeTextures() const { return fShouldInitializeTextures; }
|
||||||
|
|
||||||
|
|
||||||
/** Returns true if the given backend supports importing AHardwareBuffers via the
|
/** Returns true if the given backend supports importing AHardwareBuffers via the
|
||||||
* GrAHardwarebufferImageGenerator. This will only ever be supported on Android devices with API
|
* GrAHardwarebufferImageGenerator. This will only ever be supported on Android devices with API
|
||||||
* level >= 26.
|
* level >= 26.
|
||||||
@ -345,6 +352,7 @@ protected:
|
|||||||
bool fPreferClientSideDynamicBuffers : 1;
|
bool fPreferClientSideDynamicBuffers : 1;
|
||||||
bool fPreferFullscreenClears : 1;
|
bool fPreferFullscreenClears : 1;
|
||||||
bool fMustClearUploadedBufferData : 1;
|
bool fMustClearUploadedBufferData : 1;
|
||||||
|
bool fShouldInitializeTextures : 1;
|
||||||
bool fSupportsAHardwareBufferImages : 1;
|
bool fSupportsAHardwareBufferImages : 1;
|
||||||
bool fHalfFloatVertexAttributeSupport : 1;
|
bool fHalfFloatVertexAttributeSupport : 1;
|
||||||
bool fClampToBorderSupport : 1;
|
bool fClampToBorderSupport : 1;
|
||||||
|
@ -536,6 +536,16 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
|||||||
fMustClearUploadedBufferData = true;
|
fMustClearUploadedBufferData = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In a WASM build on Firefox, we see warnings like
|
||||||
|
// WebGL warning: texSubImage2D: This operation requires zeroing texture data. This is slow.
|
||||||
|
// WebGL warning: texSubImage2D: Texture has not been initialized prior to a partial upload,
|
||||||
|
// forcing the browser to clear it. This may be slow.
|
||||||
|
// Setting the initial clear seems to make those warnings go away and offers a substantial
|
||||||
|
// boost in performance in Firefox. Chrome sees a more modest increase.
|
||||||
|
if (kIsWebGL) {
|
||||||
|
fShouldInitializeTextures = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (GR_IS_GR_GL(standard)) {
|
if (GR_IS_GR_GL(standard)) {
|
||||||
// ARB allows mixed size FBO attachments, EXT does not.
|
// ARB allows mixed size FBO attachments, EXT does not.
|
||||||
if (version >= GR_GL_VER(3, 0) ||
|
if (version >= GR_GL_VER(3, 0) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user