d3d11_misc.h revision 6c598c78bd17642d731cf57b8369cc794f64ba2f
1496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer#if API < 11
2496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencerextern "C" HRESULT STDMETHODCALLTYPE D3D10CreateBlob(
3496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	__in SIZE_T NumBytes,
4496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	__out LPD3D10BLOB *ppBuffer
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner);
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner
7496c277a6d161413e3f6976c9991ddccd8ecae8aReid SpencerHRESULT STDMETHODCALLTYPE D3D10CreateBlob(
8496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	__in SIZE_T NumBytes,
9496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	__out LPD3D10BLOB *ppBuffer
10496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer)
11496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer{
12496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	void* data = malloc(NumBytes);
13496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	if(!data)
1490b54138834a057179c7a02931217ab5a82ed389Reid Spencer		return E_OUTOFMEMORY;
15ced4110f5b068b9b64e3a55a9ee57b621ce4acb1Reid Spencer	*ppBuffer = new GalliumD3DBlob(data, NumBytes);
1690b54138834a057179c7a02931217ab5a82ed389Reid Spencer	return S_OK;
1748fe63526e35ddaee7e98879596a569911f41319Sebastian Redl}
1890b54138834a057179c7a02931217ab5a82ed389Reid Spencer
1923a1cf3e085325783ef2e4078308f913cba5012eJeff CohenLPCSTR STDMETHODCALLTYPE D3D10GetPixelShaderProfile(
2048fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer	__in ID3D10Device *pDevice
21f6cbc0fd6494e50c48ebe4b5eecde1c70bcd5165Reid Spencer)
2248fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer{
23f6cbc0fd6494e50c48ebe4b5eecde1c70bcd5165Reid Spencer	return "ps_4_0";
24f6cbc0fd6494e50c48ebe4b5eecde1c70bcd5165Reid Spencer}
2590b54138834a057179c7a02931217ab5a82ed389Reid Spencer
2648fdf91d0f17b19bb7345156b928689df94d0c6cReid SpencerLPCSTR STDMETHODCALLTYPE D3D10GetVertexShaderProfile(
2748fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer	__in ID3D10Device *pDevice
2848fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer)
2948fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer{
3048fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer	return "vs_4_0";
3148fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer}
3248fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer
3348fdf91d0f17b19bb7345156b928689df94d0c6cReid SpencerLPCSTR STDMETHODCALLTYPE D3D10GetGeometryShaderProfile(
3490b54138834a057179c7a02931217ab5a82ed389Reid Spencer	__in ID3D10Device *pDevice
3590b54138834a057179c7a02931217ab5a82ed389Reid Spencer)
3690b54138834a057179c7a02931217ab5a82ed389Reid Spencer{
3790b54138834a057179c7a02931217ab5a82ed389Reid Spencer	return "gs_4_0";
3890b54138834a057179c7a02931217ab5a82ed389Reid Spencer}
39ee841a1a8735805f84d609ae105bec92525033c6Jeff Cohen
40ee841a1a8735805f84d609ae105bec92525033c6Jeff Cohenstatic HRESULT dxbc_assemble_as_blob(struct dxbc_chunk_header** chunks, unsigned num_chunks, ID3D10Blob** blob)
41ee841a1a8735805f84d609ae105bec92525033c6Jeff Cohen{
42ced4110f5b068b9b64e3a55a9ee57b621ce4acb1Reid Spencer	std::pair<void*, size_t> p = dxbc_assemble(chunks, num_chunks);
4335033a5876aa27ea5729bc29b41bb4460a303cadChris Lattner	if(!p.first)
4490b54138834a057179c7a02931217ab5a82ed389Reid Spencer		return E_OUTOFMEMORY;
457b60a15abc155196d9515a1e242ec0137afff753Reid Spencer	*blob = new GalliumD3DBlob(p.first, p.second);
46df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	return S_OK;
477b60a15abc155196d9515a1e242ec0137afff753Reid Spencer}
48298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer
49298d6c14ca1936677aaf6cca3efc569b6e53d294Reid SpencerHRESULT D3D10GetInputSignatureBlob(
50298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer	__in const void *pShaderBytecode,
51298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer	__in SIZE_T BytecodeLength,
5290b54138834a057179c7a02931217ab5a82ed389Reid Spencer	__out ID3D10Blob **ppSignatureBlob
5390b54138834a057179c7a02931217ab5a82ed389Reid Spencer)
54496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer{
55496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	dxbc_chunk_signature* sig = dxbc_find_signature(pShaderBytecode, BytecodeLength, false);
56496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	if(!sig)
57496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer		return E_FAIL;
5890b54138834a057179c7a02931217ab5a82ed389Reid Spencer
59496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer	return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, ppSignatureBlob);
60496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer}
613be2d12bdec9ec3a244aae695d3b586ac27dcfdeDaniel Dunbar
62df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel DunbarHRESULT D3D10GetOutputSignatureBlob(
63df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	__in const void *pShaderBytecode,
64df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	__in SIZE_T BytecodeLength,
65df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	__out ID3D10Blob **ppSignatureBlob
66df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar)
67df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar{
68df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	dxbc_chunk_signature* sig = dxbc_find_signature(pShaderBytecode, BytecodeLength, true);
69df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	if(!sig)
70df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar		return E_FAIL;
71df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar
72df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	return dxbc_assemble_as_blob((dxbc_chunk_header**)&sig, 1, ppSignatureBlob);
73df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar}
74df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar
75df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel DunbarHRESULT D3D10GetInputAndOutputSignatureBlob(
76df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	__in const void *pShaderBytecode,
77df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	__in SIZE_T BytecodeLength,
78df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	__out ID3D10Blob **ppSignatureBlob
79df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar)
80df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar{
81df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	dxbc_chunk_signature* sigs[2];
82df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	sigs[0] = dxbc_find_signature(pShaderBytecode, BytecodeLength, false);
83df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	if(!sigs[0])
84df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar		return E_FAIL;
85df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	sigs[1] = dxbc_find_signature(pShaderBytecode, BytecodeLength, true);
86df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	if(!sigs[1])
87df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar		return E_FAIL;
88df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar
89df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar	return dxbc_assemble_as_blob((dxbc_chunk_header**)&sigs, 2, ppSignatureBlob);
903be2d12bdec9ec3a244aae695d3b586ac27dcfdeDaniel Dunbar}
9190b54138834a057179c7a02931217ab5a82ed389Reid Spencer
92df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar#endif
937b60a15abc155196d9515a1e242ec0137afff753Reid Spencer