ReactOS 0.4.17-dev-966-gf06eace
texture.c
Go to the documentation of this file.
1/*
2 * Copyright 2002-2005 Jason Edmeades
3 * Copyright 2002-2005 Raphael Junqueira
4 * Copyright 2005 Oliver Stieber
5 *
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.
10 *
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.
15 *
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
19 */
20
21#include "d3d9_private.h"
22
24
26{
27 ULONG ref = InterlockedIncrement(&texture->resource.refcount);
28
29 TRACE("%p increasing refcount to %lu.\n", texture, ref);
30
31 if (ref == 1)
32 {
33 struct d3d9_surface *surface;
34
35 IDirect3DDevice9Ex_AddRef(&texture->parent_device->IDirect3DDevice9Ex_iface);
37 LIST_FOR_EACH_ENTRY(surface, &texture->rtv_list, struct d3d9_surface, rtv_entry)
38 {
40 }
43 }
44
45 return ref;
46}
47
49{
50 ULONG ref = InterlockedDecrement(&texture->resource.refcount);
51
52 TRACE("%p decreasing refcount to %lu.\n", texture, ref);
53
54 if (!ref)
55 {
56 IDirect3DDevice9Ex *parent_device = &texture->parent_device->IDirect3DDevice9Ex_iface;
57 struct d3d9_surface *surface;
58
60 LIST_FOR_EACH_ENTRY(surface, &texture->rtv_list, struct d3d9_surface, rtv_entry)
64
65 /* Release the device last, as it may cause the device to be destroyed. */
67 }
68 return ref;
69}
70
72{
76}
77
78static inline struct d3d9_texture *impl_from_IDirect3DTexture9(IDirect3DTexture9 *iface)
79{
81}
82
83static inline struct d3d9_texture *impl_from_IDirect3DCubeTexture9(IDirect3DCubeTexture9 *iface)
84{
86}
87
88static inline struct d3d9_texture *impl_from_IDirect3DVolumeTexture9(IDirect3DVolumeTexture9 *iface)
89{
91}
92
93/* wined3d critical section must be taken by the caller. */
95{
96 if (!(texture->flags & D3D9_TEXTURE_MIPMAP_DIRTY))
97 return;
98 if (texture->draw_texture)
99 wined3d_device_update_texture(texture->parent_device->wined3d_device,
100 texture->wined3d_texture, texture->draw_texture);
101 wined3d_device_context_generate_mipmaps(texture->parent_device->immediate_context,
103 texture->flags &= ~D3D9_TEXTURE_MIPMAP_DIRTY;
104}
105
107{
108 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP)
110}
111
112static HRESULT WINAPI d3d9_texture_2d_QueryInterface(IDirect3DTexture9 *iface, REFIID riid, void **out)
113{
114 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
115
116 if (IsEqualGUID(riid, &IID_IDirect3DTexture9)
117 || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9)
118 || IsEqualGUID(riid, &IID_IDirect3DResource9)
120 {
122 *out = iface;
123 return S_OK;
124 }
125
126 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
127
128 *out = NULL;
129 return E_NOINTERFACE;
130}
131
132static ULONG WINAPI d3d9_texture_2d_AddRef(IDirect3DTexture9 *iface)
133{
135
137}
138
139static ULONG WINAPI d3d9_texture_2d_Release(IDirect3DTexture9 *iface)
140{
142
144}
145
147{
149
150 TRACE("iface %p, device %p.\n", iface, device);
151
152 *device = (IDirect3DDevice9 *)&texture->parent_device->IDirect3DDevice9Ex_iface;
154
155 TRACE("Returning device %p.\n", *device);
156
157 return D3D_OK;
158}
159
160static HRESULT WINAPI d3d9_texture_2d_SetPrivateData(IDirect3DTexture9 *iface,
161 REFGUID guid, const void *data, DWORD data_size, DWORD flags)
162{
164 TRACE("iface %p, guid %s, data %p, data_size %lu, flags %#lx.\n",
165 iface, debugstr_guid(guid), data, data_size, flags);
166
167 return d3d9_resource_set_private_data(&texture->resource, guid, data, data_size, flags);
168}
169
170static HRESULT WINAPI d3d9_texture_2d_GetPrivateData(IDirect3DTexture9 *iface,
171 REFGUID guid, void *data, DWORD *data_size)
172{
174 TRACE("iface %p, guid %s, data %p, data_size %p.\n",
175 iface, debugstr_guid(guid), data, data_size);
176
177 return d3d9_resource_get_private_data(&texture->resource, guid, data, data_size);
178}
179
181{
183 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
184
185 return d3d9_resource_free_private_data(&texture->resource, guid);
186}
187
188static DWORD WINAPI d3d9_texture_2d_SetPriority(IDirect3DTexture9 *iface, DWORD priority)
189{
192 DWORD ret;
193
194 TRACE("iface %p, priority %lu.\n", iface, priority);
195
200
201 return ret;
202}
203
204static DWORD WINAPI d3d9_texture_2d_GetPriority(IDirect3DTexture9 *iface)
205{
207 const struct wined3d_resource *resource;
208 DWORD ret;
209
210 TRACE("iface %p.\n", iface);
211
216
217 return ret;
218}
219
220static void WINAPI d3d9_texture_2d_PreLoad(IDirect3DTexture9 *iface)
221{
223
224 TRACE("iface %p.\n", iface);
225
227}
228
229static D3DRESOURCETYPE WINAPI d3d9_texture_2d_GetType(IDirect3DTexture9 *iface)
230{
231 TRACE("iface %p.\n", iface);
232
233 return D3DRTYPE_TEXTURE;
234}
235
236static DWORD WINAPI d3d9_texture_2d_SetLOD(IDirect3DTexture9 *iface, DWORD lod)
237{
239 DWORD ret;
240
241 TRACE("iface %p, lod %lu.\n", iface, lod);
242
244 ret = wined3d_stateblock_set_texture_lod(texture->parent_device->state,
247
248 return ret;
249}
250
251static DWORD WINAPI d3d9_texture_2d_GetLOD(IDirect3DTexture9 *iface)
252{
254 DWORD ret;
255
256 TRACE("iface %p.\n", iface);
257
261
262 return ret;
263}
264
265static DWORD WINAPI d3d9_texture_2d_GetLevelCount(IDirect3DTexture9 *iface)
266{
268 DWORD ret;
269
270 TRACE("iface %p.\n", iface);
271
272 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP)
273 return 1;
274
276 ret = wined3d_texture_get_level_count(texture->wined3d_texture);
278
279 return ret;
280}
281
282static HRESULT WINAPI d3d9_texture_2d_SetAutoGenFilterType(IDirect3DTexture9 *iface, D3DTEXTUREFILTERTYPE filter_type)
283{
285
286 TRACE("iface %p, filter_type %#x.\n", iface, filter_type);
287
288 if (filter_type == D3DTEXF_NONE)
289 {
290 WARN("Invalid filter type D3DTEXF_NONE specified.\n");
291 return D3DERR_INVALIDCALL;
292 }
293 if (!(texture->usage & D3DUSAGE_AUTOGENMIPMAP))
294 WARN("Called on a texture without the D3DUSAGE_AUTOGENMIPMAP flag.\n");
295 else if (filter_type != D3DTEXF_LINEAR)
296 FIXME("Unsupported filter type %u.\n", filter_type);
297
298 texture->autogen_filter_type = filter_type;
299 return D3D_OK;
300}
301
303{
305
306 TRACE("iface %p.\n", iface);
307
308 if (!(texture->usage & D3DUSAGE_AUTOGENMIPMAP))
309 WARN("Called on a texture without the D3DUSAGE_AUTOGENMIPMAP flag.\n");
310
311 return texture->autogen_filter_type;
312}
313
314static void WINAPI d3d9_texture_2d_GenerateMipSubLevels(IDirect3DTexture9 *iface)
315{
317
318 TRACE("iface %p.\n", iface);
319
323}
324
326{
328 struct wined3d_sub_resource_desc wined3d_desc;
329 HRESULT hr;
330
331 TRACE("iface %p, level %u, desc %p.\n", iface, level, desc);
332
333 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
334 {
335 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
336 return D3DERR_INVALIDCALL;
337 }
338
340 if (SUCCEEDED(hr = wined3d_texture_get_sub_resource_desc(texture->wined3d_texture, level, &wined3d_desc)))
341 {
342 desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
343 desc->Type = D3DRTYPE_SURFACE;
344 desc->Usage = texture->usage;
345 desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage);
346 desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type);
347 desc->MultiSampleQuality = wined3d_desc.multisample_quality;
348 desc->Width = wined3d_desc.width;
349 desc->Height = wined3d_desc.height;
350 }
352
353 return hr;
354}
355
356static HRESULT WINAPI d3d9_texture_2d_GetSurfaceLevel(IDirect3DTexture9 *iface,
357 UINT level, IDirect3DSurface9 **surface)
358{
360 struct d3d9_surface *surface_impl;
361
362 TRACE("iface %p, level %u, surface %p.\n", iface, level, surface);
363
364 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
365 {
366 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
367 return D3DERR_INVALIDCALL;
368 }
369
371 if (!(surface_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, level)))
372 {
374 return D3DERR_INVALIDCALL;
375 }
376
377 *surface = &surface_impl->IDirect3DSurface9_iface;
378 IDirect3DSurface9_AddRef(*surface);
380
381 return D3D_OK;
382}
383
384static HRESULT WINAPI d3d9_texture_2d_LockRect(IDirect3DTexture9 *iface,
385 UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags)
386{
388 struct d3d9_surface *surface_impl;
389 HRESULT hr;
390
391 TRACE("iface %p, level %u, locked_rect %p, rect %p, flags %#lx.\n",
392 iface, level, locked_rect, rect, flags);
393
394 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
395 {
396 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
397 return D3DERR_INVALIDCALL;
398 }
399
401 if (!(surface_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, level)))
403 else
404 hr = IDirect3DSurface9_LockRect(&surface_impl->IDirect3DSurface9_iface, locked_rect, rect, flags);
406
407 return hr;
408}
409
410static HRESULT WINAPI d3d9_texture_2d_UnlockRect(IDirect3DTexture9 *iface, UINT level)
411{
413 struct d3d9_surface *surface_impl;
414 HRESULT hr;
415
416 TRACE("iface %p, level %u.\n", iface, level);
417
418 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
419 {
420 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
421 return D3DERR_INVALIDCALL;
422 }
423
425 if (!(surface_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, level)))
427 else
430
431 return hr;
432}
433
434static HRESULT WINAPI d3d9_texture_2d_AddDirtyRect(IDirect3DTexture9 *iface, const RECT *dirty_rect)
435{
437 HRESULT hr;
438
439 TRACE("iface %p, dirty_rect %s.\n",
440 iface, wine_dbgstr_rect(dirty_rect));
441
443 if (!dirty_rect)
444 hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, 0, NULL);
445 else
446 {
447 struct wined3d_box dirty_region;
448
449 wined3d_box_set(&dirty_region, dirty_rect->left, dirty_rect->top, dirty_rect->right, dirty_rect->bottom, 0, 1);
450 hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, 0, &dirty_region);
451 }
453
454 return hr;
455}
456
457static const IDirect3DTexture9Vtbl d3d9_texture_2d_vtbl =
458{
459 /* IUnknown */
463 /* IDirect3DResource9 */
472 /* IDirect3dBaseTexture9 */
479 /* IDirect3DTexture9 */
485};
486
487static HRESULT WINAPI d3d9_texture_cube_QueryInterface(IDirect3DCubeTexture9 *iface, REFIID riid, void **out)
488{
489 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
490
491 if (IsEqualGUID(riid, &IID_IDirect3DCubeTexture9)
492 || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9)
493 || IsEqualGUID(riid, &IID_IDirect3DResource9)
495 {
497 *out = iface;
498 return S_OK;
499 }
500
501 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
502
503 *out = NULL;
504 return E_NOINTERFACE;
505}
506
507static ULONG WINAPI d3d9_texture_cube_AddRef(IDirect3DCubeTexture9 *iface)
508{
510
512}
513
514static ULONG WINAPI d3d9_texture_cube_Release(IDirect3DCubeTexture9 *iface)
515{
517
519}
520
521static HRESULT WINAPI d3d9_texture_cube_GetDevice(IDirect3DCubeTexture9 *iface, IDirect3DDevice9 **device)
522{
524
525 TRACE("iface %p, device %p.\n", iface, device);
526
527 *device = (IDirect3DDevice9 *)&texture->parent_device->IDirect3DDevice9Ex_iface;
529
530 TRACE("Returning device %p.\n", *device);
531
532 return D3D_OK;
533}
534
535static HRESULT WINAPI d3d9_texture_cube_SetPrivateData(IDirect3DCubeTexture9 *iface,
536 REFGUID guid, const void *data, DWORD data_size, DWORD flags)
537{
539 TRACE("iface %p, guid %s, data %p, data_size %lu, flags %#lx.\n",
540 iface, debugstr_guid(guid), data, data_size, flags);
541
542 return d3d9_resource_set_private_data(&texture->resource, guid, data, data_size, flags);
543}
544
545static HRESULT WINAPI d3d9_texture_cube_GetPrivateData(IDirect3DCubeTexture9 *iface,
546 REFGUID guid, void *data, DWORD *data_size)
547{
549 TRACE("iface %p, guid %s, data %p, data_size %p.\n",
550 iface, debugstr_guid(guid), data, data_size);
551
552 return d3d9_resource_get_private_data(&texture->resource, guid, data, data_size);
553}
554
555static HRESULT WINAPI d3d9_texture_cube_FreePrivateData(IDirect3DCubeTexture9 *iface, REFGUID guid)
556{
558 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
559
560 return d3d9_resource_free_private_data(&texture->resource, guid);
561}
562
563static DWORD WINAPI d3d9_texture_cube_SetPriority(IDirect3DCubeTexture9 *iface, DWORD priority)
564{
567 DWORD ret;
568
569 TRACE("iface %p, priority %lu.\n", iface, priority);
570
575
576 return ret;
577}
578
579static DWORD WINAPI d3d9_texture_cube_GetPriority(IDirect3DCubeTexture9 *iface)
580{
582 const struct wined3d_resource *resource;
583 DWORD ret;
584
585 TRACE("iface %p.\n", iface);
586
591
592 return ret;
593}
594
595static void WINAPI d3d9_texture_cube_PreLoad(IDirect3DCubeTexture9 *iface)
596{
598
599 TRACE("iface %p.\n", iface);
600
602}
603
604static D3DRESOURCETYPE WINAPI d3d9_texture_cube_GetType(IDirect3DCubeTexture9 *iface)
605{
606 TRACE("iface %p.\n", iface);
607
609}
610
611static DWORD WINAPI d3d9_texture_cube_SetLOD(IDirect3DCubeTexture9 *iface, DWORD lod)
612{
614 DWORD ret;
615
616 TRACE("iface %p, lod %lu.\n", iface, lod);
617
619 ret = wined3d_stateblock_set_texture_lod(texture->parent_device->state,
622
623 return ret;
624}
625
626static DWORD WINAPI d3d9_texture_cube_GetLOD(IDirect3DCubeTexture9 *iface)
627{
629 DWORD ret;
630
631 TRACE("iface %p.\n", iface);
632
636
637 return ret;
638}
639
640static DWORD WINAPI d3d9_texture_cube_GetLevelCount(IDirect3DCubeTexture9 *iface)
641{
643 DWORD ret;
644
645 TRACE("iface %p.\n", iface);
646
647 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP)
648 return 1;
649
651 ret = wined3d_texture_get_level_count(texture->wined3d_texture);
653
654 return ret;
655}
656
657static HRESULT WINAPI d3d9_texture_cube_SetAutoGenFilterType(IDirect3DCubeTexture9 *iface,
658 D3DTEXTUREFILTERTYPE filter_type)
659{
661
662 TRACE("iface %p, filter_type %#x.\n", iface, filter_type);
663
664 if (filter_type == D3DTEXF_NONE)
665 {
666 WARN("Invalid filter type D3DTEXF_NONE specified.\n");
667 return D3DERR_INVALIDCALL;
668 }
669 if (!(texture->usage & D3DUSAGE_AUTOGENMIPMAP))
670 WARN("Called on a texture without the D3DUSAGE_AUTOGENMIPMAP flag.\n");
671 else if (filter_type != D3DTEXF_LINEAR)
672 FIXME("Unsupported filter type %u.\n", filter_type);
673
674 texture->autogen_filter_type = filter_type;
675 return D3D_OK;
676}
677
679{
681
682 TRACE("iface %p.\n", iface);
683
684 if (!(texture->usage & D3DUSAGE_AUTOGENMIPMAP))
685 WARN("Called on a texture without the D3DUSAGE_AUTOGENMIPMAP flag.\n");
686
687 return texture->autogen_filter_type;
688}
689
690static void WINAPI d3d9_texture_cube_GenerateMipSubLevels(IDirect3DCubeTexture9 *iface)
691{
693
694 TRACE("iface %p.\n", iface);
695
699}
700
702{
704 struct wined3d_sub_resource_desc wined3d_desc;
705 DWORD level_count;
706 HRESULT hr;
707
708 TRACE("iface %p, level %u, desc %p.\n", iface, level, desc);
709
710 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
711 {
712 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
713 return D3DERR_INVALIDCALL;
714 }
715
717 level_count = wined3d_texture_get_level_count(texture->wined3d_texture);
718 if (level >= level_count)
719 {
721 return D3DERR_INVALIDCALL;
722 }
723
724 if (SUCCEEDED(hr = wined3d_texture_get_sub_resource_desc(texture->wined3d_texture, level, &wined3d_desc)))
725 {
726 desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
727 desc->Type = D3DRTYPE_SURFACE;
728 desc->Usage = texture->usage;
729 desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage);
730 desc->MultiSampleType = d3dmultisample_type_from_wined3d(wined3d_desc.multisample_type);
731 desc->MultiSampleQuality = wined3d_desc.multisample_quality;
732 desc->Width = wined3d_desc.width;
733 desc->Height = wined3d_desc.height;
734 }
736
737 return hr;
738}
739
740static HRESULT WINAPI d3d9_texture_cube_GetCubeMapSurface(IDirect3DCubeTexture9 *iface,
742{
744 struct d3d9_surface *surface_impl;
746 DWORD level_count;
747
748 TRACE("iface %p, face %#x, level %u, surface %p.\n", iface, face, level, surface);
749
750 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
751 {
752 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
753 return D3DERR_INVALIDCALL;
754 }
755
757 level_count = wined3d_texture_get_level_count(texture->wined3d_texture);
758 if (level >= level_count)
759 {
761 return D3DERR_INVALIDCALL;
762 }
763
764 sub_resource_idx = level_count * face + level;
765 if (!(surface_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, sub_resource_idx)))
766 {
768 return D3DERR_INVALIDCALL;
769 }
770
771 *surface = &surface_impl->IDirect3DSurface9_iface;
772 IDirect3DSurface9_AddRef(*surface);
774
775 return D3D_OK;
776}
777
778static HRESULT WINAPI d3d9_texture_cube_LockRect(IDirect3DCubeTexture9 *iface,
779 D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect,
780 DWORD flags)
781{
783 struct d3d9_surface *surface_impl;
785 HRESULT hr;
786
787 TRACE("iface %p, face %#x, level %u, locked_rect %p, rect %p, flags %#lx.\n",
788 iface, face, level, locked_rect, rect, flags);
789
790 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
791 {
792 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
793 return D3DERR_INVALIDCALL;
794 }
795
798 if (!(surface_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, sub_resource_idx)))
800 else
801 hr = IDirect3DSurface9_LockRect(&surface_impl->IDirect3DSurface9_iface, locked_rect, rect, flags);
803
804 return hr;
805}
806
807static HRESULT WINAPI d3d9_texture_cube_UnlockRect(IDirect3DCubeTexture9 *iface,
809{
811 struct d3d9_surface *surface_impl;
813 HRESULT hr;
814
815 TRACE("iface %p, face %#x, level %u.\n", iface, face, level);
816
817 if (texture->usage & D3DUSAGE_AUTOGENMIPMAP && level)
818 {
819 WARN("D3DUSAGE_AUTOGENMIPMAP textures have only one accessible level.\n");
820 return D3DERR_INVALIDCALL;
821 }
822
825 if (!(surface_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, sub_resource_idx)))
827 else
830
831 return hr;
832}
833
834static HRESULT WINAPI d3d9_texture_cube_AddDirtyRect(IDirect3DCubeTexture9 *iface,
835 D3DCUBEMAP_FACES face, const RECT *dirty_rect)
836{
838 HRESULT hr;
839
840 TRACE("iface %p, face %#x, dirty_rect %s.\n",
841 iface, face, wine_dbgstr_rect(dirty_rect));
842
844 if (!dirty_rect)
846 else
847 {
848 struct wined3d_box dirty_region;
849
850 wined3d_box_set(&dirty_region, dirty_rect->left, dirty_rect->top, dirty_rect->right, dirty_rect->bottom, 0, 1);
851 hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, face, &dirty_region);
852 }
854
855 return hr;
856}
857
858static const IDirect3DCubeTexture9Vtbl d3d9_texture_cube_vtbl =
859{
860 /* IUnknown */
864 /* IDirect3DResource9 */
873 /* IDirect3DBaseTexture9 */
880 /* IDirect3DCubeTexture9 */
886};
887
888static HRESULT WINAPI d3d9_texture_3d_QueryInterface(IDirect3DVolumeTexture9 *iface, REFIID riid, void **out)
889{
890 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
891
892 if (IsEqualGUID(riid, &IID_IDirect3DVolumeTexture9)
893 || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9)
894 || IsEqualGUID(riid, &IID_IDirect3DResource9)
896 {
898 *out = iface;
899 return S_OK;
900 }
901
902 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
903
904 *out = NULL;
905 return E_NOINTERFACE;
906}
907
908static ULONG WINAPI d3d9_texture_3d_AddRef(IDirect3DVolumeTexture9 *iface)
909{
911
913}
914
915static ULONG WINAPI d3d9_texture_3d_Release(IDirect3DVolumeTexture9 *iface)
916{
918
920}
921
922static HRESULT WINAPI d3d9_texture_3d_GetDevice(IDirect3DVolumeTexture9 *iface, IDirect3DDevice9 **device)
923{
925
926 TRACE("iface %p, device %p.\n", iface, device);
927
928 *device = (IDirect3DDevice9 *)&texture->parent_device->IDirect3DDevice9Ex_iface;
930
931 TRACE("Returning device %p.\n", *device);
932
933 return D3D_OK;
934}
935
936static HRESULT WINAPI d3d9_texture_3d_SetPrivateData(IDirect3DVolumeTexture9 *iface,
937 REFGUID guid, const void *data, DWORD data_size, DWORD flags)
938{
940 TRACE("iface %p, guid %s, data %p, data_size %lu, flags %#lx.\n",
941 iface, debugstr_guid(guid), data, data_size, flags);
942
943 return d3d9_resource_set_private_data(&texture->resource, guid, data, data_size, flags);
944}
945
946static HRESULT WINAPI d3d9_texture_3d_GetPrivateData(IDirect3DVolumeTexture9 *iface,
947 REFGUID guid, void *data, DWORD *data_size)
948{
950 TRACE("iface %p, guid %s, data %p, data_size %p.\n",
951 iface, debugstr_guid(guid), data, data_size);
952
953 return d3d9_resource_get_private_data(&texture->resource, guid, data, data_size);
954}
955
956static HRESULT WINAPI d3d9_texture_3d_FreePrivateData(IDirect3DVolumeTexture9 *iface, REFGUID guid)
957{
959 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
960
961 return d3d9_resource_free_private_data(&texture->resource, guid);
962}
963
964static DWORD WINAPI d3d9_texture_3d_SetPriority(IDirect3DVolumeTexture9 *iface, DWORD priority)
965{
968 DWORD ret;
969
970 TRACE("iface %p, priority %lu.\n", iface, priority);
971
976
977 return ret;
978}
979
980static DWORD WINAPI d3d9_texture_3d_GetPriority(IDirect3DVolumeTexture9 *iface)
981{
983 const struct wined3d_resource *resource;
984 DWORD ret;
985
986 TRACE("iface %p.\n", iface);
987
992
993 return ret;
994}
995
996static void WINAPI d3d9_texture_3d_PreLoad(IDirect3DVolumeTexture9 *iface)
997{
999
1000 TRACE("iface %p.\n", iface);
1001
1003}
1004
1005static D3DRESOURCETYPE WINAPI d3d9_texture_3d_GetType(IDirect3DVolumeTexture9 *iface)
1006{
1007 TRACE("iface %p.\n", iface);
1008
1010}
1011
1012static DWORD WINAPI d3d9_texture_3d_SetLOD(IDirect3DVolumeTexture9 *iface, DWORD lod)
1013{
1015 DWORD ret;
1016
1017 TRACE("iface %p, lod %lu.\n", iface, lod);
1018
1020 ret = wined3d_stateblock_set_texture_lod(texture->parent_device->state,
1023
1024 return ret;
1025}
1026
1027static DWORD WINAPI d3d9_texture_3d_GetLOD(IDirect3DVolumeTexture9 *iface)
1028{
1030 DWORD ret;
1031
1032 TRACE("iface %p.\n", iface);
1033
1037
1038 return ret;
1039}
1040
1041static DWORD WINAPI d3d9_texture_3d_GetLevelCount(IDirect3DVolumeTexture9 *iface)
1042{
1044 DWORD ret;
1045
1046 TRACE("iface %p.\n", iface);
1047
1049 ret = wined3d_texture_get_level_count(texture->wined3d_texture);
1051
1052 return ret;
1053}
1054
1055static HRESULT WINAPI d3d9_texture_3d_SetAutoGenFilterType(IDirect3DVolumeTexture9 *iface,
1056 D3DTEXTUREFILTERTYPE filter_type)
1057{
1058 TRACE("iface %p, filter_type %#x.\n", iface, filter_type);
1059
1060 return D3DERR_INVALIDCALL;
1061}
1062
1064{
1065 TRACE("iface %p.\n", iface);
1066
1067 return D3DTEXF_NONE;
1068}
1069
1070static void WINAPI d3d9_texture_3d_GenerateMipSubLevels(IDirect3DVolumeTexture9 *iface)
1071{
1072 TRACE("iface %p.\n", iface);
1073}
1074
1076{
1078 struct wined3d_sub_resource_desc wined3d_desc;
1079 HRESULT hr;
1080
1081 TRACE("iface %p, level %u, desc %p.\n", iface, level, desc);
1082
1084 if (SUCCEEDED(hr = wined3d_texture_get_sub_resource_desc(texture->wined3d_texture, level, &wined3d_desc)))
1085 {
1086 desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format);
1087 desc->Type = D3DRTYPE_VOLUME;
1088 desc->Usage = texture->usage;
1089 desc->Pool = d3dpool_from_wined3daccess(wined3d_desc.access, wined3d_desc.usage);
1090 desc->Width = wined3d_desc.width;
1091 desc->Height = wined3d_desc.height;
1092 desc->Depth = wined3d_desc.depth;
1093 }
1095
1096 return hr;
1097}
1098
1099static HRESULT WINAPI d3d9_texture_3d_GetVolumeLevel(IDirect3DVolumeTexture9 *iface,
1100 UINT level, IDirect3DVolume9 **volume)
1101{
1103 struct d3d9_volume *volume_impl;
1104
1105 TRACE("iface %p, level %u, volume %p.\n", iface, level, volume);
1106
1108 if (!(volume_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, level)))
1109 {
1111 return D3DERR_INVALIDCALL;
1112 }
1113
1114 *volume = &volume_impl->IDirect3DVolume9_iface;
1117
1118 return D3D_OK;
1119}
1120
1121static HRESULT WINAPI d3d9_texture_3d_LockBox(IDirect3DVolumeTexture9 *iface,
1122 UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags)
1123{
1125 struct d3d9_volume *volume_impl;
1126 HRESULT hr;
1127
1128 TRACE("iface %p, level %u, locked_box %p, box %p, flags %#lx.\n",
1129 iface, level, locked_box, box, flags);
1130
1132 if (!(volume_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, level)))
1134 else
1135 hr = IDirect3DVolume9_LockBox(&volume_impl->IDirect3DVolume9_iface, locked_box, box, flags);
1137
1138 return hr;
1139}
1140
1141static HRESULT WINAPI d3d9_texture_3d_UnlockBox(IDirect3DVolumeTexture9 *iface, UINT level)
1142{
1144 struct d3d9_volume *volume_impl;
1145 HRESULT hr;
1146
1147 TRACE("iface %p, level %u.\n", iface, level);
1148
1150 if (!(volume_impl = wined3d_texture_get_sub_resource_parent(texture->wined3d_texture, level)))
1152 else
1155
1156 return hr;
1157}
1158
1159static HRESULT WINAPI d3d9_texture_3d_AddDirtyBox(IDirect3DVolumeTexture9 *iface, const D3DBOX *dirty_box)
1160{
1162 HRESULT hr;
1163
1164 TRACE("iface %p, dirty_box %p.\n", iface, dirty_box);
1165
1167 hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, 0, (const struct wined3d_box *)dirty_box);
1169
1170 return hr;
1171}
1172
1173
1174static const IDirect3DVolumeTexture9Vtbl d3d9_texture_3d_vtbl =
1175{
1176 /* IUnknown */
1180 /* IDirect3DResource9 */
1189 /* IDirect3DBaseTexture9 */
1196 /* IDirect3DVolumeTexture9 */
1202};
1203
1204struct d3d9_texture *unsafe_impl_from_IDirect3DBaseTexture9(IDirect3DBaseTexture9 *iface)
1205{
1206 if (!iface)
1207 return NULL;
1208
1209 if (iface->lpVtbl != (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_2d_vtbl
1210 && iface->lpVtbl != (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_cube_vtbl
1211 && iface->lpVtbl != (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_3d_vtbl)
1212 {
1213 WARN("%p is not a valid IDirect3DBaseTexture9 interface.\n", iface);
1214 return NULL;
1215 }
1216
1218}
1219
1221{
1222 struct d3d9_texture *texture = parent;
1223
1224 /* If the texture was managed, release the sysmem copy now. */
1225 if (texture->draw_texture)
1226 wined3d_texture_decref(texture->wined3d_texture);
1227 d3d9_resource_cleanup(&texture->resource);
1228 free(texture);
1229}
1230
1232{
1234};
1235
1238 unsigned int layer_count, unsigned int level_count)
1239{
1241 unsigned int output_idx;
1242 unsigned int flags = 0;
1243 HRESULT hr;
1244
1245 if (pool == D3DPOOL_MANAGED && device->d3d_parent->extended)
1246 {
1247 WARN("Managed resources are not supported by d3d9ex devices.\n");
1248 return D3DERR_INVALIDCALL;
1249 }
1250
1251 d3d9_resource_init(&texture->resource);
1252 list_init(&texture->rtv_list);
1253 texture->usage = usage;
1254
1255 if (desc->resource_type == WINED3D_RTYPE_TEXTURE_2D && is_gdi_compat_wined3dformat(desc->format))
1259
1261 {
1262 WARN("Texture can't be created with the D3DUSAGE_WRITEONLY flags, returning D3DERR_INVALIDCALL.\n");
1263 return D3DERR_INVALIDCALL;
1264 }
1266 {
1267 if (desc->resource_type == WINED3D_RTYPE_TEXTURE_3D)
1268 {
1269 WARN("Texture can't be created with the D3DUSAGE_WRITEONLY flags, returning D3DERR_INVALIDCALL.\n");
1270 return D3DERR_INVALIDCALL;
1271 }
1272
1273 if (pool == D3DPOOL_SYSTEMMEM)
1274 {
1275 WARN("D3DUSAGE_AUTOGENMIPMAP texture can't be in D3DPOOL_SYSTEMMEM, returning D3DERR_INVALIDCALL.\n");
1276 return D3DERR_INVALIDCALL;
1277 }
1278
1279 if (level_count && level_count != 1)
1280 {
1281 WARN("D3DUSAGE_AUTOGENMIPMAP texture with %u level_count, returning D3DERR_INVALIDCALL.\n", level_count);
1282 return D3DERR_INVALIDCALL;
1283 }
1285 output_idx = device->adapter_ordinal;
1286 wined3d_adapter = wined3d_output_get_adapter(device->d3d_parent->wined3d_outputs[output_idx]);
1287 hr = wined3d_check_device_format(device->d3d_parent->wined3d, wined3d_adapter,
1291 if (hr == D3D_OK)
1292 {
1294 level_count = 0;
1295 }
1296 else
1297 {
1298 WARN("Mipmap autogeneration is not supported on wined3d format %#x, "
1299 "creating a texture with a single level.\n", desc->format);
1300 level_count = 1;
1301 }
1302 texture->autogen_filter_type = D3DTEXF_LINEAR;
1303 }
1304 else
1305 {
1306 texture->autogen_filter_type = D3DTEXF_NONE;
1307 }
1308 if (!level_count)
1309 level_count = wined3d_log2i(max(max(desc->width, desc->height), desc->depth)) + 1;
1310
1312 if (pool == D3DPOOL_MANAGED)
1313 {
1314 struct wined3d_resource_desc managed_desc = *desc;
1315
1317 managed_desc.bind_flags = 0;
1318 if (FAILED(hr = wined3d_texture_create(device->wined3d_device, &managed_desc, layer_count, level_count, flags,
1319 NULL, texture, &d3d9_null_wined3d_parent_ops, &texture->wined3d_texture)))
1320 {
1322 WARN("Failed to create sysmem texture, hr %#lx.\n", hr);
1323 return hr;
1324 }
1325
1326 managed_desc.access = WINED3D_RESOURCE_ACCESS_GPU;
1327 managed_desc.bind_flags = desc->bind_flags;
1329 if (FAILED(hr = wined3d_texture_create(device->wined3d_device, &managed_desc, layer_count, level_count, flags,
1331 {
1332 wined3d_texture_decref(texture->wined3d_texture);
1334 WARN("Failed to create draw texture, hr %#lx.\n", hr);
1335 return hr;
1336 }
1337 }
1338 else
1339 {
1340 if (FAILED(hr = wined3d_texture_create(device->wined3d_device, desc, layer_count, level_count, flags,
1341 NULL, texture, &d3d9_texture_wined3d_parent_ops, &texture->wined3d_texture)))
1342 {
1344 WARN("Failed to create wined3d texture, hr %#lx.\n", hr);
1345 return hr;
1346 }
1347 }
1349
1350 texture->parent_device = device;
1351 IDirect3DDevice9Ex_AddRef(&texture->parent_device->IDirect3DDevice9Ex_iface);
1352
1353 return D3D_OK;
1354}
1355
1357 unsigned int height, unsigned int level_count, DWORD usage, D3DFORMAT format, D3DPOOL pool)
1358{
1360
1361 desc.resource_type = WINED3D_RTYPE_TEXTURE_2D;
1363 desc.multisample_type = WINED3D_MULTISAMPLE_NONE;
1364 desc.multisample_quality = 0;
1368 desc.width = width;
1369 desc.height = height;
1370 desc.depth = 1;
1371 desc.size = 0;
1372
1373 if (!device->d3d_parent->extended)
1375
1376 texture->IDirect3DBaseTexture9_iface.lpVtbl = (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_2d_vtbl;
1377 return d3d9_texture_init(texture, device, &desc, pool, usage, 1, level_count);
1378}
1379
1381 unsigned int edge_length, unsigned int level_count, DWORD usage, D3DFORMAT format, D3DPOOL pool)
1382{
1384
1385 desc.resource_type = WINED3D_RTYPE_TEXTURE_2D;
1387 desc.multisample_type = WINED3D_MULTISAMPLE_NONE;
1388 desc.multisample_quality = 0;
1392 desc.width = edge_length;
1393 desc.height = edge_length;
1394 desc.depth = 1;
1395 desc.size = 0;
1396
1397 if (!device->d3d_parent->extended)
1399
1400 texture->IDirect3DBaseTexture9_iface.lpVtbl = (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_cube_vtbl;
1401 return d3d9_texture_init(texture, device, &desc, pool, usage, 6, level_count);
1402}
1403
1405 unsigned int height, unsigned int depth, unsigned int level_count, DWORD usage, D3DFORMAT format, D3DPOOL pool)
1406{
1408
1409 /* In d3d9, 3D textures can't be used as rendertarget or depth/stencil buffer. */
1411 return D3DERR_INVALIDCALL;
1412
1413 desc.resource_type = WINED3D_RTYPE_TEXTURE_3D;
1415 desc.multisample_type = WINED3D_MULTISAMPLE_NONE;
1416 desc.multisample_quality = 0;
1420 desc.width = width;
1421 desc.height = height;
1422 desc.depth = depth;
1423 desc.size = 0;
1424
1425 if (!device->d3d_parent->extended)
1427
1428 texture->IDirect3DBaseTexture9_iface.lpVtbl = (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_3d_vtbl;
1429 return d3d9_texture_init(texture, device, &desc, pool, usage, 1, level_count);
1430}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
RECT rect
Definition: combotst.c:67
#define D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
D3DFORMAT d3dformat_from_wined3dformat(enum wined3d_format_id format)
Definition: device.c:33
static D3DMULTISAMPLE_TYPE d3dmultisample_type_from_wined3d(enum wined3d_multisample_type type)
Definition: d3d8_private.h:387
static unsigned int wined3d_usage_from_d3d(D3DPOOL pool, DWORD usage)
Definition: d3d8_private.h:365
static unsigned int wined3daccess_from_d3dpool(D3DPOOL pool, unsigned int usage)
Definition: d3d8_private.h:341
static D3DPOOL d3dpool_from_wined3daccess(unsigned int access, unsigned int usage)
Definition: d3d8_private.h:315
enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format)
Definition: device.c:84
@ D3DTEXF_NONE
Definition: d3d8types.h:870
@ D3DTEXF_LINEAR
Definition: d3d8types.h:872
enum _D3DRESOURCETYPE D3DRESOURCETYPE
#define D3DUSAGE_WRITEONLY
Definition: d3d8types.h:93
@ D3DRTYPE_TEXTURE
Definition: d3d8types.h:812
@ D3DRTYPE_VOLUMETEXTURE
Definition: d3d8types.h:813
@ D3DRTYPE_CUBETEXTURE
Definition: d3d8types.h:814
@ D3DRTYPE_VOLUME
Definition: d3d8types.h:811
@ D3DRTYPE_SURFACE
Definition: d3d8types.h:810
enum _D3DPOOL D3DPOOL
#define D3DUSAGE_RENDERTARGET
Definition: d3d8types.h:91
@ D3DPOOL_SYSTEMMEM
Definition: d3d8types.h:711
@ D3DPOOL_MANAGED
Definition: d3d8types.h:710
enum _D3DFORMAT D3DFORMAT
enum _D3DCUBEMAP_FACES D3DCUBEMAP_FACES
#define D3DUSAGE_DEPTHSTENCIL
Definition: d3d8types.h:92
enum _D3DTEXTUREFILTERTYPE D3DTEXTUREFILTERTYPE
#define IDirect3DVolume9_AddRef(p)
Definition: d3d9.h:276
#define IDirect3DCubeTexture9_AddRef(p)
Definition: d3d9.h:746
#define IDirect3DTexture9_AddRef(p)
Definition: d3d9.h:841
#define IDirect3DSurface9_LockRect(p, a, b, c)
Definition: d3d9.h:463
#define IDirect3DVolume9_UnlockBox(p)
Definition: d3d9.h:286
#define IDirect3DVolume9_LockBox(p, a, b, c)
Definition: d3d9.h:285
#define IDirect3DDevice9Ex_Release(p)
Definition: d3d9.h:1930
#define IDirect3DSurface9_AddRef(p)
Definition: d3d9.h:449
#define IDirect3DDevice9Ex_AddRef(p)
Definition: d3d9.h:1929
#define IDirect3DSurface9_UnlockRect(p)
Definition: d3d9.h:464
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1335
#define IDirect3DVolumeTexture9_AddRef(p)
Definition: d3d9.h:936
void d3d9_resource_init(struct d3d9_resource *resource)
Definition: d3d9_main.c:345
HRESULT d3d9_resource_free_private_data(struct d3d9_resource *resource, const GUID *guid)
Definition: d3d9_main.c:289
HRESULT d3d9_resource_set_private_data(struct d3d9_resource *resource, const GUID *guid, const void *data, DWORD data_size, DWORD flags)
Definition: d3d9_main.c:351
void d3d9_resource_cleanup(struct d3d9_resource *resource)
Definition: d3d9_main.c:284
HRESULT d3d9_resource_get_private_data(struct d3d9_resource *resource, const GUID *guid, void *data, DWORD *data_size)
Definition: d3d9_main.c:307
#define D3DUSAGE_AUTOGENMIPMAP
Definition: d3d9types.h:113
#define D3D_OK
Definition: d3d.h:106
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
static HRESULT WINAPI d3d9_texture_2d_GetPrivateData(IDirect3DTexture9 *iface, REFGUID guid, void *data, DWORD *data_size)
Definition: texture.c:170
static HRESULT WINAPI d3d9_texture_2d_UnlockRect(IDirect3DTexture9 *iface, UINT level)
Definition: texture.c:410
static HRESULT WINAPI d3d9_texture_2d_LockRect(IDirect3DTexture9 *iface, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags)
Definition: texture.c:384
static void WINAPI d3d9_texture_3d_GenerateMipSubLevels(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:1070
static HRESULT WINAPI d3d9_texture_cube_AddDirtyRect(IDirect3DCubeTexture9 *iface, D3DCUBEMAP_FACES face, const RECT *dirty_rect)
Definition: texture.c:834
static D3DTEXTUREFILTERTYPE WINAPI d3d9_texture_3d_GetAutoGenFilterType(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:1063
static DWORD WINAPI d3d9_texture_cube_SetLOD(IDirect3DCubeTexture9 *iface, DWORD lod)
Definition: texture.c:611
static HRESULT WINAPI d3d9_texture_cube_GetLevelDesc(IDirect3DCubeTexture9 *iface, UINT level, D3DSURFACE_DESC *desc)
Definition: texture.c:701
static HRESULT WINAPI d3d9_texture_cube_GetDevice(IDirect3DCubeTexture9 *iface, IDirect3DDevice9 **device)
Definition: texture.c:521
static DWORD WINAPI d3d9_texture_2d_GetLOD(IDirect3DTexture9 *iface)
Definition: texture.c:251
static HRESULT WINAPI d3d9_texture_2d_GetSurfaceLevel(IDirect3DTexture9 *iface, UINT level, IDirect3DSurface9 **surface)
Definition: texture.c:356
static ULONG WINAPI d3d9_texture_3d_Release(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:915
static HRESULT WINAPI d3d9_texture_2d_SetPrivateData(IDirect3DTexture9 *iface, REFGUID guid, const void *data, DWORD data_size, DWORD flags)
Definition: texture.c:160
static const IDirect3DVolumeTexture9Vtbl d3d9_texture_3d_vtbl
Definition: texture.c:1174
HRESULT d3d9_texture_cube_init(struct d3d9_texture *texture, struct d3d9_device *device, unsigned int edge_length, unsigned int level_count, DWORD usage, D3DFORMAT format, D3DPOOL pool)
Definition: texture.c:1380
static DWORD WINAPI d3d9_texture_3d_GetLevelCount(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:1041
static DWORD WINAPI d3d9_texture_2d_GetPriority(IDirect3DTexture9 *iface)
Definition: texture.c:204
static const IDirect3DTexture9Vtbl d3d9_texture_2d_vtbl
Definition: texture.c:457
static ULONG d3d9_texture_incref(struct d3d9_texture *texture)
Definition: texture.c:25
static DWORD WINAPI d3d9_texture_3d_SetPriority(IDirect3DVolumeTexture9 *iface, DWORD priority)
Definition: texture.c:964
static HRESULT WINAPI d3d9_texture_cube_SetPrivateData(IDirect3DCubeTexture9 *iface, REFGUID guid, const void *data, DWORD data_size, DWORD flags)
Definition: texture.c:535
static ULONG WINAPI d3d9_texture_3d_AddRef(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:908
static ULONG WINAPI d3d9_texture_2d_AddRef(IDirect3DTexture9 *iface)
Definition: texture.c:132
static HRESULT WINAPI d3d9_texture_3d_GetPrivateData(IDirect3DVolumeTexture9 *iface, REFGUID guid, void *data, DWORD *data_size)
Definition: texture.c:946
struct d3d9_texture * unsafe_impl_from_IDirect3DBaseTexture9(IDirect3DBaseTexture9 *iface)
Definition: texture.c:1204
static DWORD WINAPI d3d9_texture_3d_GetLOD(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:1027
void d3d9_texture_gen_auto_mipmap(struct d3d9_texture *texture)
Definition: texture.c:94
static DWORD WINAPI d3d9_texture_cube_GetLevelCount(IDirect3DCubeTexture9 *iface)
Definition: texture.c:640
static void WINAPI d3d9_texture_2d_GenerateMipSubLevels(IDirect3DTexture9 *iface)
Definition: texture.c:314
static void WINAPI d3d9_texture_2d_PreLoad(IDirect3DTexture9 *iface)
Definition: texture.c:220
HRESULT d3d9_texture_3d_init(struct d3d9_texture *texture, struct d3d9_device *device, unsigned int width, unsigned int height, unsigned int depth, unsigned int level_count, DWORD usage, D3DFORMAT format, D3DPOOL pool)
Definition: texture.c:1404
static struct d3d9_texture * impl_from_IDirect3DTexture9(IDirect3DTexture9 *iface)
Definition: texture.c:78
static void STDMETHODCALLTYPE d3d9_texture_wined3d_object_destroyed(void *parent)
Definition: texture.c:1220
static D3DRESOURCETYPE WINAPI d3d9_texture_2d_GetType(IDirect3DTexture9 *iface)
Definition: texture.c:229
static HRESULT WINAPI d3d9_texture_cube_QueryInterface(IDirect3DCubeTexture9 *iface, REFIID riid, void **out)
Definition: texture.c:487
void d3d9_texture_flag_auto_gen_mipmap(struct d3d9_texture *texture)
Definition: texture.c:106
static void WINAPI d3d9_texture_cube_PreLoad(IDirect3DCubeTexture9 *iface)
Definition: texture.c:595
static DWORD WINAPI d3d9_texture_3d_SetLOD(IDirect3DVolumeTexture9 *iface, DWORD lod)
Definition: texture.c:1012
static HRESULT WINAPI d3d9_texture_3d_GetDevice(IDirect3DVolumeTexture9 *iface, IDirect3DDevice9 **device)
Definition: texture.c:922
static HRESULT WINAPI d3d9_texture_3d_AddDirtyBox(IDirect3DVolumeTexture9 *iface, const D3DBOX *dirty_box)
Definition: texture.c:1159
static HRESULT WINAPI d3d9_texture_2d_GetLevelDesc(IDirect3DTexture9 *iface, UINT level, D3DSURFACE_DESC *desc)
Definition: texture.c:325
static HRESULT WINAPI d3d9_texture_3d_SetPrivateData(IDirect3DVolumeTexture9 *iface, REFGUID guid, const void *data, DWORD data_size, DWORD flags)
Definition: texture.c:936
static HRESULT WINAPI d3d9_texture_3d_FreePrivateData(IDirect3DVolumeTexture9 *iface, REFGUID guid)
Definition: texture.c:956
static HRESULT WINAPI d3d9_texture_3d_GetLevelDesc(IDirect3DVolumeTexture9 *iface, UINT level, D3DVOLUME_DESC *desc)
Definition: texture.c:1075
static HRESULT WINAPI d3d9_texture_3d_SetAutoGenFilterType(IDirect3DVolumeTexture9 *iface, D3DTEXTUREFILTERTYPE filter_type)
Definition: texture.c:1055
static DWORD WINAPI d3d9_texture_2d_SetLOD(IDirect3DTexture9 *iface, DWORD lod)
Definition: texture.c:236
static ULONG WINAPI d3d9_texture_cube_Release(IDirect3DCubeTexture9 *iface)
Definition: texture.c:514
static HRESULT WINAPI d3d9_texture_3d_UnlockBox(IDirect3DVolumeTexture9 *iface, UINT level)
Definition: texture.c:1141
static void WINAPI d3d9_texture_3d_PreLoad(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:996
static D3DTEXTUREFILTERTYPE WINAPI d3d9_texture_cube_GetAutoGenFilterType(IDirect3DCubeTexture9 *iface)
Definition: texture.c:678
static HRESULT WINAPI d3d9_texture_cube_UnlockRect(IDirect3DCubeTexture9 *iface, D3DCUBEMAP_FACES face, UINT level)
Definition: texture.c:807
static HRESULT WINAPI d3d9_texture_cube_SetAutoGenFilterType(IDirect3DCubeTexture9 *iface, D3DTEXTUREFILTERTYPE filter_type)
Definition: texture.c:657
static HRESULT WINAPI d3d9_texture_2d_SetAutoGenFilterType(IDirect3DTexture9 *iface, D3DTEXTUREFILTERTYPE filter_type)
Definition: texture.c:282
static DWORD WINAPI d3d9_texture_cube_SetPriority(IDirect3DCubeTexture9 *iface, DWORD priority)
Definition: texture.c:563
static HRESULT WINAPI d3d9_texture_2d_AddDirtyRect(IDirect3DTexture9 *iface, const RECT *dirty_rect)
Definition: texture.c:434
HRESULT d3d9_texture_2d_init(struct d3d9_texture *texture, struct d3d9_device *device, unsigned int width, unsigned int height, unsigned int level_count, DWORD usage, D3DFORMAT format, D3DPOOL pool)
Definition: texture.c:1356
static DWORD WINAPI d3d9_texture_cube_GetPriority(IDirect3DCubeTexture9 *iface)
Definition: texture.c:579
static DWORD WINAPI d3d9_texture_2d_SetPriority(IDirect3DTexture9 *iface, DWORD priority)
Definition: texture.c:188
static ULONG d3d9_texture_decref(struct d3d9_texture *texture)
Definition: texture.c:48
static HRESULT WINAPI d3d9_texture_3d_GetVolumeLevel(IDirect3DVolumeTexture9 *iface, UINT level, IDirect3DVolume9 **volume)
Definition: texture.c:1099
static struct d3d9_texture * impl_from_IDirect3DVolumeTexture9(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:88
static ULONG WINAPI d3d9_texture_2d_Release(IDirect3DTexture9 *iface)
Definition: texture.c:139
static HRESULT WINAPI d3d9_texture_2d_GetDevice(IDirect3DTexture9 *iface, IDirect3DDevice9 **device)
Definition: texture.c:146
static DWORD WINAPI d3d9_texture_2d_GetLevelCount(IDirect3DTexture9 *iface)
Definition: texture.c:265
static HRESULT WINAPI d3d9_texture_2d_QueryInterface(IDirect3DTexture9 *iface, REFIID riid, void **out)
Definition: texture.c:112
static const struct wined3d_parent_ops d3d9_texture_wined3d_parent_ops
Definition: texture.c:1231
static HRESULT WINAPI d3d9_texture_3d_LockBox(IDirect3DVolumeTexture9 *iface, UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags)
Definition: texture.c:1121
static DWORD WINAPI d3d9_texture_3d_GetPriority(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:980
static D3DRESOURCETYPE WINAPI d3d9_texture_3d_GetType(IDirect3DVolumeTexture9 *iface)
Definition: texture.c:1005
static void d3d9_texture_preload(struct d3d9_texture *texture)
Definition: texture.c:71
static HRESULT WINAPI d3d9_texture_cube_GetCubeMapSurface(IDirect3DCubeTexture9 *iface, D3DCUBEMAP_FACES face, UINT level, IDirect3DSurface9 **surface)
Definition: texture.c:740
static DWORD WINAPI d3d9_texture_cube_GetLOD(IDirect3DCubeTexture9 *iface)
Definition: texture.c:626
static ULONG WINAPI d3d9_texture_cube_AddRef(IDirect3DCubeTexture9 *iface)
Definition: texture.c:507
static HRESULT WINAPI d3d9_texture_cube_GetPrivateData(IDirect3DCubeTexture9 *iface, REFGUID guid, void *data, DWORD *data_size)
Definition: texture.c:545
static D3DTEXTUREFILTERTYPE WINAPI d3d9_texture_2d_GetAutoGenFilterType(IDirect3DTexture9 *iface)
Definition: texture.c:302
static HRESULT WINAPI d3d9_texture_cube_FreePrivateData(IDirect3DCubeTexture9 *iface, REFGUID guid)
Definition: texture.c:555
static const IDirect3DCubeTexture9Vtbl d3d9_texture_cube_vtbl
Definition: texture.c:858
static HRESULT WINAPI d3d9_texture_2d_FreePrivateData(IDirect3DTexture9 *iface, REFGUID guid)
Definition: texture.c:180
static struct d3d9_texture * impl_from_IDirect3DCubeTexture9(IDirect3DCubeTexture9 *iface)
Definition: texture.c:83
static D3DRESOURCETYPE WINAPI d3d9_texture_cube_GetType(IDirect3DCubeTexture9 *iface)
Definition: texture.c:604
static HRESULT d3d9_texture_init(struct d3d9_texture *texture, struct d3d9_device *device, const struct wined3d_resource_desc *desc, D3DPOOL pool, DWORD usage, unsigned int layer_count, unsigned int level_count)
Definition: texture.c:1236
static void WINAPI d3d9_texture_cube_GenerateMipSubLevels(IDirect3DCubeTexture9 *iface)
Definition: texture.c:690
static HRESULT WINAPI d3d9_texture_3d_QueryInterface(IDirect3DVolumeTexture9 *iface, REFIID riid, void **out)
Definition: texture.c:888
static HRESULT WINAPI d3d9_texture_cube_LockRect(IDirect3DCubeTexture9 *iface, D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags)
Definition: texture.c:778
void CDECL wined3d_device_context_generate_mipmaps(struct wined3d_device_context *context, struct wined3d_shader_resource_view *view)
Definition: device.c:4684
HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, struct wined3d_texture *src_texture, struct wined3d_texture *dst_texture)
Definition: device.c:3808
unsigned int CDECL wined3d_resource_set_priority(struct wined3d_resource *resource, unsigned int priority)
Definition: resource.c:247
unsigned int CDECL wined3d_resource_get_priority(const struct wined3d_resource *resource)
Definition: resource.c:263
void CDECL wined3d_resource_preload(struct wined3d_resource *resource)
Definition: resource.c:311
HRESULT CDECL wined3d_texture_get_sub_resource_desc(const struct wined3d_texture *texture, unsigned int sub_resource_idx, struct wined3d_sub_resource_desc *desc)
Definition: texture.c:4055
unsigned int CDECL wined3d_texture_get_lod(const struct wined3d_texture *texture)
Definition: texture.c:1715
HRESULT CDECL wined3d_texture_create(struct wined3d_device *device, const struct wined3d_resource_desc *desc, UINT layer_count, UINT level_count, uint32_t flags, const struct wined3d_sub_resource_data *data, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_texture **texture)
Definition: texture.c:4158
struct wined3d_shader_resource_view *CDECL wined3d_texture_acquire_identity_srv(struct wined3d_texture *texture)
Definition: texture.c:4476
HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, UINT layer, const struct wined3d_box *dirty_region)
Definition: texture.c:2132
void *CDECL wined3d_texture_get_sub_resource_parent(struct wined3d_texture *texture, unsigned int sub_resource_idx)
Definition: texture.c:4033
struct wined3d_resource *CDECL wined3d_texture_get_resource(struct wined3d_texture *texture)
Definition: texture.c:1649
ULONG CDECL wined3d_texture_decref(struct wined3d_texture *texture)
Definition: texture.c:1606
ULONG CDECL wined3d_texture_incref(struct wined3d_texture *texture)
Definition: texture.c:1516
UINT CDECL wined3d_texture_get_level_count(const struct wined3d_texture *texture)
Definition: texture.c:1746
ULONG CDECL wined3d_rendertarget_view_incref(struct wined3d_rendertarget_view *view)
Definition: view.c:365
ULONG CDECL wined3d_rendertarget_view_decref(struct wined3d_rendertarget_view *view)
Definition: view.c:379
GUID guid
Definition: version.c:147
return ret
Definition: mutex.c:147
r parent
Definition: btrfs.c:3010
DWORD IDirect3DSurface9
Definition: dxva2api.idl:23
DWORD IDirect3DDevice9
Definition: dxva2api.idl:22
DWORD IDirect3DDevice9Ex
Definition: dxvahd.idl:22
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLint level
Definition: gl.h:1546
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei width
Definition: gl.h:1546
GLenum GLuint texture
Definition: glext.h:6295
GLint lod
Definition: glext.h:7795
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLbitfield flags
Definition: glext.h:7161
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define resource
Definition: kernel32.h:9
#define debugstr_guid
Definition: kernel32.h:35
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
static int priority
Definition: timer.c:163
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
#define TRACE(s)
Definition: solgame.cpp:4
Definition: dcommon.idl:28
long bottom
Definition: dcommon.idl:29
long right
Definition: dcommon.idl:29
long left
Definition: dcommon.idl:29
long top
Definition: dcommon.idl:29
Definition: scsiwmi.h:51
Definition: palette.c:466
IDirect3DDevice9Ex * parent_device
Definition: d3d9_private.h:176
struct list rtv_entry
Definition: d3d9_private.h:174
IDirect3DSurface9 IDirect3DSurface9_iface
Definition: d3d9_private.h:170
struct wined3d_rendertarget_view * wined3d_rtv
Definition: d3d9_private.h:175
unsigned int sub_resource_idx
Definition: d3d9_private.h:173
IDirect3DBaseTexture9 IDirect3DBaseTexture9_iface
Definition: d3d9_private.h:221
IDirect3DVolume9 IDirect3DVolume9_iface
Definition: d3d9_private.h:145
Definition: devices.h:37
Definition: send.c:48
unsigned int bind_flags
Definition: wined3d.h:1796
unsigned int access
Definition: wined3d.h:1797
enum wined3d_format_id format
Definition: wined3d.h:1806
unsigned int multisample_quality
Definition: wined3d.h:1808
enum wined3d_multisample_type multisample_type
Definition: wined3d.h:1807
#define max(a, b)
Definition: svc.c:63
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
static struct wined3d_texture * d3d9_texture_get_draw_texture(struct d3d9_texture *texture)
Definition: d3d9_private.h:238
#define D3D9_TEXTURE_MIPMAP_DIRTY
Definition: d3d9_private.h:46
BOOL is_gdi_compat_wined3dformat(enum wined3d_format_id format)
Definition: device.c:1770
static unsigned int wined3d_bind_flags_from_d3d9_usage(DWORD usage)
Definition: d3d9_private.h:395
const struct wined3d_parent_ops d3d9_null_wined3d_parent_ops
Definition: device.c:29
struct wined3d_adapter *CDECL wined3d_output_get_adapter(const struct wined3d_output *output)
Definition: directx.c:1508
HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, uint32_t usage, unsigned int bind_flags, enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id)
Definition: directx.c:1972
unsigned int CDECL wined3d_stateblock_set_texture_lod(struct wined3d_stateblock *stateblock, struct wined3d_texture *texture, unsigned int lod)
Definition: stateblock.c:4004
static unsigned int wined3d_log2i(unsigned int x)
Definition: wined3d.h:2952
@ WINED3D_MULTISAMPLE_NONE
Definition: wined3d.h:573
#define WINED3DUSAGE_LEGACY_CUBEMAP
Definition: wined3d.h:934
#define WINED3D_RESOURCE_ACCESS_GPU
Definition: wined3d.h:51
#define WINED3D_RESOURCE_ACCESS_CPU
Definition: wined3d.h:52
@ WINED3D_RTYPE_TEXTURE_2D
Definition: wined3d.h:720
@ WINED3D_RTYPE_TEXTURE_3D
Definition: wined3d.h:721
#define WINED3D_TEXTURE_CREATE_RECORD_DIRTY_REGIONS
Definition: wined3d.h:1567
#define WINED3D_BIND_SHADER_RESOURCE
Definition: wined3d.h:912
#define WINED3DUSAGE_VIDMEM_ACCOUNTING
Definition: wined3d.h:939
@ WINED3DFMT_B8G8R8A8_UNORM
Definition: wined3d.h:244
static void wined3d_box_set(struct wined3d_box *box, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom, unsigned int front, unsigned int back)
Definition: wined3d.h:3006
#define WINED3D_RESOURCE_ACCESS_MAP_R
Definition: wined3d.h:53
#define WINED3DUSAGE_QUERY_GENMIPMAP
Definition: wined3d.h:941
#define WINED3D_TEXTURE_CREATE_GET_DC
Definition: wined3d.h:1565
@ WINED3D_DEVICE_TYPE_HAL
Definition: wined3d.h:91
#define WINED3D_TEXTURE_CREATE_GENERATE_MIPMAPS
Definition: wined3d.h:1566
#define WINED3D_RESOURCE_ACCESS_MAP_W
Definition: wined3d.h:54
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539
#define E_NOINTERFACE
Definition: winerror.h:3479