Loading gfx/layers/Makefile.in +10 −4 Original line number Original line Diff line number Diff line Loading @@ -114,13 +114,14 @@ EXPORTS += \ $(NULL) $(NULL) CPPSRCS += \ CPPSRCS += \ LayerManagerD3D10.cpp \ CanvasLayerD3D10.cpp \ ThebesLayerD3D10.cpp \ ColorLayerD3D10.cpp \ ContainerLayerD3D10.cpp \ ContainerLayerD3D10.cpp \ ImageLayerD3D10.cpp \ ImageLayerD3D10.cpp \ ColorLayerD3D10.cpp \ LayerManagerD3D10.cpp \ CanvasLayerD3D10.cpp \ ReadbackManagerD3D10.cpp \ ReadbackManagerD3D10.cpp \ ShadowLayerUtilsD3D10.cpp \ ThebesLayerD3D10.cpp \ $(NULL) $(NULL) endif endif endif endif Loading Loading @@ -153,6 +154,11 @@ DEFINES += -DUSE_GLES2 endif endif endif endif ifdef MOZ_ENABLE_D3D10_LAYER EXPORTS_mozilla/layers += ShadowLayerUtilsD3D10.h DEFINES += -DMOZ_ENABLE_D3D10_LAYER endif include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk Loading gfx/layers/ipc/PLayers.ipdl +10 −4 Original line number Original line Diff line number Diff line Loading @@ -54,6 +54,7 @@ using mozilla::GraphicsFilterType; using mozilla::layers::FrameMetrics; using mozilla::layers::FrameMetrics; using mozilla::layers::SurfaceDescriptorX11; using mozilla::layers::SurfaceDescriptorX11; using mozilla::null_t; using mozilla::null_t; using mozilla::WindowsHandle; /** /** * The layers protocol is spoken between thread contexts that manage * The layers protocol is spoken between thread contexts that manage Loading @@ -73,12 +74,13 @@ struct OpCreateImageLayer { PLayer layer; }; struct OpCreateColorLayer { PLayer layer; }; struct OpCreateColorLayer { PLayer layer; }; struct OpCreateCanvasLayer { PLayer layer; }; struct OpCreateCanvasLayer { PLayer layer; }; // For the "buffer creation" operations, we send an initial front struct SurfaceDescriptorD3D10 { // buffer that only contains (transparent) black pixels just so that WindowsHandle handle; // we can swap it back after the first OpPaint without a special case. }; union SurfaceDescriptor { union SurfaceDescriptor { Shmem; Shmem; SurfaceDescriptorD3D10; SurfaceDescriptorX11; SurfaceDescriptorX11; }; }; Loading @@ -101,6 +103,10 @@ struct ThebesBuffer { }; }; union OptionalThebesBuffer { ThebesBuffer; null_t; }; union OptionalThebesBuffer { ThebesBuffer; null_t; }; // For the "buffer creation" operations, we send an initial front // buffer that only contains (transparent) black pixels just so that // we can swap it back after the first OpPaint without a special case. struct OpCreateThebesBuffer { struct OpCreateThebesBuffer { PLayer layer; PLayer layer; OptionalThebesBuffer initialFront; OptionalThebesBuffer initialFront; Loading gfx/layers/ipc/ShadowLayerUtils.h +5 −1 Original line number Original line Diff line number Diff line Loading @@ -44,6 +44,10 @@ #include "IPC/IPCMessageUtils.h" #include "IPC/IPCMessageUtils.h" #include "Layers.h" #include "Layers.h" #if defined(MOZ_ENABLE_D3D10_LAYER) # include "mozilla/layers/ShadowLayerUtilsD3D10.h" #endif #if defined(MOZ_X11) #if defined(MOZ_X11) # include "mozilla/layers/ShadowLayerUtilsX11.h" # include "mozilla/layers/ShadowLayerUtilsX11.h" #else #else Loading gfx/layers/ipc/ShadowLayerUtilsD3D10.cpp 0 → 100644 +128 −0 Original line number Original line Diff line number Diff line /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=8 et : */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at: * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Code. * * The Initial Developer of the Original Code is * The Mozilla Foundation * Portions created by the Initial Developer are Copyrigght (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Jones <jones.chris.g@gmail.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include <d3d10_1.h> #include <dxgi.h> #include "mozilla/layers/PLayers.h" #include "ShadowLayers.h" namespace mozilla { namespace layers { // Platform-specific shadow-layers interfaces. See ShadowLayers.h. // D3D10 doesn't need all these yet. PRBool ShadowLayerForwarder::PlatformAllocDoubleBuffer(const gfxIntSize&, gfxASurface::gfxContentType, SurfaceDescriptor*, SurfaceDescriptor*) { return PR_FALSE; } PRBool ShadowLayerForwarder::PlatformAllocBuffer(const gfxIntSize&, gfxASurface::gfxContentType, SurfaceDescriptor*) { return PR_FALSE; } /*static*/ already_AddRefed<gfxASurface> ShadowLayerForwarder::PlatformOpenDescriptor(const SurfaceDescriptor&) { return nsnull; } PRBool ShadowLayerForwarder::PlatformDestroySharedSurface(SurfaceDescriptor*) { return PR_FALSE; } /*static*/ void ShadowLayerForwarder::PlatformSyncBeforeUpdate() { } PRBool ShadowLayerManager::PlatformDestroySharedSurface(SurfaceDescriptor*) { return PR_FALSE; } /*static*/ void ShadowLayerManager::PlatformSyncBeforeReplyUpdate() { } bool GetDescriptor(ID3D10Texture2D* aTexture, SurfaceDescriptorD3D10* aDescr) { NS_ABORT_IF_FALSE(aTexture && aDescr, "Params must be nonnull"); HRESULT hr; IDXGIResource* dr = nsnull; hr = aTexture->QueryInterface(__uuidof(IDXGIResource), (void**)&dr); if (!SUCCEEDED(hr) || !dr) return false; hr = dr->GetSharedHandle(reinterpret_cast<HANDLE*>(&aDescr->handle())); return !!SUCCEEDED(hr); } already_AddRefed<ID3D10Texture2D> OpenForeign(ID3D10Device* aDevice, const SurfaceDescriptorD3D10& aDescr) { HRESULT hr; ID3D10Texture2D* tex = nsnull; hr = aDevice->OpenSharedResource(reinterpret_cast<HANDLE>(aDescr.handle()), __uuidof(ID3D10Texture2D), (void**)&tex); if (!SUCCEEDED(hr) || !tex) return nsnull; // XXX FIXME TODO do we need this??? return nsRefPtr<ID3D10Texture2D>(tex).forget(); } } // namespace layers } // namespace mozilla gfx/layers/ipc/ShadowLayerUtilsD3D10.h 0 → 100644 +67 −0 Original line number Original line Diff line number Diff line /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=8 et : */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at: * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Code. * * The Initial Developer of the Original Code is * The Mozilla Foundation * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Jones <jones.chris.g@gmail.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef mozilla_layers_ShadowLayerUtilsD3D10_h #define mozilla_layers_ShadowLayerUtilsD3D10_h #define MOZ_HAVE_PLATFORM_SPECIFIC_LAYER_BUFFERS struct ID3D10Device; struct ID3D10Texture2D; namespace mozilla { namespace layers { class SurfaceDescriptorD3D10; /** * Write into |aDescr| a cross-process descriptor of |aTexture|, if * possible. Return true iff |aDescr| was successfully set. */ bool GetDescriptor(ID3D10Texture2D* aTexture, SurfaceDescriptorD3D10* aDescr); already_AddRefed<ID3D10Texture2D> OpenForeign(ID3D10Device* aDevice, const SurfaceDescriptorD3D10& aDescr); } // namespace layers } // namespace mozilla #endif // mozilla_layers_ShadowLayerUtilsD3D10_h Loading
gfx/layers/Makefile.in +10 −4 Original line number Original line Diff line number Diff line Loading @@ -114,13 +114,14 @@ EXPORTS += \ $(NULL) $(NULL) CPPSRCS += \ CPPSRCS += \ LayerManagerD3D10.cpp \ CanvasLayerD3D10.cpp \ ThebesLayerD3D10.cpp \ ColorLayerD3D10.cpp \ ContainerLayerD3D10.cpp \ ContainerLayerD3D10.cpp \ ImageLayerD3D10.cpp \ ImageLayerD3D10.cpp \ ColorLayerD3D10.cpp \ LayerManagerD3D10.cpp \ CanvasLayerD3D10.cpp \ ReadbackManagerD3D10.cpp \ ReadbackManagerD3D10.cpp \ ShadowLayerUtilsD3D10.cpp \ ThebesLayerD3D10.cpp \ $(NULL) $(NULL) endif endif endif endif Loading Loading @@ -153,6 +154,11 @@ DEFINES += -DUSE_GLES2 endif endif endif endif ifdef MOZ_ENABLE_D3D10_LAYER EXPORTS_mozilla/layers += ShadowLayerUtilsD3D10.h DEFINES += -DMOZ_ENABLE_D3D10_LAYER endif include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk Loading
gfx/layers/ipc/PLayers.ipdl +10 −4 Original line number Original line Diff line number Diff line Loading @@ -54,6 +54,7 @@ using mozilla::GraphicsFilterType; using mozilla::layers::FrameMetrics; using mozilla::layers::FrameMetrics; using mozilla::layers::SurfaceDescriptorX11; using mozilla::layers::SurfaceDescriptorX11; using mozilla::null_t; using mozilla::null_t; using mozilla::WindowsHandle; /** /** * The layers protocol is spoken between thread contexts that manage * The layers protocol is spoken between thread contexts that manage Loading @@ -73,12 +74,13 @@ struct OpCreateImageLayer { PLayer layer; }; struct OpCreateColorLayer { PLayer layer; }; struct OpCreateColorLayer { PLayer layer; }; struct OpCreateCanvasLayer { PLayer layer; }; struct OpCreateCanvasLayer { PLayer layer; }; // For the "buffer creation" operations, we send an initial front struct SurfaceDescriptorD3D10 { // buffer that only contains (transparent) black pixels just so that WindowsHandle handle; // we can swap it back after the first OpPaint without a special case. }; union SurfaceDescriptor { union SurfaceDescriptor { Shmem; Shmem; SurfaceDescriptorD3D10; SurfaceDescriptorX11; SurfaceDescriptorX11; }; }; Loading @@ -101,6 +103,10 @@ struct ThebesBuffer { }; }; union OptionalThebesBuffer { ThebesBuffer; null_t; }; union OptionalThebesBuffer { ThebesBuffer; null_t; }; // For the "buffer creation" operations, we send an initial front // buffer that only contains (transparent) black pixels just so that // we can swap it back after the first OpPaint without a special case. struct OpCreateThebesBuffer { struct OpCreateThebesBuffer { PLayer layer; PLayer layer; OptionalThebesBuffer initialFront; OptionalThebesBuffer initialFront; Loading
gfx/layers/ipc/ShadowLayerUtils.h +5 −1 Original line number Original line Diff line number Diff line Loading @@ -44,6 +44,10 @@ #include "IPC/IPCMessageUtils.h" #include "IPC/IPCMessageUtils.h" #include "Layers.h" #include "Layers.h" #if defined(MOZ_ENABLE_D3D10_LAYER) # include "mozilla/layers/ShadowLayerUtilsD3D10.h" #endif #if defined(MOZ_X11) #if defined(MOZ_X11) # include "mozilla/layers/ShadowLayerUtilsX11.h" # include "mozilla/layers/ShadowLayerUtilsX11.h" #else #else Loading
gfx/layers/ipc/ShadowLayerUtilsD3D10.cpp 0 → 100644 +128 −0 Original line number Original line Diff line number Diff line /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=8 et : */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at: * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Code. * * The Initial Developer of the Original Code is * The Mozilla Foundation * Portions created by the Initial Developer are Copyrigght (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Jones <jones.chris.g@gmail.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include <d3d10_1.h> #include <dxgi.h> #include "mozilla/layers/PLayers.h" #include "ShadowLayers.h" namespace mozilla { namespace layers { // Platform-specific shadow-layers interfaces. See ShadowLayers.h. // D3D10 doesn't need all these yet. PRBool ShadowLayerForwarder::PlatformAllocDoubleBuffer(const gfxIntSize&, gfxASurface::gfxContentType, SurfaceDescriptor*, SurfaceDescriptor*) { return PR_FALSE; } PRBool ShadowLayerForwarder::PlatformAllocBuffer(const gfxIntSize&, gfxASurface::gfxContentType, SurfaceDescriptor*) { return PR_FALSE; } /*static*/ already_AddRefed<gfxASurface> ShadowLayerForwarder::PlatformOpenDescriptor(const SurfaceDescriptor&) { return nsnull; } PRBool ShadowLayerForwarder::PlatformDestroySharedSurface(SurfaceDescriptor*) { return PR_FALSE; } /*static*/ void ShadowLayerForwarder::PlatformSyncBeforeUpdate() { } PRBool ShadowLayerManager::PlatformDestroySharedSurface(SurfaceDescriptor*) { return PR_FALSE; } /*static*/ void ShadowLayerManager::PlatformSyncBeforeReplyUpdate() { } bool GetDescriptor(ID3D10Texture2D* aTexture, SurfaceDescriptorD3D10* aDescr) { NS_ABORT_IF_FALSE(aTexture && aDescr, "Params must be nonnull"); HRESULT hr; IDXGIResource* dr = nsnull; hr = aTexture->QueryInterface(__uuidof(IDXGIResource), (void**)&dr); if (!SUCCEEDED(hr) || !dr) return false; hr = dr->GetSharedHandle(reinterpret_cast<HANDLE*>(&aDescr->handle())); return !!SUCCEEDED(hr); } already_AddRefed<ID3D10Texture2D> OpenForeign(ID3D10Device* aDevice, const SurfaceDescriptorD3D10& aDescr) { HRESULT hr; ID3D10Texture2D* tex = nsnull; hr = aDevice->OpenSharedResource(reinterpret_cast<HANDLE>(aDescr.handle()), __uuidof(ID3D10Texture2D), (void**)&tex); if (!SUCCEEDED(hr) || !tex) return nsnull; // XXX FIXME TODO do we need this??? return nsRefPtr<ID3D10Texture2D>(tex).forget(); } } // namespace layers } // namespace mozilla
gfx/layers/ipc/ShadowLayerUtilsD3D10.h 0 → 100644 +67 −0 Original line number Original line Diff line number Diff line /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=8 et : */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at: * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Code. * * The Initial Developer of the Original Code is * The Mozilla Foundation * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Jones <jones.chris.g@gmail.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef mozilla_layers_ShadowLayerUtilsD3D10_h #define mozilla_layers_ShadowLayerUtilsD3D10_h #define MOZ_HAVE_PLATFORM_SPECIFIC_LAYER_BUFFERS struct ID3D10Device; struct ID3D10Texture2D; namespace mozilla { namespace layers { class SurfaceDescriptorD3D10; /** * Write into |aDescr| a cross-process descriptor of |aTexture|, if * possible. Return true iff |aDescr| was successfully set. */ bool GetDescriptor(ID3D10Texture2D* aTexture, SurfaceDescriptorD3D10* aDescr); already_AddRefed<ID3D10Texture2D> OpenForeign(ID3D10Device* aDevice, const SurfaceDescriptorD3D10& aDescr); } // namespace layers } // namespace mozilla #endif // mozilla_layers_ShadowLayerUtilsD3D10_h