4 * Copyright (c) 2010 Owen Rudge for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 #include "wine/port.h"
24 #include "wine/debug.h"
25 #include "wine/unicode.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(d3dx
);
41 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
45 case DLL_WINE_PREATTACH
:
46 return FALSE
; /* prefer native version */
47 case DLL_PROCESS_ATTACH
:
48 DisableThreadLibraryCalls(hinstDLL
);
55 /***********************************************************************
58 * Checks whether we are compiling against the correct d3d and d3dx library.
60 BOOL WINAPI
D3DX10CheckVersion(UINT d3dsdkvers
, UINT d3dxsdkvers
)
62 if ((d3dsdkvers
== D3D10_SDK_VERSION
) && (d3dxsdkvers
== 43))
68 HRESULT WINAPI
D3DX10CreateEffectFromFileA(const char *filename
, const D3D10_SHADER_MACRO
*defines
,
69 ID3D10Include
*include
, const char *profile
, UINT hlslflags
, UINT fxflags
, ID3D10Device
*device
,
70 ID3D10EffectPool
*effectpool
, ID3DX10ThreadPump
*pump
, ID3D10Effect
**effect
, ID3D10Blob
**errors
,
73 FIXME("filename %s, defines %p, include %p, profile %s, hlslflags %#x, fxflags %#x, "
74 "device %p, effectpool %p, pump %p, effect %p, errors %p, hresult %p\n",
75 debugstr_a(filename
), defines
, include
, debugstr_a(profile
), hlslflags
, fxflags
,
76 device
, effectpool
, pump
, effect
, errors
, hresult
);
81 HRESULT WINAPI
D3DX10CreateEffectFromFileW(const WCHAR
*filename
, const D3D10_SHADER_MACRO
*defines
,
82 ID3D10Include
*include
, const char *profile
, UINT hlslflags
, UINT fxflags
, ID3D10Device
*device
,
83 ID3D10EffectPool
*effectpool
, ID3DX10ThreadPump
*pump
, ID3D10Effect
**effect
, ID3D10Blob
**errors
,
86 FIXME("filename %s, defines %p, include %p, profile %s, hlslflags %#x, fxflags %#x, "
87 "device %p, effectpool %p, pump %p, effect %p, errors %p, hresult %p\n",
88 debugstr_w(filename
), defines
, include
, debugstr_a(profile
), hlslflags
, fxflags
, device
,
89 effectpool
, pump
, effect
, errors
, hresult
);
94 HRESULT WINAPI
D3DX10CreateEffectFromMemory(const void *data
, SIZE_T datasize
, const char *filename
,
95 const D3D10_SHADER_MACRO
*defines
, ID3D10Include
*include
, const char *profile
, UINT hlslflags
,
96 UINT fxflags
, ID3D10Device
*device
, ID3D10EffectPool
*effectpool
, ID3DX10ThreadPump
*pump
,
97 ID3D10Effect
**effect
, ID3D10Blob
**errors
, HRESULT
*hresult
)
99 FIXME("data %p, datasize %lu, filename %s, defines %p, include %p, profile %s, hlslflags %#x, fxflags %#x, "
100 "device %p, effectpool %p, pump %p, effect %p, errors %p, hresult %p\n",
101 data
, datasize
, debugstr_a(filename
), defines
, include
, debugstr_a(profile
), hlslflags
, fxflags
, device
,
102 effectpool
, pump
, effect
, errors
, hresult
);
107 HRESULT WINAPI
D3DX10CreateEffectPoolFromMemory(const void *data
, SIZE_T datasize
, const char *filename
,
108 const D3D10_SHADER_MACRO
*defines
, ID3D10Include
*include
, const char *profile
, UINT hlslflags
,
109 UINT fxflags
, ID3D10Device
*device
, ID3DX10ThreadPump
*pump
, ID3D10EffectPool
**effectpool
,
110 ID3D10Blob
**errors
, HRESULT
*hresult
)
112 FIXME("data %p, datasize %lu, filename %s, defines %p, include %p, profile %s, hlslflags %#x, fxflags %#x, "
113 "device %p, pump %p, effectpool %p, errors %p, hresult %p.\n",
114 data
, datasize
, debugstr_a(filename
), defines
, include
, debugstr_a(profile
), hlslflags
, fxflags
, device
,
115 pump
, effectpool
, errors
, hresult
);
120 HRESULT WINAPI
D3DX10UnsetAllDeviceObjects(ID3D10Device
*device
)
122 static ID3D10ShaderResourceView
* const views
[D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT
];
123 static ID3D10RenderTargetView
* const target_views
[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT
];
124 static ID3D10SamplerState
* const sampler_states
[D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT
];
125 static ID3D10Buffer
* const buffers
[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
];
126 static const unsigned int so_offsets
[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
] =
127 {~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u};
128 static const unsigned int strides
[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
];
129 static const unsigned int offsets
[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
];
130 static const float blend_factors
[4];
132 TRACE("device %p.\n", device
);
137 ID3D10Device_VSSetConstantBuffers(device
, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT
, buffers
);
138 ID3D10Device_PSSetConstantBuffers(device
, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT
, buffers
);
139 ID3D10Device_GSSetConstantBuffers(device
, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT
, buffers
);
141 ID3D10Device_VSSetSamplers(device
, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT
, sampler_states
);
142 ID3D10Device_PSSetSamplers(device
, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT
, sampler_states
);
143 ID3D10Device_GSSetSamplers(device
, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT
, sampler_states
);
145 ID3D10Device_VSSetShaderResources(device
, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT
, views
);
146 ID3D10Device_PSSetShaderResources(device
, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT
, views
);
147 ID3D10Device_GSSetShaderResources(device
, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT
, views
);
149 ID3D10Device_VSSetShader(device
, NULL
);
150 ID3D10Device_PSSetShader(device
, NULL
);
151 ID3D10Device_GSSetShader(device
, NULL
);
153 ID3D10Device_OMSetRenderTargets(device
, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT
, target_views
, NULL
);
155 ID3D10Device_IASetIndexBuffer(device
, NULL
, DXGI_FORMAT_R32_UINT
, 0);
156 ID3D10Device_IASetInputLayout(device
, NULL
);
157 ID3D10Device_IASetVertexBuffers(device
, 0, D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
, buffers
, strides
, offsets
);
159 ID3D10Device_SOSetTargets(device
, D3D10_SO_BUFFER_SLOT_COUNT
, buffers
, so_offsets
);
161 ID3D10Device_OMSetBlendState(device
, NULL
, blend_factors
, 0);
162 ID3D10Device_OMSetDepthStencilState(device
, NULL
, 0);
164 ID3D10Device_RSSetState(device
, NULL
);
166 ID3D10Device_SetPredication(device
, NULL
, FALSE
);
171 HRESULT WINAPI
D3DX10CreateDevice(IDXGIAdapter
*adapter
, D3D10_DRIVER_TYPE driver_type
,
172 HMODULE swrast
, unsigned int flags
, ID3D10Device
**device
)
176 TRACE("adapter %p, driver_type %d, swrast %p, flags %#x, device %p.\n", adapter
, driver_type
,
177 swrast
, flags
, device
);
179 if (SUCCEEDED(hr
= D3D10CreateDevice1(adapter
, driver_type
, swrast
, flags
, D3D10_FEATURE_LEVEL_10_1
,
180 D3D10_SDK_VERSION
, (ID3D10Device1
**)device
)))
183 if (SUCCEEDED(hr
= D3D10CreateDevice1(adapter
, driver_type
, swrast
, flags
, D3D10_FEATURE_LEVEL_10_0
,
184 D3D10_SDK_VERSION
, (ID3D10Device1
**)device
)))
190 HRESULT WINAPI
D3DX10CreateDeviceAndSwapChain(IDXGIAdapter
*adapter
, D3D10_DRIVER_TYPE driver_type
,
191 HMODULE swrast
, unsigned int flags
, DXGI_SWAP_CHAIN_DESC
*desc
, IDXGISwapChain
**swapchain
,
192 ID3D10Device
**device
)
196 TRACE("adapter %p, driver_type %d, swrast %p, flags %#x, desc %p, swapchain %p, device %p.\n",
197 adapter
, driver_type
, swrast
, flags
, desc
, swapchain
, device
);
199 if (SUCCEEDED(hr
= D3D10CreateDeviceAndSwapChain1(adapter
, driver_type
, swrast
, flags
, D3D10_FEATURE_LEVEL_10_1
,
200 D3D10_1_SDK_VERSION
, desc
, swapchain
, (ID3D10Device1
**)device
)))
203 return D3D10CreateDeviceAndSwapChain1(adapter
, driver_type
, swrast
, flags
, D3D10_FEATURE_LEVEL_10_0
,
204 D3D10_1_SDK_VERSION
, desc
, swapchain
, (ID3D10Device1
**)device
);
207 HRESULT WINAPI
D3DX10CreateTextureFromMemory(ID3D10Device
*device
, const void *src_data
,
208 SIZE_T src_data_size
, D3DX10_IMAGE_LOAD_INFO
*loadinfo
, ID3DX10ThreadPump
*pump
,
209 ID3D10Resource
**texture
, HRESULT
*hresult
)
211 FIXME("device %p, src_data %p, src_data_size %lu, loadinfo %p, pump %p, texture %p, "
212 "hresult %p, stub!\n",
213 device
, src_data
, src_data_size
, loadinfo
, pump
, texture
, hresult
);
218 HRESULT WINAPI
D3DX10FilterTexture(ID3D10Resource
*texture
, UINT src_level
, UINT filter
)
220 FIXME("texture %p, src_level %u, filter %#x stub!\n", texture
, src_level
, filter
);
225 HRESULT WINAPI
D3DX10GetFeatureLevel1(ID3D10Device
*device
, ID3D10Device1
**device1
)
227 TRACE("device %p, device1 %p.\n", device
, device1
);
229 return ID3D10Device_QueryInterface(device
, &IID_ID3D10Device1
, (void **)device1
);
232 HRESULT WINAPI
D3DX10GetImageInfoFromMemory(const void *src_data
, SIZE_T src_data_size
, ID3DX10ThreadPump
*pump
,
233 D3DX10_IMAGE_INFO
*img_info
, HRESULT
*hresult
)
235 FIXME("src_data %p, src_data_size %lu, pump %p, img_info %p, hresult %p.\n",
236 src_data
, src_data_size
, pump
, img_info
, hresult
);
241 D3DX_CPU_OPTIMIZATION WINAPI
D3DXCpuOptimizations(BOOL enable
)
243 FIXME("enable %#x stub.\n", enable
);
245 return D3DX_NOT_OPTIMIZED
;