Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenshader.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
1.7.6.1
|