libchromiumcontent/patches/037-webgl_context_attribute...

98 строки
4.3 KiB
Diff

diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 6cfd9df..ec79d1c 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -1020,9 +1020,9 @@ RendererBlinkPlatformImpl::createOffscreenGraphicsContext3DProvider(
web_attributes.support_stencil || web_attributes.support_antialias;
attributes.sample_buffers = 0;
attributes.bind_generates_resource = false;
- // Prefer discrete GPU for WebGL.
- attributes.gpu_preference = gl::PreferDiscreteGpu;
-
+ attributes.gpu_preference = web_attributes.prefer_integrated_gpu
+ ? gl::PreferIntegratedGpu
+ : gl::PreferDiscreteGpu;
attributes.fail_if_major_perf_caveat =
web_attributes.fail_if_major_performance_caveat;
DCHECK_GT(web_attributes.web_gl_version, 0u);
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl b/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl
index 752714c..058b969 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributes.idl
@@ -34,6 +34,12 @@ enum CanvasPixelFormat {
"float16",
};
+enum CanvasPowerPreference {
+ "default",
+ "low-power",
+ "high-performance",
+};
+
[PermissiveDictionaryConversion]
dictionary CanvasContextCreationAttributes {
// Canvas 2D attributes
@@ -50,5 +56,6 @@ dictionary CanvasContextCreationAttributes {
boolean antialias = true;
boolean premultipliedAlpha = true;
boolean preserveDrawingBuffer = false;
+ CanvasPowerPreference powerPreference = "default";
boolean failIfMajorPerformanceCaveat = false;
};
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp
index 8c07036..223ba31 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp
@@ -17,6 +17,7 @@ WebGLContextAttributes toWebGLContextAttributes(
result.setAntialias(attrs.antialias());
result.setPremultipliedAlpha(attrs.premultipliedAlpha());
result.setPreserveDrawingBuffer(attrs.preserveDrawingBuffer());
+ result.setPowerPreference(attrs.powerPreference());
result.setFailIfMajorPerformanceCaveat(attrs.failIfMajorPerformanceCaveat());
return result;
}
@@ -26,6 +27,7 @@ Platform::ContextAttributes toPlatformContextAttributes(
unsigned web_gl_version,
bool support_own_offscreen_surface) {
Platform::ContextAttributes result;
+ result.prefer_integrated_gpu = attrs.powerPreference() == "low-power";
result.fail_if_major_performance_caveat =
attrs.failIfMajorPerformanceCaveat();
result.web_gl_version = web_gl_version;
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl
index 9a48073..5196a53 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl
+++ b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributes.idl
@@ -26,6 +26,12 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2
+enum WebGLPowerPreference {
+ "default",
+ "low-power",
+ "high-performance",
+};
+
dictionary WebGLContextAttributes {
boolean alpha = true;
boolean depth = true;
@@ -33,5 +39,6 @@ dictionary WebGLContextAttributes {
boolean antialias = true;
boolean premultipliedAlpha = true;
boolean preserveDrawingBuffer = false;
+ WebGLPowerPreference powerPreference = "default";
boolean failIfMajorPerformanceCaveat = false;
};
diff --git a/third_party/WebKit/public/platform/Platform.h b/third_party/WebKit/public/platform/Platform.h
index 2cd7334..98ecb84 100644
--- a/third_party/WebKit/public/platform/Platform.h
+++ b/third_party/WebKit/public/platform/Platform.h
@@ -466,6 +466,7 @@ class BLINK_PLATFORM_EXPORT Platform {
// GPU ----------------------------------------------------------------
//
struct ContextAttributes {
+ bool prefer_integrated_gpu = false;
bool fail_if_major_performance_caveat = false;
unsigned web_gl_version = 0;
// Offscreen contexts usually share a surface for the default frame buffer