blob: 7934cb418d52d1eb727d481a32d3cc48a87c4d01 [file] [log] [blame]
// 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 <d3d9.h>
#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<IDirect3DSurface9>* 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<IDirect3DTexture9>* 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_