//////////////////////////////////////////////////////////////////////////////
 
//
 
//  Copyright (c) Microsoft Corporation.  All rights reserved.
 
//
 
//  File:       D3D10Misc.h
 
//  Content:    D3D10 Device Creation APIs
 
//
 
//////////////////////////////////////////////////////////////////////////////
 
 
 
#ifndef __D3D10MISC_H__
 
#define __D3D10MISC_H__
 
 
 
#include "d3d10.h"
 
 
 
///////////////////////////////////////////////////////////////////////////
 
// ID3D10Blob:
 
// ------------
 
// The buffer object is used by D3D10 to return arbitrary size data.
 
//
 
// GetBufferPointer -
 
//    Returns a pointer to the beginning of the buffer.
 
//
 
// GetBufferSize -
 
//    Returns the size of the buffer, in bytes.
 
///////////////////////////////////////////////////////////////////////////
 
 
 
typedef interface ID3D10Blob ID3D10Blob;
 
typedef interface ID3D10Blob *LPD3D10BLOB;
 
 
 
// {8BA5FB08-5195-40e2-AC58-0D989C3A0102}
 
DEFINE_GUID(IID_ID3D10Blob, 
 
0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);
 
 
 
#undef INTERFACE
 
#define INTERFACE ID3D10Blob
 
 
 
DECLARE_INTERFACE_(ID3D10Blob, IUnknown)
 
{
 
    // IUnknown
 
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
 
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
 
    STDMETHOD_(ULONG, Release)(THIS) PURE;
 
 
 
    // ID3D10Blob
 
    STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE;
 
    STDMETHOD_(SIZE_T, GetBufferSize)(THIS) PURE;
 
};
 
 
 
#ifdef __cplusplus
 
extern "C" {
 
#endif //__cplusplus
 
 
 
///////////////////////////////////////////////////////////////////////////
 
// D3D10_DRIVER_TYPE
 
// ----------------
 
//
 
// This identifier is used to determine the implementation of Direct3D10
 
// to be used.
 
//
 
// Pass one of these values to D3D10CreateDevice
 
//
 
///////////////////////////////////////////////////////////////////////////
 
typedef enum D3D10_DRIVER_TYPE
 
{
 
    D3D10_DRIVER_TYPE_HARDWARE  = 0,
 
    D3D10_DRIVER_TYPE_REFERENCE = 1,
 
    D3D10_DRIVER_TYPE_NULL      = 2,
 
    D3D10_DRIVER_TYPE_SOFTWARE  = 3,
 
    D3D10_DRIVER_TYPE_WARP      = 5,
 
} D3D10_DRIVER_TYPE;
 
 
 
DEFINE_GUID(GUID_DeviceType, 
 
0xd722fb4d, 0x7a68, 0x437a, 0xb2, 0x0c, 0x58, 0x04, 0xee, 0x24, 0x94, 0xa6);
 
 
 
///////////////////////////////////////////////////////////////////////////
 
// D3D10CreateDevice
 
// ------------------
 
//
 
// pAdapter
 
//      If NULL, D3D10CreateDevice will choose the primary adapter and 
 
//      create a new instance from a temporarily created IDXGIFactory.
 
//      If non-NULL, D3D10CreateDevice will register the appropriate 
 
//      device, if necessary (via IDXGIAdapter::RegisterDrver), before 
 
//      creating the device.
 
// DriverType
 
//      Specifies the driver type to be created: hardware, reference or 
 
//      null.
 
// Software
 
//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for
 
//      non-Software driver types.
 
// Flags
 
//      Any of those documented for D3D10CreateDevice.
 
// SDKVersion
 
//      SDK version. Use the D3D10_SDK_VERSION macro.
 
// ppDevice
 
//      Pointer to returned interface.
 
//
 
// Return Values
 
//  Any of those documented for 
 
//          CreateDXGIFactory
 
//          IDXGIFactory::EnumAdapters
 
//          IDXGIAdapter::RegisterDriver
 
//          D3D10CreateDevice
 
//      
 
///////////////////////////////////////////////////////////////////////////
 
HRESULT WINAPI D3D10CreateDevice(
 
    IDXGIAdapter *pAdapter,
 
    D3D10_DRIVER_TYPE DriverType,
 
    HMODULE Software,
 
    UINT Flags,
 
    UINT SDKVersion,
 
    ID3D10Device **ppDevice);
 
 
 
///////////////////////////////////////////////////////////////////////////
 
// D3D10CreateDeviceAndSwapChain
 
// ------------------------------
 
//
 
// ppAdapter
 
//      If NULL, D3D10CreateDevice will choose the primary adapter and 
 
//      create a new instance from a temporarily created IDXGIFactory.
 
//      If non-NULL, D3D10CreateDevice will register the appropriate 
 
//      device, if necessary (via IDXGIAdapter::RegisterDrver), before 
 
//      creating the device.
 
// DriverType
 
//      Specifies the driver type to be created: hardware, reference or 
 
//      null.
 
// Software
 
//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for
 
//      non-Software driver types.
 
// Flags
 
//      Any of those documented for D3D10CreateDevice.
 
// SDKVersion
 
//      SDK version. Use the D3D10_SDK_VERSION macro.
 
// pSwapChainDesc
 
//      Swap chain description, may be NULL.
 
// ppSwapChain
 
//      Pointer to returned interface. May be NULL.
 
// ppDevice
 
//      Pointer to returned interface.
 
//
 
// Return Values
 
//  Any of those documented for 
 
//          CreateDXGIFactory
 
//          IDXGIFactory::EnumAdapters
 
//          IDXGIAdapter::RegisterDriver
 
//          D3D10CreateDevice
 
//          IDXGIFactory::CreateSwapChain
 
//      
 
///////////////////////////////////////////////////////////////////////////
 
HRESULT WINAPI D3D10CreateDeviceAndSwapChain(
 
    IDXGIAdapter *pAdapter,
 
    D3D10_DRIVER_TYPE DriverType,
 
    HMODULE Software,
 
    UINT Flags,
 
    UINT SDKVersion,
 
    DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
 
    IDXGISwapChain **ppSwapChain,    
 
    ID3D10Device **ppDevice);
 
 
 
 
 
///////////////////////////////////////////////////////////////////////////
 
// D3D10CreateBlob:
 
// -----------------
 
// Creates a Buffer of n Bytes
 
//////////////////////////////////////////////////////////////////////////
 
 
 
HRESULT WINAPI D3D10CreateBlob(SIZE_T NumBytes, LPD3D10BLOB *ppBuffer);
 
 
 
#ifdef __cplusplus
 
}
 
#endif //__cplusplus
 
 
 
#endif //__D3D10EFFECT_H__