// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Helper functions that Direct3D 9Ex code a little easier to work with for // the ui/surface code. #ifndef UI_SURFACE_D3D9_UTILS_WIN_H_ #define UI_SURFACE_D3D9_UTILS_WIN_H_ #include #include "base/basictypes.h" #include "base/win/scoped_comptr.h" #include "ui/surface/surface_export.h" namespace base { class ScopedNativeLibrary; } namespace gfx { class Size; } namespace ui_surface_d3d9_utils { // Visible for testing. Loads the Direct3D9 library. Returns true on success. SURFACE_EXPORT bool LoadD3D9(base::ScopedNativeLibrary* storage); // Visible for testing. Creates a Direct3D9 device suitable for use with the // accelerated surface code. Returns true on success. SURFACE_EXPORT bool CreateDevice(const base::ScopedNativeLibrary& d3d_module, uint64 adapter_luid, D3DDEVTYPE device_type, uint32 presentation_interval, IDirect3DDevice9Ex** device); // Calls the Vista+ (WDDM1.0) variant of CreateTexture that semantically opens a // texture allocated as shared. In this way textures allocated by another // process can be used by a D3D context in this process. The shared texture is // identified by its surface handle. The resulting texture is written into // |opened_texture|. // // Returns true on success. SURFACE_EXPORT bool OpenSharedTexture(IDirect3DDevice9* device, int64 surface_handle, const gfx::Size& size, IDirect3DTexture9** opened_texture); // Ensures that |surface| is a lockable surface of a specified |size|. If // |*surface| is non-null and has dimensions that match |size|, it is reused. // Otherwise, a new resource is created and the old one (if any) is freed. // // Returns true on success. SURFACE_EXPORT bool CreateOrReuseLockableSurface( IDirect3DDevice9* device, const gfx::Size& size, base::win::ScopedComPtr* surface); // Ensures that |texture| is a render target texture of a specified |size|. If // |*texture| is non-null and has dimensions that match |size|, it is reused. // Otherwise, a new resource is created and the old one (if any) is freed. // // A reference to level 0 of the resulting texture is placed into // |render_target|. // // Returns true on success. SURFACE_EXPORT bool CreateOrReuseRenderTargetTexture( IDirect3DDevice9* device, const gfx::Size& size, base::win::ScopedComPtr* texture, IDirect3DSurface9** render_target); SURFACE_EXPORT gfx::Size GetSize(IDirect3DTexture9* texture); SURFACE_EXPORT gfx::Size GetSize(IDirect3DSurface9* surface); } // namespace ui_surface_d3d9_utils #endif // UI_SURFACE_D3D9_UTILS_WIN_H_