/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=8 et : */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include "mozilla/layers/LayerManagerComposite.h" #include "mozilla/layers/PLayerTransaction.h" #include "ShadowLayers.h" using namespace mozilla::gl; namespace mozilla { namespace layers { // Platform-specific shadow-layers interfaces. See ShadowLayers.h. // D3D10 doesn't need all these yet. bool ISurfaceAllocator::PlatformAllocSurfaceDescriptor(const gfxIntSize&, gfxContentType, uint32_t, SurfaceDescriptor*) { return false; } /*static*/ already_AddRefed ShadowLayerForwarder::PlatformOpenDescriptor(OpenMode, const SurfaceDescriptor&) { return nullptr; } /*static*/ bool ShadowLayerForwarder::PlatformCloseDescriptor(const SurfaceDescriptor&) { return false; } /*static*/ bool ShadowLayerForwarder::PlatformGetDescriptorSurfaceContentType( const SurfaceDescriptor&, OpenMode, gfxContentType*, gfxASurface**) { return false; } /*static*/ bool ShadowLayerForwarder::PlatformGetDescriptorSurfaceSize( const SurfaceDescriptor&, OpenMode, gfxIntSize*, gfxASurface**) { return false; } /*static*/ bool ShadowLayerForwarder::PlatformGetDescriptorSurfaceImageFormat( const SurfaceDescriptor&, OpenMode, gfxImageFormat*, gfxASurface**) { return false; } bool ShadowLayerForwarder::PlatformDestroySharedSurface(SurfaceDescriptor*) { return false; } /*static*/ void ShadowLayerForwarder::PlatformSyncBeforeUpdate() { } bool ISurfaceAllocator::PlatformDestroySharedSurface(SurfaceDescriptor*) { return false; } /*static*/ bool LayerManagerComposite::SupportsDirectTexturing() { return true; } /*static*/ void LayerManagerComposite::PlatformSyncBeforeReplyUpdate() { } bool GetDescriptor(ID3D10Texture2D* aTexture, SurfaceDescriptorD3D10* aDescr) { NS_ABORT_IF_FALSE(aTexture && aDescr, "Params must be nonnull"); HRESULT hr; IDXGIResource* dr = nullptr; hr = aTexture->QueryInterface(__uuidof(IDXGIResource), (void**)&dr); if (!SUCCEEDED(hr) || !dr) return false; hr = dr->GetSharedHandle(reinterpret_cast(&aDescr->handle())); return !!SUCCEEDED(hr); } already_AddRefed OpenForeign(ID3D10Device* aDevice, const SurfaceDescriptorD3D10& aDescr) { HRESULT hr; ID3D10Texture2D* tex = nullptr; hr = aDevice->OpenSharedResource(reinterpret_cast(aDescr.handle()), __uuidof(ID3D10Texture2D), (void**)&tex); if (!SUCCEEDED(hr) || !tex) return nullptr; return nsRefPtr(tex).forget(); } } // namespace layers } // namespace mozilla