d3d11_misc.h revision e7624e23a3a374896863f54fe30dafd0bff8a91a
1bb26272beaf1d2bddffaad5341235e70abcf483bLuca Barbieri#if API < 11 2e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieriextern "C" HRESULT STDMETHODCALLTYPE D3D10CreateBlob( 3e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieri __in SIZE_T NumBytes, 4e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieri __out LPD3D10BLOB *ppBuffer 5e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieri); 6e7624e23a3a374896863f54fe30dafd0bff8a91aLuca Barbieri 7e7624e23a3a374896863f54fe30dafd0bff8a91aLuca BarbieriHRESULT STDMETHODCALLTYPE D3D10CreateBlob( 8f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in SIZE_T NumBytes, 9f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __out LPD3D10BLOB *ppBuffer 10f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 11f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 12f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri void* data = malloc(NumBytes); 13f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!data) 14f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_OUTOFMEMORY; 15f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri *ppBuffer = new GalliumD3DBlob(data, NumBytes); 16f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return S_OK; 17f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 18f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 19f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriLPCSTR STDMETHODCALLTYPE D3D10GetPixelShaderProfile( 20f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in ID3D10Device *pDevice 21f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 22f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 23f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return "ps_4_0"; 24f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 25f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 26f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriLPCSTR STDMETHODCALLTYPE D3D10GetVertexShaderProfile( 27f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in ID3D10Device *pDevice 28f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 29f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 30f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return "vs_4_0"; 31f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 32f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 33f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriLPCSTR STDMETHODCALLTYPE D3D10GetGeometryShaderProfile( 34f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in ID3D10Device *pDevice 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 49f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriHRESULT D3D10GetInputSignatureBlob( 50f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in const void *pShaderBytecode, 51f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in SIZE_T BytecodeLength, 52f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __out ID3D10Blob **ppSignatureBlob 53f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 54f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 55f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri dxbc_chunk_signature* sig = dxbc_find_signature(pShaderBytecode, BytecodeLength, false); 56f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sig) 57f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 58f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 59bb26272beaf1d2bddffaad5341235e70abcf483bLuca Barbieri return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, ppSignatureBlob); 60f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 61f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 62f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriHRESULT D3D10GetOutputSignatureBlob( 63f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in const void *pShaderBytecode, 64f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in SIZE_T BytecodeLength, 65f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __out ID3D10Blob **ppSignatureBlob 66f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 67f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 68f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri dxbc_chunk_signature* sig = dxbc_find_signature(pShaderBytecode, BytecodeLength, true); 69f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sig) 70f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 71f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 72bb26272beaf1d2bddffaad5341235e70abcf483bLuca Barbieri return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, ppSignatureBlob); 73f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 74f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 75f815b57b888d00228dcb355cbd34ed0f4c44a620Luca BarbieriHRESULT D3D10GetInputOutputSignatureBlob( 76f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in const void *pShaderBytecode, 77f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __in SIZE_T BytecodeLength, 78f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri __out ID3D10Blob **ppSignatureBlob 79f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri) 80f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri{ 81f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri dxbc_chunk_signature* sigs[2]; 82f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri sigs[0] = dxbc_find_signature(pShaderBytecode, BytecodeLength, false); 83f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sigs[0]) 84f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 85f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri sigs[1] = dxbc_find_signature(pShaderBytecode, BytecodeLength, true); 86f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri if(!sigs[1]) 87f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri return E_FAIL; 88f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 89bb26272beaf1d2bddffaad5341235e70abcf483bLuca Barbieri return dxbc_assemble_as_blob((dxbc_chunk_header**)&sigs, 2, ppSignatureBlob); 90f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri} 91f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri 92f815b57b888d00228dcb355cbd34ed0f4c44a620Luca Barbieri#endif 93