text: 
  //////////////////////////////////////////////////////////////////////////////
  //
  //  Copyright (c) Microsoft Corporation.  All rights reserved.
  //
  //  File:       D3DX10Async.h
  //  Content:    D3DX10 Asynchronous Effect / Shader loaders / compilers
  //
  //////////////////////////////////////////////////////////////////////////////
  
  #ifndef __D3DX10ASYNC_H__
  #define __D3DX10ASYNC_H__
  
  #include "d3dx10.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif //__cplusplus
  
  
  //----------------------------------------------------------------------------
  // D3DX10Compile:
  // ------------------
  // Compiles an effect or shader.
  //
  // Parameters:
  //  pSrcFile
  //      Source file name.
  //  hSrcModule
  //      Module handle. if NULL, current module will be used.
  //  pSrcResource
  //      Resource name in module.
  //  pSrcData
  //      Pointer to source code.
  //  SrcDataLen
  //      Size of source code, in bytes.
  //  pDefines
  //      Optional NULL-terminated array of preprocessor macro definitions.
  //  pInclude
  //      Optional interface pointer to use for handling #include directives.
  //      If this parameter is NULL, #includes will be honored when compiling
  //      from file, and will error when compiling from resource or memory.
  //  pFunctionName
  //      Name of the entrypoint function where execution should begin.
  //  pProfile
  //      Instruction set to be used when generating code.  Currently supported
  //      profiles are "vs_1_1",  "vs_2_0", "vs_2_a", "vs_2_sw", "vs_3_0",
  //                   "vs_3_sw", "vs_4_0", "vs_4_1",
  //                   "ps_2_0",  "ps_2_a", "ps_2_b", "ps_2_sw", "ps_3_0", 
  //                   "ps_3_sw", "ps_4_0", "ps_4_1",
  //                   "gs_4_0",  "gs_4_1",
  //                   "tx_1_0",
  //                   "fx_4_0",  "fx_4_1"
  //      Note that this entrypoint does not compile fx_2_0 targets, for that
  //      you need to use the D3DX9 function.
  //  Flags1
  //      See D3D10_SHADER_xxx flags.
  //  Flags2
  //      See D3D10_EFFECT_xxx flags.
  //  ppShader
  //      Returns a buffer containing the created shader.  This buffer contains
  //      the compiled shader code, as well as any embedded debug and symbol
  //      table info.  (See D3D10GetShaderConstantTable)
  //  ppErrorMsgs
  //      Returns a buffer containing a listing of errors and warnings that were
  //      encountered during the compile.  If you are running in a debugger,
  //      these are the same messages you will see in your debug output.
  //  pHResult
  //      Pointer to a memory location to receive the return value upon completion.
  //      Maybe NULL if not needed.
  //      If pPump != NULL, pHResult must be a valid memory location until the
  //      the asynchronous execution completes.
  //----------------------------------------------------------------------------
  
  HRESULT WINAPI D3DX10CompileFromFileA(LPCSTR pSrcFile,CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude,
          LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags1, UINT Flags2, ID3DX10ThreadPump* pPump, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CompileFromFileW(LPCWSTR pSrcFile, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude,
          LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags1, UINT Flags2, ID3DX10ThreadPump* pPump, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  #ifdef UNICODE
  #define D3DX10CompileFromFile D3DX10CompileFromFileW
  #else
  #define D3DX10CompileFromFile D3DX10CompileFromFileA
  #endif
  
  HRESULT WINAPI D3DX10CompileFromResourceA(HMODULE hSrcModule, LPCSTR pSrcResource, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags1, UINT Flags2, ID3DX10ThreadPump* pPump, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CompileFromResourceW(HMODULE hSrcModule, LPCWSTR pSrcResource, LPCWSTR pSrcFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags1, UINT Flags2, ID3DX10ThreadPump* pPump, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  #ifdef UNICODE
  #define D3DX10CompileFromResource D3DX10CompileFromResourceW
  #else
  #define D3DX10CompileFromResource D3DX10CompileFromResourceA
  #endif
  
  HRESULT WINAPI D3DX10CompileFromMemory(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, 
      LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags1, UINT Flags2, ID3DX10ThreadPump* pPump, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  //----------------------------------------------------------------------------
  // D3DX10CreateEffectFromXXXX:
  // --------------------------
  // Creates an effect from a binary effect or file
  //
  // Parameters:
  //
  // [in]
  //
  //
  //  pFileName
  //      Name of the ASCII (uncompiled) or binary (compiled) Effect file to load
  //
  //  hModule
  //      Handle to the module containing the resource to compile from
  //  pResourceName
  //      Name of the resource within hModule to compile from
  //
  //  pData
  //      Blob of effect data, either ASCII (uncompiled) or binary (compiled)
  //  DataLength
  //      Length of the data blob
  //
  //  pDefines
  //      Optional NULL-terminated array of preprocessor macro definitions.
  //  pInclude
  //      Optional interface pointer to use for handling #include directives.
  //      If this parameter is NULL, #includes will be honored when compiling
  //      from file, and will error when compiling from resource or memory.
  //  pProfile
  //      Profile to use when compiling the effect.
  //  HLSLFlags
  //      Compilation flags pertaining to shaders and data types, honored by
  //      the HLSL compiler
  //  FXFlags
  //      Compilation flags pertaining to Effect compilation, honored
  //      by the Effect compiler
  //  pDevice
  //      Pointer to the D3D10 device on which to create Effect resources
  //  pEffectPool
  //      Pointer to an Effect pool to share variables with or NULL
  //
  // [out]
  //
  //  ppEffect
  //      Address of the newly created Effect interface
  //  ppEffectPool
  //      Address of the newly created Effect pool interface
  //  ppErrors
  //      If non-NULL, address of a buffer with error messages that occurred 
  //      during parsing or compilation
  //  pHResult
  //      Pointer to a memory location to receive the return value upon completion.
  //      Maybe NULL if not needed.
  //      If pPump != NULL, pHResult must be a valid memory location until the
  //      the asynchronous execution completes.
  //----------------------------------------------------------------------------
  
  
  HRESULT WINAPI D3DX10CreateEffectFromFileA(LPCSTR pFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, 
      ID3D10EffectPool *pEffectPool, ID3DX10ThreadPump* pPump, ID3D10Effect **ppEffect, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectFromFileW(LPCWSTR pFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, 
      ID3D10EffectPool *pEffectPool, ID3DX10ThreadPump* pPump, ID3D10Effect **ppEffect, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectFromMemory(LPCVOID pData, SIZE_T DataLength, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, 
      ID3D10EffectPool *pEffectPool, ID3DX10ThreadPump* pPump, ID3D10Effect **ppEffect, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectFromResourceA(HMODULE hModule, LPCSTR pResourceName, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, 
      ID3D10EffectPool *pEffectPool, ID3DX10ThreadPump* pPump, ID3D10Effect **ppEffect, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectFromResourceW(HMODULE hModule, LPCWSTR pResourceName, LPCWSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, 
      ID3D10EffectPool *pEffectPool, ID3DX10ThreadPump* pPump, ID3D10Effect **ppEffect, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  
  #ifdef UNICODE
  #define D3DX10CreateEffectFromFile          D3DX10CreateEffectFromFileW
  #define D3DX10CreateEffectFromResource      D3DX10CreateEffectFromResourceW
  #else
  #define D3DX10CreateEffectFromFile          D3DX10CreateEffectFromFileA
  #define D3DX10CreateEffectFromResource      D3DX10CreateEffectFromResourceA
  #endif
  
  HRESULT WINAPI D3DX10CreateEffectPoolFromFileA(LPCSTR pFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, ID3DX10ThreadPump* pPump, 
      ID3D10EffectPool **ppEffectPool, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectPoolFromFileW(LPCWSTR pFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice, ID3DX10ThreadPump* pPump, 
      ID3D10EffectPool **ppEffectPool, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectPoolFromMemory(LPCVOID pData, SIZE_T DataLength, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice,
      ID3DX10ThreadPump* pPump, ID3D10EffectPool **ppEffectPool, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10CreateEffectPoolFromResourceA(HMODULE hModule, LPCSTR pResourceName, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice,
      ID3DX10ThreadPump* pPump, ID3D10EffectPool **ppEffectPool, ID3D10Blob **ppErrors, HRESULT* pHResult);
                                           
  HRESULT WINAPI D3DX10CreateEffectPoolFromResourceW(HMODULE hModule, LPCWSTR pResourceName, LPCWSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, 
      ID3D10Include *pInclude, LPCSTR pProfile, UINT HLSLFlags, UINT FXFlags, ID3D10Device *pDevice,
      ID3DX10ThreadPump* pPump, ID3D10EffectPool **ppEffectPool, ID3D10Blob **ppErrors, HRESULT* pHResult);
  
  #ifdef UNICODE
  #define D3DX10CreateEffectPoolFromFile      D3DX10CreateEffectPoolFromFileW
  #define D3DX10CreateEffectPoolFromResource  D3DX10CreateEffectPoolFromResourceW
  #else
  #define D3DX10CreateEffectPoolFromFile      D3DX10CreateEffectPoolFromFileA
  #define D3DX10CreateEffectPoolFromResource  D3DX10CreateEffectPoolFromResourceA
  #endif
  
  HRESULT WINAPI D3DX10PreprocessShaderFromFileA(LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, ID3DX10ThreadPump *pPump, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10PreprocessShaderFromFileW(LPCWSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, ID3DX10ThreadPump *pPump, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10PreprocessShaderFromMemory(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, ID3DX10ThreadPump *pPump, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10PreprocessShaderFromResourceA(HMODULE hModule, LPCSTR pResourceName, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, ID3DX10ThreadPump *pPump, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  HRESULT WINAPI D3DX10PreprocessShaderFromResourceW(HMODULE hModule, LPCWSTR pResourceName, LPCWSTR pSrcFileName, CONST D3D10_SHADER_MACRO* pDefines, 
      LPD3D10INCLUDE pInclude, ID3DX10ThreadPump *pPump, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs, HRESULT* pHResult);
  
  #ifdef UNICODE
  #define D3DX10PreprocessShaderFromFile      D3DX10PreprocessShaderFromFileW
  #define D3DX10PreprocessShaderFromResource  D3DX10PreprocessShaderFromResourceW
  #else
  #define D3DX10PreprocessShaderFromFile      D3DX10PreprocessShaderFromFileA
  #define D3DX10PreprocessShaderFromResource  D3DX10PreprocessShaderFromResourceA
  #endif
  
  //----------------------------------------------------------------------------
  // Async processors
  //----------------------------------------------------------------------------
  
  HRESULT WINAPI D3DX10CreateAsyncCompilerProcessor(LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, 
          LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags1, UINT Flags2,
          ID3D10Blob **ppCompiledShader, ID3D10Blob **ppErrorBuffer, ID3DX10DataProcessor **ppProcessor);
  
  HRESULT WINAPI D3DX10CreateAsyncEffectCreateProcessor(LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, 
          LPCSTR pProfile, UINT Flags, UINT FXFlags, ID3D10Device *pDevice,
          ID3D10EffectPool *pPool, ID3D10Blob **ppErrorBuffer, ID3DX10DataProcessor **ppProcessor);
  
  HRESULT WINAPI D3DX10CreateAsyncEffectPoolCreateProcessor(LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, 
          LPCSTR pProfile, UINT Flags, UINT FXFlags, ID3D10Device *pDevice,
          ID3D10Blob **ppErrorBuffer, ID3DX10DataProcessor **ppProcessor);
  
  HRESULT WINAPI D3DX10CreateAsyncShaderPreprocessProcessor(LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, 
          ID3D10Blob** ppShaderText, ID3D10Blob **ppErrorBuffer, ID3DX10DataProcessor **ppProcessor);
  
  
  
  //----------------------------------------------------------------------------
  // D3DX10 Asynchronous texture I/O (advanced mode)
  //----------------------------------------------------------------------------
  
  HRESULT WINAPI D3DX10CreateAsyncFileLoaderW(LPCWSTR pFileName, ID3DX10DataLoader **ppDataLoader);
  HRESULT WINAPI D3DX10CreateAsyncFileLoaderA(LPCSTR pFileName, ID3DX10DataLoader **ppDataLoader);
  HRESULT WINAPI D3DX10CreateAsyncMemoryLoader(LPCVOID pData, SIZE_T cbData, ID3DX10DataLoader **ppDataLoader);
  HRESULT WINAPI D3DX10CreateAsyncResourceLoaderW(HMODULE hSrcModule, LPCWSTR pSrcResource, ID3DX10DataLoader **ppDataLoader);
  HRESULT WINAPI D3DX10CreateAsyncResourceLoaderA(HMODULE hSrcModule, LPCSTR pSrcResource, ID3DX10DataLoader **ppDataLoader);
  
  #ifdef UNICODE
  #define D3DX10CreateAsyncFileLoader D3DX10CreateAsyncFileLoaderW
  #define D3DX10CreateAsyncResourceLoader D3DX10CreateAsyncResourceLoaderW
  #else
  #define D3DX10CreateAsyncFileLoader D3DX10CreateAsyncFileLoaderA
  #define D3DX10CreateAsyncResourceLoader D3DX10CreateAsyncResourceLoaderA
  #endif
  
  HRESULT WINAPI D3DX10CreateAsyncTextureProcessor(ID3D10Device *pDevice, D3DX10_IMAGE_LOAD_INFO *pLoadInfo, ID3DX10DataProcessor **ppDataProcessor);
  HRESULT WINAPI D3DX10CreateAsyncTextureInfoProcessor(D3DX10_IMAGE_INFO *pImageInfo, ID3DX10DataProcessor **ppDataProcessor);
  HRESULT WINAPI D3DX10CreateAsyncShaderResourceViewProcessor(ID3D10Device *pDevice, D3DX10_IMAGE_LOAD_INFO *pLoadInfo, ID3DX10DataProcessor **ppDataProcessor);
  
  #ifdef __cplusplus
  }
  #endif //__cplusplus
  
  #endif //__D3DX10ASYNC_H__
  
  
  