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