mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 04:05:32 +00:00
Bug 888445 - Only use SkiaGL canvas on NVIDIA r=bjacob
This commit is contained in:
parent
4b92bdf899
commit
3a6780ebb5
@ -104,6 +104,7 @@
|
||||
#include "GLContextProvider.h"
|
||||
#include "GLContextSkia.h"
|
||||
#include "SurfaceTypes.h"
|
||||
#include "nsIGfxInfo.h"
|
||||
using mozilla::gl::GLContext;
|
||||
using mozilla::gl::GLContextProvider;
|
||||
#endif
|
||||
@ -859,34 +860,40 @@ CanvasRenderingContext2D::EnsureTarget()
|
||||
|
||||
if (layerManager) {
|
||||
#ifdef USE_SKIA_GPU
|
||||
if (gfxPlatform::GetPlatform()->UseAcceleratedSkiaCanvas()) {
|
||||
SurfaceCaps caps = SurfaceCaps::ForRGBA();
|
||||
caps.preserve = true;
|
||||
if (gfxPlatform::GetPlatform()->UseAcceleratedSkiaCanvas()) {
|
||||
SurfaceCaps caps = SurfaceCaps::ForRGBA();
|
||||
caps.preserve = true;
|
||||
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
layers::ShadowLayerForwarder *forwarder = layerManager->AsShadowForwarder();
|
||||
if (forwarder) {
|
||||
caps.surfaceAllocator = static_cast<layers::ISurfaceAllocator*>(forwarder);
|
||||
}
|
||||
layers::ShadowLayerForwarder *forwarder = layerManager->AsShadowForwarder();
|
||||
if (forwarder) {
|
||||
caps.surfaceAllocator = static_cast<layers::ISurfaceAllocator*>(forwarder);
|
||||
}
|
||||
#endif
|
||||
|
||||
DemoteOldestContextIfNecessary();
|
||||
DemoteOldestContextIfNecessary();
|
||||
|
||||
nsRefPtr<GLContext> glContext;
|
||||
nsRefPtr<GLContext> glContext;
|
||||
nsCOMPtr<nsIGfxInfo> gfxInfo = do_GetService("@mozilla.org/gfx/info;1");
|
||||
nsString vendor;
|
||||
|
||||
if (!mForceSoftware) {
|
||||
glContext = GLContextProvider::CreateOffscreen(gfxIntSize(size.width, size.height),
|
||||
caps, GLContext::ContextFlagsNone);
|
||||
}
|
||||
if (!mForceSoftware &&
|
||||
gfxInfo &&
|
||||
NS_SUCCEEDED(gfxInfo->GetAdapterVendorID(vendor)) &&
|
||||
StringBeginsWith(vendor, NS_LITERAL_STRING("NVIDIA")))
|
||||
{
|
||||
glContext = GLContextProvider::CreateOffscreen(gfxIntSize(size.width, size.height),
|
||||
caps, GLContext::ContextFlagsNone);
|
||||
}
|
||||
|
||||
if (glContext) {
|
||||
SkAutoTUnref<GrGLInterface> i(CreateGrGLInterfaceFromGLContext(glContext));
|
||||
mTarget = Factory::CreateDrawTargetSkiaWithGLContextAndGrGLInterface(glContext, i, size, format);
|
||||
AddDemotableContext(this);
|
||||
} else {
|
||||
mTarget = layerManager->CreateDrawTarget(size, format);
|
||||
}
|
||||
} else
|
||||
if (glContext) {
|
||||
SkAutoTUnref<GrGLInterface> i(CreateGrGLInterfaceFromGLContext(glContext));
|
||||
mTarget = Factory::CreateDrawTargetSkiaWithGLContextAndGrGLInterface(glContext, i, size, format);
|
||||
AddDemotableContext(this);
|
||||
} else {
|
||||
mTarget = layerManager->CreateDrawTarget(size, format);
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
mTarget = layerManager->CreateDrawTarget(size, format);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user