1bb26272beaf1d2bddffaad5341235e70abcf483bLuca Barbieri#if API < 11 2e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieriextern "C" HRESULT STDMETHODCALLTYPE D3D10CreateBlob( 39cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri SIZE_T num_bytes, 49cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri LPD3D10BLOB *out_buffer 5e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieri); 6e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieri 7e7624e23a3a374896863f54fe30dafd0bff8a91aLuca BarbieriHRESULT STDMETHODCALLTYPE D3D10CreateBlob( 89cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri SIZE_T num_bytes, 99cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri LPD3D10BLOB *out_buffer 10f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 11f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 129cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri void* data = malloc(num_bytes); 13f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!data) 14f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_OUTOFMEMORY; 159cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri *out_buffer = new GalliumD3DBlob(data, num_bytes); 16f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return S_OK; 17f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 18f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 19f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriLPCSTR STDMETHODCALLTYPE D3D10GetPixelShaderProfile( 209cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri ID3D10Device *device 21f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 22f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 23f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return "ps_4_0"; 24f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 25f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 26f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriLPCSTR STDMETHODCALLTYPE D3D10GetVertexShaderProfile( 279cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri ID3D10Device *device 28f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 29f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 30f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return "vs_4_0"; 31f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 32f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 33f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriLPCSTR STDMETHODCALLTYPE D3D10GetGeometryShaderProfile( 349cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri ID3D10Device *device 35f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 36f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 37f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return "gs_4_0"; 38f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 39f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 40f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieristatic HRESULT dxbc_assemble_as_blob(struct dxbc_chunk_header** chunks, unsigned num_chunks, ID3D10Blob** blob) 41f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 42f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri std::pair<void*, size_t> p = dxbc_assemble(chunks, num_chunks); 43f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!p.first) 44f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_OUTOFMEMORY; 45bb26272beaf1d2bddffaad5341235e70abcf483bLuca Barbieri *blob = new GalliumD3DBlob(p.first, p.second); 46f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return S_OK; 47f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 48f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 496c598c78bd17642d731cf57b8369cc794f64ba2fLuca BarbieriHRESULT D3D10GetInputSignatureBlob( 509cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri const void *shader_bytecode, 519cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri SIZE_T bytecode_length, 529cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri ID3D10Blob **signature_blob 53f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 54f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 55d2cc8aedb5d544608842b58b6ae4754313ded939Christoph Bumiller dxbc_chunk_signature* sig = dxbc_find_signature(shader_bytecode, bytecode_length, DXBC_FIND_INPUT_SIGNATURE); 56f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sig) 57f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 58f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 599cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, signature_blob); 60f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 61f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 626c598c78bd17642d731cf57b8369cc794f64ba2fLuca BarbieriHRESULT D3D10GetOutputSignatureBlob( 639cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri const void *shader_bytecode, 649cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri SIZE_T bytecode_length, 659cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri ID3D10Blob **signature_blob 66f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 67f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 68d2cc8aedb5d544608842b58b6ae4754313ded939Christoph Bumiller dxbc_chunk_signature* sig = dxbc_find_signature(shader_bytecode, bytecode_length, DXBC_FIND_OUTPUT_SIGNATURE); 69f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sig) 70f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 71f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 729cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, signature_blob); 73f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 74f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 756c598c78bd17642d731cf57b8369cc794f64ba2fLuca BarbieriHRESULT D3D10GetInputAndOutputSignatureBlob( 769cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri const void *shader_bytecode, 779cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri SIZE_T bytecode_length, 789cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri ID3D10Blob **signature_blob 79f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 80f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 81f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri dxbc_chunk_signature* sigs[2]; 82d2cc8aedb5d544608842b58b6ae4754313ded939Christoph Bumiller sigs[0] = dxbc_find_signature(shader_bytecode, bytecode_length, DXBC_FIND_INPUT_SIGNATURE); 83f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sigs[0]) 84f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 85d2cc8aedb5d544608842b58b6ae4754313ded939Christoph Bumiller sigs[1] = dxbc_find_signature(shader_bytecode, bytecode_length, DXBC_FIND_OUTPUT_SIGNATURE); 86f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sigs[1]) 87f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 88f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 899cd0e624b460bc361287f7d39bfe9aa61d90a457Luca Barbieri return dxbc_assemble_as_blob((dxbc_chunk_header**)&sigs, 2, signature_blob); 90f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 91f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 92f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri#endif 93