ReactOS 0.4.15-dev-5669-g09dde2c
shader.c File Reference
#include "config.h"
#include "d3d9_private.h"
Include dependency graph for shader.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3d9)
 
static struct d3d9_vertexshaderimpl_from_IDirect3DVertexShader9 (IDirect3DVertexShader9 *iface)
 
static HRESULT WINAPI d3d9_vertexshader_QueryInterface (IDirect3DVertexShader9 *iface, REFIID riid, void **out)
 
static ULONG WINAPI d3d9_vertexshader_AddRef (IDirect3DVertexShader9 *iface)
 
static ULONG WINAPI d3d9_vertexshader_Release (IDirect3DVertexShader9 *iface)
 
static HRESULT WINAPI d3d9_vertexshader_GetDevice (IDirect3DVertexShader9 *iface, IDirect3DDevice9 **device)
 
static HRESULT WINAPI d3d9_vertexshader_GetFunction (IDirect3DVertexShader9 *iface, void *data, UINT *data_size)
 
static void STDMETHODCALLTYPE d3d9_vertexshader_wined3d_object_destroyed (void *parent)
 
HRESULT vertexshader_init (struct d3d9_vertexshader *shader, struct d3d9_device *device, const DWORD *byte_code)
 
struct d3d9_vertexshaderunsafe_impl_from_IDirect3DVertexShader9 (IDirect3DVertexShader9 *iface)
 
static struct d3d9_pixelshaderimpl_from_IDirect3DPixelShader9 (IDirect3DPixelShader9 *iface)
 
static HRESULT WINAPI d3d9_pixelshader_QueryInterface (IDirect3DPixelShader9 *iface, REFIID riid, void **out)
 
static ULONG WINAPI d3d9_pixelshader_AddRef (IDirect3DPixelShader9 *iface)
 
static ULONG WINAPI d3d9_pixelshader_Release (IDirect3DPixelShader9 *iface)
 
static HRESULT WINAPI d3d9_pixelshader_GetDevice (IDirect3DPixelShader9 *iface, IDirect3DDevice9 **device)
 
static HRESULT WINAPI d3d9_pixelshader_GetFunction (IDirect3DPixelShader9 *iface, void *data, UINT *data_size)
 
static void STDMETHODCALLTYPE d3d9_pixelshader_wined3d_object_destroyed (void *parent)
 
HRESULT pixelshader_init (struct d3d9_pixelshader *shader, struct d3d9_device *device, const DWORD *byte_code)
 
struct d3d9_pixelshaderunsafe_impl_from_IDirect3DPixelShader9 (IDirect3DPixelShader9 *iface)
 

Variables

static const IDirect3DVertexShader9Vtbl d3d9_vertexshader_vtbl
 
static const struct wined3d_parent_ops d3d9_vertexshader_wined3d_parent_ops
 
static const IDirect3DPixelShader9Vtbl d3d9_pixelshader_vtbl
 
static const struct wined3d_parent_ops d3d9_pixelshader_wined3d_parent_ops
 

Function Documentation

◆ d3d9_pixelshader_AddRef()

static ULONG WINAPI d3d9_pixelshader_AddRef ( IDirect3DPixelShader9 *  iface)
static

Definition at line 202 of file shader.c.

203{
206
207 TRACE("%p increasing refcount to %u.\n", iface, refcount);
208
209 if (refcount == 1)
210 {
211 IDirect3DDevice9Ex_AddRef(shader->parent_device);
213 wined3d_shader_incref(shader->wined3d_shader);
215 }
216
217 return refcount;
218}
#define InterlockedIncrement
Definition: armddk.h:53
#define IDirect3DDevice9Ex_AddRef(p)
Definition: d3d9.h:1916
static struct d3d9_pixelshader * impl_from_IDirect3DPixelShader9(IDirect3DPixelShader9 *iface)
Definition: shader.c:179
ULONG CDECL wined3d_shader_incref(struct wined3d_shader *shader)
Definition: shader.c:3339
GLuint shader
Definition: glext.h:6030
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:373
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:368

◆ d3d9_pixelshader_GetDevice()

static HRESULT WINAPI d3d9_pixelshader_GetDevice ( IDirect3DPixelShader9 *  iface,
IDirect3DDevice9 **  device 
)
static

Definition at line 242 of file shader.c.

243{
245
246 TRACE("iface %p, device %p.\n", iface, device);
247
248 *device = (IDirect3DDevice9 *)shader->parent_device;
250
251 TRACE("Returning device %p.\n", *device);
252
253 return D3D_OK;
254}
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1507
#define D3D_OK
Definition: d3d.h:106
Definition: devices.h:37

◆ d3d9_pixelshader_GetFunction()

static HRESULT WINAPI d3d9_pixelshader_GetFunction ( IDirect3DPixelShader9 *  iface,
void data,
UINT data_size 
)
static

Definition at line 256 of file shader.c.

257{
259 HRESULT hr;
260
261 TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
262
264 hr = wined3d_shader_get_byte_code(shader->wined3d_shader, data, data_size);
266
267 return hr;
268}
HRESULT CDECL wined3d_shader_get_byte_code(const struct wined3d_shader *shader, void *byte_code, UINT *byte_code_size)
Definition: shader.c:3386
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT hr
Definition: shlfolder.c:183

◆ d3d9_pixelshader_QueryInterface()

static HRESULT WINAPI d3d9_pixelshader_QueryInterface ( IDirect3DPixelShader9 *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 184 of file shader.c.

185{
186 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
187
188 if (IsEqualGUID(riid, &IID_IDirect3DPixelShader9)
190 {
192 *out = iface;
193 return S_OK;
194 }
195
196 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
197
198 *out = NULL;
199 return E_NOINTERFACE;
200}
const GUID IID_IUnknown
#define WARN(fmt,...)
Definition: debug.h:112
#define IDirect3DPixelShader9_AddRef(p)
Definition: d3d9.h:1260
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
static FILE * out
Definition: regtests2xml.c:44
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ d3d9_pixelshader_Release()

static ULONG WINAPI d3d9_pixelshader_Release ( IDirect3DPixelShader9 *  iface)
static

Definition at line 220 of file shader.c.

221{
224
225 TRACE("%p decreasing refcount to %u.\n", iface, refcount);
226
227 if (!refcount)
228 {
229 IDirect3DDevice9Ex *device = shader->parent_device;
230
232 wined3d_shader_decref(shader->wined3d_shader);
234
235 /* Release the device last, as it may cause the device to be destroyed. */
237 }
238
239 return refcount;
240}
#define InterlockedDecrement
Definition: armddk.h:52
#define IDirect3DDevice9Ex_Release(p)
Definition: d3d9.h:1917
ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader)
Definition: shader.c:3364

◆ d3d9_pixelshader_wined3d_object_destroyed()

static void STDMETHODCALLTYPE d3d9_pixelshader_wined3d_object_destroyed ( void parent)
static

Definition at line 281 of file shader.c.

282{
284}
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
r parent
Definition: btrfs.c:3010

◆ d3d9_vertexshader_AddRef()

static ULONG WINAPI d3d9_vertexshader_AddRef ( IDirect3DVertexShader9 *  iface)
static

Definition at line 48 of file shader.c.

49{
52
53 TRACE("%p increasing refcount to %u.\n", iface, refcount);
54
55 if (refcount == 1)
56 {
57 IDirect3DDevice9Ex_AddRef(shader->parent_device);
59 wined3d_shader_incref(shader->wined3d_shader);
61 }
62
63 return refcount;
64}
static struct d3d9_vertexshader * impl_from_IDirect3DVertexShader9(IDirect3DVertexShader9 *iface)
Definition: shader.c:25

◆ d3d9_vertexshader_GetDevice()

static HRESULT WINAPI d3d9_vertexshader_GetDevice ( IDirect3DVertexShader9 *  iface,
IDirect3DDevice9 **  device 
)
static

Definition at line 88 of file shader.c.

89{
91
92 TRACE("iface %p, device %p.\n", iface, device);
93
94 *device = (IDirect3DDevice9 *)shader->parent_device;
96
97 TRACE("Returning device %p.\n", *device);
98
99 return D3D_OK;
100}

◆ d3d9_vertexshader_GetFunction()

static HRESULT WINAPI d3d9_vertexshader_GetFunction ( IDirect3DVertexShader9 *  iface,
void data,
UINT data_size 
)
static

Definition at line 102 of file shader.c.

103{
105 HRESULT hr;
106
107 TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
108
110 hr = wined3d_shader_get_byte_code(shader->wined3d_shader, data, data_size);
112
113 return hr;
114}

◆ d3d9_vertexshader_QueryInterface()

static HRESULT WINAPI d3d9_vertexshader_QueryInterface ( IDirect3DVertexShader9 *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 30 of file shader.c.

31{
32 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
33
34 if (IsEqualGUID(riid, &IID_IDirect3DVertexShader9)
36 {
38 *out = iface;
39 return S_OK;
40 }
41
42 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
43
44 *out = NULL;
45 return E_NOINTERFACE;
46}
#define IDirect3DVertexShader9_AddRef(p)
Definition: d3d9.h:1222

◆ d3d9_vertexshader_Release()

static ULONG WINAPI d3d9_vertexshader_Release ( IDirect3DVertexShader9 *  iface)
static

Definition at line 66 of file shader.c.

67{
70
71 TRACE("%p decreasing refcount to %u.\n", iface, refcount);
72
73 if (!refcount)
74 {
75 IDirect3DDevice9Ex *device = shader->parent_device;
76
78 wined3d_shader_decref(shader->wined3d_shader);
80
81 /* Release the device last, as it may cause the device to be destroyed. */
83 }
84
85 return refcount;
86}

◆ d3d9_vertexshader_wined3d_object_destroyed()

static void STDMETHODCALLTYPE d3d9_vertexshader_wined3d_object_destroyed ( void parent)
static

Definition at line 127 of file shader.c.

128{
130}

◆ impl_from_IDirect3DPixelShader9()

static struct d3d9_pixelshader * impl_from_IDirect3DPixelShader9 ( IDirect3DPixelShader9 *  iface)
inlinestatic

Definition at line 179 of file shader.c.

180{
181 return CONTAINING_RECORD(iface, struct d3d9_pixelshader, IDirect3DPixelShader9_iface);
182}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by d3d9_pixelshader_AddRef(), d3d9_pixelshader_GetDevice(), d3d9_pixelshader_GetFunction(), d3d9_pixelshader_Release(), and unsafe_impl_from_IDirect3DPixelShader9().

◆ impl_from_IDirect3DVertexShader9()

static struct d3d9_vertexshader * impl_from_IDirect3DVertexShader9 ( IDirect3DVertexShader9 *  iface)
inlinestatic

◆ pixelshader_init()

HRESULT pixelshader_init ( struct d3d9_pixelshader shader,
struct d3d9_device device,
const DWORD byte_code 
)

Definition at line 291 of file shader.c.

292{
294 HRESULT hr;
295
296 shader->refcount = 1;
297 shader->IDirect3DPixelShader9_iface.lpVtbl = &d3d9_pixelshader_vtbl;
298
299 desc.byte_code = byte_code;
300 desc.byte_code_size = ~(size_t)0;
302 desc.input_signature.element_count = 0;
303 desc.output_signature.element_count = 0;
304 desc.patch_constant_signature.element_count = 0;
305 desc.max_version = 3;
306
308 hr = wined3d_shader_create_ps(device->wined3d_device, &desc, shader,
311 if (FAILED(hr))
312 {
313 WARN("Failed to created wined3d pixel shader, hr %#x.\n", hr);
314 return hr;
315 }
316
317 shader->parent_device = &device->IDirect3DDevice9Ex_iface;
318 IDirect3DDevice9Ex_AddRef(shader->parent_device);
319
320 return D3D_OK;
321}
static const IDirect3DPixelShader9Vtbl d3d9_pixelshader_vtbl
Definition: shader.c:270
static const struct wined3d_parent_ops d3d9_pixelshader_wined3d_parent_ops
Definition: shader.c:286
HRESULT CDECL wined3d_shader_create_ps(struct wined3d_device *device, const struct wined3d_shader_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_shader **shader)
Definition: shader.c:4205
__kernel_size_t size_t
Definition: linux.h:237
#define FAILED(hr)
Definition: intsafe.h:51
static const WCHAR desc[]
Definition: protectdata.c:36
const DWORD * byte_code
Definition: wined3d.h:2051
@ WINED3D_SHADER_BYTE_CODE_FORMAT_SM1
Definition: wined3d.h:848

Referenced by d3d9_device_CreatePixelShader().

◆ unsafe_impl_from_IDirect3DPixelShader9()

struct d3d9_pixelshader * unsafe_impl_from_IDirect3DPixelShader9 ( IDirect3DPixelShader9 *  iface)

Definition at line 323 of file shader.c.

324{
325 if (!iface)
326 return NULL;
327 if (iface->lpVtbl != &d3d9_pixelshader_vtbl)
328 WARN("Pixel shader %p with the wrong vtbl %p\n", iface, iface->lpVtbl);
329
331}

Referenced by d3d9_device_SetPixelShader().

◆ unsafe_impl_from_IDirect3DVertexShader9()

struct d3d9_vertexshader * unsafe_impl_from_IDirect3DVertexShader9 ( IDirect3DVertexShader9 *  iface)

Definition at line 169 of file shader.c.

170{
171 if (!iface)
172 return NULL;
173 if (iface->lpVtbl != &d3d9_vertexshader_vtbl)
174 WARN("Vertex shader %p with the wrong vtbl %p\n", iface, iface->lpVtbl);
175
177}
static const IDirect3DVertexShader9Vtbl d3d9_vertexshader_vtbl
Definition: shader.c:116

Referenced by d3d9_device_SetVertexShader().

◆ vertexshader_init()

HRESULT vertexshader_init ( struct d3d9_vertexshader shader,
struct d3d9_device device,
const DWORD byte_code 
)

Definition at line 137 of file shader.c.

138{
140 HRESULT hr;
141
142 shader->refcount = 1;
143 shader->IDirect3DVertexShader9_iface.lpVtbl = &d3d9_vertexshader_vtbl;
144
145 desc.byte_code = byte_code;
146 desc.byte_code_size = ~(size_t)0;
148 desc.input_signature.element_count = 0;
149 desc.output_signature.element_count = 0;
150 desc.patch_constant_signature.element_count = 0;
151 desc.max_version = 3;
152
154 hr = wined3d_shader_create_vs(device->wined3d_device, &desc, shader,
157 if (FAILED(hr))
158 {
159 WARN("Failed to create wined3d vertex shader, hr %#x.\n", hr);
160 return hr;
161 }
162
163 shader->parent_device = &device->IDirect3DDevice9Ex_iface;
164 IDirect3DDevice9Ex_AddRef(shader->parent_device);
165
166 return D3D_OK;
167}
static const struct wined3d_parent_ops d3d9_vertexshader_wined3d_parent_ops
Definition: shader.c:132
HRESULT CDECL wined3d_shader_create_vs(struct wined3d_device *device, const struct wined3d_shader_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_shader **shader)
Definition: shader.c:4230

Referenced by d3d9_device_CreateVertexShader().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3d9  )

Variable Documentation

◆ d3d9_pixelshader_vtbl

const IDirect3DPixelShader9Vtbl d3d9_pixelshader_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d9_pixelshader_QueryInterface(IDirect3DPixelShader9 *iface, REFIID riid, void **out)
Definition: shader.c:184
static ULONG WINAPI d3d9_pixelshader_AddRef(IDirect3DPixelShader9 *iface)
Definition: shader.c:202
static ULONG WINAPI d3d9_pixelshader_Release(IDirect3DPixelShader9 *iface)
Definition: shader.c:220
static HRESULT WINAPI d3d9_pixelshader_GetDevice(IDirect3DPixelShader9 *iface, IDirect3DDevice9 **device)
Definition: shader.c:242
static HRESULT WINAPI d3d9_pixelshader_GetFunction(IDirect3DPixelShader9 *iface, void *data, UINT *data_size)
Definition: shader.c:256

Definition at line 270 of file shader.c.

Referenced by pixelshader_init(), and unsafe_impl_from_IDirect3DPixelShader9().

◆ d3d9_pixelshader_wined3d_parent_ops

const struct wined3d_parent_ops d3d9_pixelshader_wined3d_parent_ops
static
Initial value:
=
{
}
static void STDMETHODCALLTYPE d3d9_pixelshader_wined3d_object_destroyed(void *parent)
Definition: shader.c:281

Definition at line 286 of file shader.c.

Referenced by pixelshader_init().

◆ d3d9_vertexshader_vtbl

const IDirect3DVertexShader9Vtbl d3d9_vertexshader_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d9_vertexshader_GetFunction(IDirect3DVertexShader9 *iface, void *data, UINT *data_size)
Definition: shader.c:102
static HRESULT WINAPI d3d9_vertexshader_QueryInterface(IDirect3DVertexShader9 *iface, REFIID riid, void **out)
Definition: shader.c:30
static ULONG WINAPI d3d9_vertexshader_AddRef(IDirect3DVertexShader9 *iface)
Definition: shader.c:48
static HRESULT WINAPI d3d9_vertexshader_GetDevice(IDirect3DVertexShader9 *iface, IDirect3DDevice9 **device)
Definition: shader.c:88
static ULONG WINAPI d3d9_vertexshader_Release(IDirect3DVertexShader9 *iface)
Definition: shader.c:66

Definition at line 116 of file shader.c.

Referenced by unsafe_impl_from_IDirect3DVertexShader9(), and vertexshader_init().

◆ d3d9_vertexshader_wined3d_parent_ops

const struct wined3d_parent_ops d3d9_vertexshader_wined3d_parent_ops
static
Initial value:
=
{
}
static void STDMETHODCALLTYPE d3d9_vertexshader_wined3d_object_destroyed(void *parent)
Definition: shader.c:127

Definition at line 132 of file shader.c.

Referenced by vertexshader_init().