d3d11_misc.h revision e7624e23a3a374896863f54fe30dafd0bff8a91a
1#if API < 11 2extern "C" HRESULT STDMETHODCALLTYPE D3D10CreateBlob( 3 __in SIZE_T NumBytes, 4 __out LPD3D10BLOB *ppBuffer 5); 6 7HRESULT STDMETHODCALLTYPE D3D10CreateBlob( 8 __in SIZE_T NumBytes, 9 __out LPD3D10BLOB *ppBuffer 10) 11{ 12 void* data = malloc(NumBytes); 13 if(!data) 14 return E_OUTOFMEMORY; 15 *ppBuffer = new GalliumD3DBlob(data, NumBytes); 16 return S_OK; 17} 18 19LPCSTR STDMETHODCALLTYPE D3D10GetPixelShaderProfile( 20 __in ID3D10Device *pDevice 21) 22{ 23 return "ps_4_0"; 24} 25 26LPCSTR STDMETHODCALLTYPE D3D10GetVertexShaderProfile( 27 __in ID3D10Device *pDevice 28) 29{ 30 return "vs_4_0"; 31} 32 33LPCSTR STDMETHODCALLTYPE D3D10GetGeometryShaderProfile( 34 __in ID3D10Device *pDevice 35) 36{ 37 return "gs_4_0"; 38} 39 40static HRESULT dxbc_assemble_as_blob(struct dxbc_chunk_header** chunks, unsigned num_chunks, ID3D10Blob** blob) 41{ 42 std::pair<void*, size_t> p = dxbc_assemble(chunks, num_chunks); 43 if(!p.first) 44 return E_OUTOFMEMORY; 45 *blob = new GalliumD3DBlob(p.first, p.second); 46 return S_OK; 47} 48 49HRESULT D3D10GetInputSignatureBlob( 50 __in const void *pShaderBytecode, 51 __in SIZE_T BytecodeLength, 52 __out ID3D10Blob **ppSignatureBlob 53) 54{ 55 dxbc_chunk_signature* sig = dxbc_find_signature(pShaderBytecode, BytecodeLength, false); 56 if(!sig) 57 return E_FAIL; 58 59 return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, ppSignatureBlob); 60} 61 62HRESULT D3D10GetOutputSignatureBlob( 63 __in const void *pShaderBytecode, 64 __in SIZE_T BytecodeLength, 65 __out ID3D10Blob **ppSignatureBlob 66) 67{ 68 dxbc_chunk_signature* sig = dxbc_find_signature(pShaderBytecode, BytecodeLength, true); 69 if(!sig) 70 return E_FAIL; 71 72 return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, ppSignatureBlob); 73} 74 75HRESULT D3D10GetInputOutputSignatureBlob( 76 __in const void *pShaderBytecode, 77 __in SIZE_T BytecodeLength, 78 __out ID3D10Blob **ppSignatureBlob 79) 80{ 81 dxbc_chunk_signature* sigs[2]; 82 sigs[0] = dxbc_find_signature(pShaderBytecode, BytecodeLength, false); 83 if(!sigs[0]) 84 return E_FAIL; 85 sigs[1] = dxbc_find_signature(pShaderBytecode, BytecodeLength, true); 86 if(!sigs[1]) 87 return E_FAIL; 88 89 return dxbc_assemble_as_blob((dxbc_chunk_header**)&sigs, 2, ppSignatureBlob); 90} 91 92#endif 93