ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

shader.c
Go to the documentation of this file.
00001 /*
00002  * Copyright 2008 Luis Busquets
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00017  */
00018 
00019 #include "config.h"
00020 #include "wine/port.h"
00021 #include "wine/debug.h"
00022 #include "wine/unicode.h"
00023 #include "windef.h"
00024 #include "wingdi.h"
00025 #include "d3dx9.h"
00026 #include "d3dx9shader.h"
00027 #include "d3dx9_36_private.h"
00028 
00029 WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
00030 
00031 LPCSTR WINAPI D3DXGetPixelShaderProfile(LPDIRECT3DDEVICE9 device)
00032 {
00033     D3DCAPS9 caps;
00034 
00035     TRACE("device %p\n", device);
00036 
00037     if (!device) return NULL;
00038 
00039     IDirect3DDevice9_GetDeviceCaps(device,&caps);
00040 
00041     switch (caps.PixelShaderVersion)
00042     {
00043     case D3DPS_VERSION(1, 1):
00044         return "ps_1_1";
00045 
00046     case D3DPS_VERSION(1, 2):
00047         return "ps_1_2";
00048 
00049     case D3DPS_VERSION(1, 3):
00050         return "ps_1_3";
00051 
00052     case D3DPS_VERSION(1, 4):
00053         return "ps_1_4";
00054 
00055     case D3DPS_VERSION(2, 0):
00056         if ((caps.PS20Caps.NumTemps>=22)                          &&
00057             (caps.PS20Caps.Caps&D3DPS20CAPS_ARBITRARYSWIZZLE)     &&
00058             (caps.PS20Caps.Caps&D3DPS20CAPS_GRADIENTINSTRUCTIONS) &&
00059             (caps.PS20Caps.Caps&D3DPS20CAPS_PREDICATION)          &&
00060             (caps.PS20Caps.Caps&D3DPS20CAPS_NODEPENDENTREADLIMIT) &&
00061             (caps.PS20Caps.Caps&D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT))
00062         {
00063             return "ps_2_a";
00064         }
00065         if ((caps.PS20Caps.NumTemps>=32)                          &&
00066             (caps.PS20Caps.Caps&D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT))
00067         {
00068             return "ps_2_b";
00069         }
00070         return "ps_2_0";
00071 
00072     case D3DPS_VERSION(3, 0):
00073         return "ps_3_0";
00074     }
00075 
00076     return NULL;
00077 }
00078 
00079 UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code)
00080 {
00081     const DWORD *ptr = byte_code;
00082 
00083     TRACE("byte_code %p\n", byte_code);
00084 
00085     if (!ptr) return 0;
00086 
00087     /* Look for the END token, skipping the VERSION token */
00088     while (*++ptr != D3DSIO_END)
00089     {
00090         /* Skip comments */
00091         if ((*ptr & D3DSI_OPCODE_MASK) == D3DSIO_COMMENT)
00092         {
00093             ptr += ((*ptr & D3DSI_COMMENTSIZE_MASK) >> D3DSI_COMMENTSIZE_SHIFT);
00094         }
00095     }
00096     ++ptr;
00097 
00098     /* Return the shader size in bytes */
00099     return (ptr - byte_code) * sizeof(*ptr);
00100 }
00101 
00102 DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code)
00103 {
00104     TRACE("byte_code %p\n", byte_code);
00105 
00106     return byte_code ? *byte_code : 0;
00107 }
00108 
00109 LPCSTR WINAPI D3DXGetVertexShaderProfile(LPDIRECT3DDEVICE9 device)
00110 {
00111     D3DCAPS9 caps;
00112 
00113     TRACE("device %p\n", device);
00114 
00115     if (!device) return NULL;
00116 
00117     IDirect3DDevice9_GetDeviceCaps(device,&caps);
00118 
00119     switch (caps.VertexShaderVersion)
00120     {
00121     case D3DVS_VERSION(1, 1):
00122         return "vs_1_1";
00123     case D3DVS_VERSION(2, 0):
00124         if ((caps.VS20Caps.NumTemps>=13) &&
00125             (caps.VS20Caps.DynamicFlowControlDepth==24) &&
00126             (caps.VS20Caps.Caps&D3DPS20CAPS_PREDICATION))
00127         {
00128             return "vs_2_a";
00129         }
00130         return "vs_2_0";
00131     case D3DVS_VERSION(3, 0):
00132         return "vs_3_0";
00133     }
00134 
00135     return NULL;
00136 }
00137 
00138 HRESULT WINAPI D3DXFindShaderComment(CONST DWORD* byte_code, DWORD fourcc, LPCVOID* data, UINT* size)
00139 {
00140     CONST DWORD *ptr = byte_code;
00141 
00142     TRACE("(%p, %x, %p, %p)", byte_code, fourcc, data, size);
00143 
00144     if (!byte_code)
00145         return D3DERR_INVALIDCALL;
00146 
00147     while (*++ptr != D3DSIO_END)
00148     {
00149         /* Check if it is a comment */
00150         if ((*ptr & D3DSI_OPCODE_MASK) == D3DSIO_COMMENT)
00151         {
00152             DWORD comment_size = (*ptr & D3DSI_COMMENTSIZE_MASK) >> D3DSI_COMMENTSIZE_SHIFT;
00153 
00154             /* Check if this is the comment we are looking for */
00155             if (*(ptr + 1) == fourcc)
00156             {
00157                 UINT ctab_size = (comment_size - 1) * sizeof(DWORD);
00158                 LPCVOID ctab_data = ptr + 2;
00159                 if (size)
00160                     *size = ctab_size;
00161                 if (data)
00162                     *data = ctab_data;
00163                 TRACE("Returning comment data at %p with size %d\n", ctab_data, ctab_size);
00164                 return D3D_OK;
00165             }
00166             ptr += comment_size;
00167         }
00168     }
00169 
00170     return S_FALSE;
00171 }
00172 
00173 HRESULT WINAPI D3DXAssembleShader(LPCSTR data,
00174                                   UINT data_len,
00175                                   CONST D3DXMACRO* defines,
00176                                   LPD3DXINCLUDE include,
00177                                   DWORD flags,
00178                                   LPD3DXBUFFER* shader,
00179                                   LPD3DXBUFFER* error_messages)
00180 {
00181     FIXME("(%p, %d, %p, %p, %x, %p, %p): stub\n", data, data_len, defines, include, flags, shader, error_messages);
00182     return D3DERR_INVALIDCALL;
00183 }
00184 
00185 HRESULT WINAPI D3DXAssembleShaderFromFileA(LPCSTR filename,
00186                                            CONST D3DXMACRO* defines,
00187                                            LPD3DXINCLUDE include,
00188                                            DWORD flags,
00189                                            LPD3DXBUFFER* shader,
00190                                            LPD3DXBUFFER* error_messages)
00191 {
00192     LPWSTR filename_w = NULL;
00193     DWORD len;
00194     HRESULT ret;
00195 
00196     if (!filename) return D3DXERR_INVALIDDATA;
00197 
00198     len = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0);
00199     filename_w = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
00200     if (!filename_w) return E_OUTOFMEMORY;
00201     MultiByteToWideChar(CP_ACP, 0, filename, -1, filename_w, len);
00202 
00203     ret = D3DXAssembleShaderFromFileW(filename_w, defines, include, flags, shader, error_messages);
00204 
00205     HeapFree(GetProcessHeap(), 0, filename_w);
00206     return ret;
00207 }
00208 
00209 HRESULT WINAPI D3DXAssembleShaderFromFileW(LPCWSTR filename,
00210                                            CONST D3DXMACRO* defines,
00211                                            LPD3DXINCLUDE include,
00212                                            DWORD flags,
00213                                            LPD3DXBUFFER* shader,
00214                                            LPD3DXBUFFER* error_messages)
00215 {
00216     FIXME("(%s, %p, %p, %x, %p, %p): stub\n", debugstr_w(filename), defines, include, flags, shader, error_messages);
00217     return D3DERR_INVALIDCALL;
00218 }
00219 
00220 HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module,
00221                                                LPCSTR resource,
00222                                                CONST D3DXMACRO* defines,
00223                                                LPD3DXINCLUDE include,
00224                                                DWORD flags,
00225                                                LPD3DXBUFFER* shader,
00226                                                LPD3DXBUFFER* error_messages)
00227 {
00228     HRSRC res;
00229     LPCSTR buffer;
00230     DWORD len;
00231 
00232     if (!(res = FindResourceA(module, resource, (LPCSTR)RT_RCDATA)))
00233         return D3DXERR_INVALIDDATA;
00234     if (FAILED(load_resource_into_memory(module, res, (LPVOID *)&buffer, &len)))
00235         return D3DXERR_INVALIDDATA;
00236     return D3DXAssembleShader(buffer, len, defines, include, flags,
00237                               shader, error_messages);
00238 }
00239 
00240 HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module,
00241                                                LPCWSTR resource,
00242                                                CONST D3DXMACRO* defines,
00243                                                LPD3DXINCLUDE include,
00244                                                DWORD flags,
00245                                                LPD3DXBUFFER* shader,
00246                                                LPD3DXBUFFER* error_messages)
00247 {
00248     HRSRC res;
00249     LPCSTR buffer;
00250     DWORD len;
00251 
00252     if (!(res = FindResourceW(module, resource, (LPCWSTR)RT_RCDATA)))
00253         return D3DXERR_INVALIDDATA;
00254     if (FAILED(load_resource_into_memory(module, res, (LPVOID *)&buffer, &len)))
00255         return D3DXERR_INVALIDDATA;
00256     return D3DXAssembleShader(buffer, len, defines, include, flags,
00257                               shader, error_messages);
00258 }
00259 
00260 HRESULT WINAPI D3DXCompileShader(LPCSTR pSrcData,
00261                                  UINT srcDataLen,
00262                                  CONST D3DXMACRO* pDefines,
00263                                  LPD3DXINCLUDE pInclude,
00264                                  LPCSTR pFunctionName,
00265                                  LPCSTR pProfile,
00266                                  DWORD Flags,
00267                                  LPD3DXBUFFER* ppShader,
00268                                  LPD3DXBUFFER* ppErrorMsgs,
00269                                  LPD3DXCONSTANTTABLE * ppConstantTable)
00270 {
00271     FIXME("(%p, %d, %p, %p, %p, %p, %d, %p, %p, %p): stub\n",
00272           pSrcData, srcDataLen, pDefines, pInclude, pFunctionName,
00273           pProfile, Flags, ppShader, ppErrorMsgs, ppConstantTable);
00274     return D3DERR_INVALIDCALL;
00275 }
00276 
00277 static const struct ID3DXConstantTableVtbl ID3DXConstantTable_Vtbl;
00278 
00279 typedef struct ID3DXConstantTableImpl {
00280     const ID3DXConstantTableVtbl *lpVtbl;
00281     LONG ref;
00282     LPVOID ctab;
00283     DWORD size;
00284 } ID3DXConstantTableImpl;
00285 
00286 /*** IUnknown methods ***/
00287 static HRESULT WINAPI ID3DXConstantTableImpl_QueryInterface(ID3DXConstantTable* iface, REFIID riid, void** ppvObject)
00288 {
00289     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00290 
00291     TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
00292 
00293     if (IsEqualGUID(riid, &IID_IUnknown) ||
00294         IsEqualGUID(riid, &IID_ID3DXConstantTable))
00295     {
00296         ID3DXConstantTable_AddRef(iface);
00297         *ppvObject = This;
00298         return S_OK;
00299     }
00300 
00301     ERR("Interface %s not found\n", debugstr_guid(riid));
00302 
00303     return E_NOINTERFACE;
00304 }
00305 
00306 static ULONG WINAPI ID3DXConstantTableImpl_AddRef(ID3DXConstantTable* iface)
00307 {
00308     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00309 
00310     TRACE("(%p)->(): AddRef from %d\n", This, This->ref);
00311 
00312     return InterlockedIncrement(&This->ref);
00313 }
00314 
00315 static ULONG WINAPI ID3DXConstantTableImpl_Release(ID3DXConstantTable* iface)
00316 {
00317     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00318     ULONG ref = InterlockedDecrement(&This->ref);
00319 
00320     TRACE("(%p)->(): Release from %d\n", This, ref + 1);
00321 
00322     if (!ref)
00323     {
00324         HeapFree(GetProcessHeap(), 0, This->ctab);
00325         HeapFree(GetProcessHeap(), 0, This);
00326     }
00327 
00328     return ref;
00329 }
00330 
00331 /*** ID3DXBuffer methods ***/
00332 static LPVOID WINAPI ID3DXConstantTableImpl_GetBufferPointer(ID3DXConstantTable* iface)
00333 {
00334     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00335 
00336     TRACE("(%p)->()\n", This);
00337 
00338     return This->ctab;
00339 }
00340 
00341 static DWORD WINAPI ID3DXConstantTableImpl_GetBufferSize(ID3DXConstantTable* iface)
00342 {
00343     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00344 
00345     TRACE("(%p)->()\n", This);
00346 
00347     return This->size;
00348 }
00349 
00350 /*** ID3DXConstantTable methods ***/
00351 static HRESULT WINAPI ID3DXConstantTableImpl_GetDesc(ID3DXConstantTable* iface, D3DXCONSTANTTABLE_DESC *desc)
00352 {
00353     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00354 
00355     FIXME("(%p)->(%p): stub\n", This, desc);
00356 
00357     return E_NOTIMPL;
00358 }
00359 
00360 static HRESULT WINAPI ID3DXConstantTableImpl_GetConstantDesc(ID3DXConstantTable* iface, D3DXHANDLE constant,
00361                                                              D3DXCONSTANT_DESC *desc, UINT *count)
00362 {
00363     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00364 
00365     FIXME("(%p)->(%p, %p, %p): stub\n", This, constant, desc, count);
00366 
00367     return E_NOTIMPL;
00368 }
00369 
00370 static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstant(ID3DXConstantTable* iface, D3DXHANDLE constant, UINT index)
00371 {
00372     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00373 
00374     FIXME("(%p)->(%p, %d): stub\n", This, constant, index);
00375 
00376     return NULL;
00377 }
00378 
00379 static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantByName(ID3DXConstantTable* iface, D3DXHANDLE constant, LPCSTR name)
00380 {
00381     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00382 
00383     FIXME("(%p)->(%p, %s): stub\n", This, constant, name);
00384 
00385     return NULL;
00386 }
00387 
00388 static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantByElement(ID3DXConstantTable* iface, D3DXHANDLE constant, UINT index)
00389 {
00390     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00391 
00392     FIXME("(%p)->(%p, %d): stub\n", This, constant, index);
00393 
00394     return NULL;
00395 }
00396 
00397 static HRESULT WINAPI ID3DXConstantTableImpl_SetDefaults(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device)
00398 {
00399     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00400 
00401     FIXME("(%p)->(%p): stub\n", This, device);
00402 
00403     return E_NOTIMPL;
00404 }
00405 
00406 static HRESULT WINAPI ID3DXConstantTableImpl_SetValue(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00407                                                       D3DXHANDLE constant, LPCVOID data, UINT bytes)
00408 {
00409     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00410 
00411     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, data, bytes);
00412 
00413     return E_NOTIMPL;
00414 }
00415 
00416 static HRESULT WINAPI ID3DXConstantTableImpl_SetBool(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00417                                                      D3DXHANDLE constant, BOOL b)
00418 {
00419     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00420 
00421     FIXME("(%p)->(%p, %p, %d): stub\n", This, device, constant, b);
00422 
00423     return E_NOTIMPL;
00424 }
00425 
00426 static HRESULT WINAPI ID3DXConstantTableImpl_SetBoolArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00427                                                           D3DXHANDLE constant, CONST BOOL* b, UINT count)
00428 {
00429     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00430 
00431     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, b, count);
00432 
00433     return E_NOTIMPL;
00434 }
00435 
00436 static HRESULT WINAPI ID3DXConstantTableImpl_SetInt(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device, D3DXHANDLE constant, INT n)
00437 {
00438     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00439 
00440     FIXME("(%p)->(%p, %p, %d): stub\n", This, device, constant, n);
00441 
00442     return E_NOTIMPL;
00443 }
00444 
00445 static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00446                                                          D3DXHANDLE constant, CONST INT* n, UINT count)
00447 {
00448     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00449 
00450     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, n, count);
00451 
00452     return E_NOTIMPL;
00453 }
00454 
00455 static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00456                                                       D3DXHANDLE constant, FLOAT f)
00457 {
00458     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00459 
00460     FIXME("(%p)->(%p, %p, %f): stub\n", This, device, constant, f);
00461 
00462     return E_NOTIMPL;
00463 }
00464 
00465 static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00466                                                            D3DXHANDLE constant, CONST FLOAT* f, UINT count)
00467 {
00468     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00469 
00470     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, f, count);
00471 
00472     return E_NOTIMPL;
00473 }
00474 
00475 static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00476                                                        D3DXHANDLE constant, CONST D3DXVECTOR4* vector)
00477 {
00478     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00479 
00480     FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, vector);
00481 
00482     return E_NOTIMPL;
00483 }
00484 
00485 static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00486                                                             D3DXHANDLE constant, CONST D3DXVECTOR4* vector, UINT count)
00487 {
00488     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00489 
00490     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, vector, count);
00491 
00492     return E_NOTIMPL;
00493 }
00494 
00495 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrix(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00496                                                        D3DXHANDLE constant, CONST D3DXMATRIX* matrix)
00497 {
00498     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00499 
00500     FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, matrix);
00501 
00502     return E_NOTIMPL;
00503 }
00504 
00505 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00506                                                             D3DXHANDLE constant, CONST D3DXMATRIX* matrix, UINT count)
00507 {
00508     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00509 
00510     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
00511 
00512     return E_NOTIMPL;
00513 }
00514 
00515 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixPointerArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00516                                                                    D3DXHANDLE constant, CONST D3DXMATRIX** matrix, UINT count)
00517 {
00518     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00519 
00520     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
00521 
00522     return E_NOTIMPL;
00523 }
00524 
00525 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTranspose(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00526                                                                 D3DXHANDLE constant, CONST D3DXMATRIX* matrix)
00527 {
00528     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00529 
00530     FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, matrix);
00531 
00532     return E_NOTIMPL;
00533 }
00534 
00535 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposeArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00536                                                                      D3DXHANDLE constant, CONST D3DXMATRIX* matrix, UINT count)
00537 {
00538     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00539 
00540     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
00541 
00542     return E_NOTIMPL;
00543 }
00544 
00545 static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposePointerArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
00546                                                                             D3DXHANDLE constant, CONST D3DXMATRIX** matrix, UINT count)
00547 {
00548     ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
00549 
00550     FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
00551 
00552     return E_NOTIMPL;
00553 }
00554 
00555 static const struct ID3DXConstantTableVtbl ID3DXConstantTable_Vtbl =
00556 {
00557     /*** IUnknown methods ***/
00558     ID3DXConstantTableImpl_QueryInterface,
00559     ID3DXConstantTableImpl_AddRef,
00560     ID3DXConstantTableImpl_Release,
00561     /*** ID3DXBuffer methods ***/
00562     ID3DXConstantTableImpl_GetBufferPointer,
00563     ID3DXConstantTableImpl_GetBufferSize,
00564     /*** ID3DXConstantTable methods ***/
00565     ID3DXConstantTableImpl_GetDesc,
00566     ID3DXConstantTableImpl_GetConstantDesc,
00567     ID3DXConstantTableImpl_GetConstant,
00568     ID3DXConstantTableImpl_GetConstantByName,
00569     ID3DXConstantTableImpl_GetConstantByElement,
00570     ID3DXConstantTableImpl_SetDefaults,
00571     ID3DXConstantTableImpl_SetValue,
00572     ID3DXConstantTableImpl_SetBool,
00573     ID3DXConstantTableImpl_SetBoolArray,
00574     ID3DXConstantTableImpl_SetInt,
00575     ID3DXConstantTableImpl_SetIntArray,
00576     ID3DXConstantTableImpl_SetFloat,
00577     ID3DXConstantTableImpl_SetFloatArray,
00578     ID3DXConstantTableImpl_SetVector,
00579     ID3DXConstantTableImpl_SetVectorArray,
00580     ID3DXConstantTableImpl_SetMatrix,
00581     ID3DXConstantTableImpl_SetMatrixArray,
00582     ID3DXConstantTableImpl_SetMatrixPointerArray,
00583     ID3DXConstantTableImpl_SetMatrixTranspose,
00584     ID3DXConstantTableImpl_SetMatrixTransposeArray,
00585     ID3DXConstantTableImpl_SetMatrixTransposePointerArray
00586 };
00587 
00588 HRESULT WINAPI D3DXGetShaderConstantTableEx(CONST DWORD* pFunction,
00589                                             DWORD flags,
00590                                             LPD3DXCONSTANTTABLE* ppConstantTable)
00591 {
00592     ID3DXConstantTableImpl* object;
00593     HRESULT hr;
00594     LPCVOID data;
00595     UINT size;
00596 
00597     FIXME("(%p, %x, %p): semi-stub\n", pFunction, flags, ppConstantTable);
00598 
00599     if (!pFunction || !ppConstantTable)
00600         return D3DERR_INVALIDCALL;
00601 
00602     hr = D3DXFindShaderComment(pFunction, MAKEFOURCC('C','T','A','B'), &data, &size);
00603     if (hr != D3D_OK)
00604         return D3DXERR_INVALIDDATA;
00605 
00606     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXConstantTableImpl));
00607     if (!object)
00608     {
00609         ERR("Out of memory\n");
00610         return E_OUTOFMEMORY;
00611     }
00612 
00613     object->lpVtbl = &ID3DXConstantTable_Vtbl;
00614     object->ref = 1;
00615 
00616     object->ctab = HeapAlloc(GetProcessHeap(), 0, size);
00617     if (!object->ctab)
00618     {
00619         HeapFree(GetProcessHeap(), 0, object);
00620         ERR("Out of memory\n");
00621         return E_OUTOFMEMORY;
00622     }
00623     object->size = size;
00624     memcpy(object->ctab, data, object->size);
00625 
00626     *ppConstantTable = (LPD3DXCONSTANTTABLE)object;
00627 
00628     return D3D_OK;
00629 }
00630 
00631 HRESULT WINAPI D3DXGetShaderConstantTable(CONST DWORD* pFunction,
00632                                           LPD3DXCONSTANTTABLE* ppConstantTable)
00633 {
00634     TRACE("(%p, %p): Forwarded to D3DXGetShaderConstantTableEx\n", pFunction, ppConstantTable);
00635 
00636     return D3DXGetShaderConstantTableEx(pFunction, 0, ppConstantTable);
00637 }

Generated on Sat May 26 2012 04:20:36 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.