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