ReactOS 0.4.15-dev-7961-gdcf9eb0
view.c
Go to the documentation of this file.
1/*
2 * Copyright 2009, 2011 Henri Verbeet for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 *
18 */
19
20#include "config.h"
21#include "wine/port.h"
22
23#include "wined3d_private.h"
24
26
27#define WINED3D_VIEW_CUBE_ARRAY (WINED3D_VIEW_TEXTURE_CUBE | WINED3D_VIEW_TEXTURE_ARRAY)
28
30{
33}
34
35static GLenum get_texture_view_target(const struct wined3d_gl_info *gl_info,
36 const struct wined3d_view_desc *desc, const struct wined3d_texture *texture)
37{
38 static const struct
39 {
40 GLenum texture_target;
41 unsigned int view_flags;
42 GLenum view_target;
43 enum wined3d_gl_extension extension;
44 }
45 view_types[] =
46 {
50
55
62
67 };
68 unsigned int i;
69
70 for (i = 0; i < ARRAY_SIZE(view_types); ++i)
71 {
72 if (view_types[i].texture_target != texture->target || view_types[i].view_flags != desc->flags)
73 continue;
74 if (gl_info->supported[view_types[i].extension])
75 return view_types[i].view_target;
76
77 FIXME("Extension %#x not supported.\n", view_types[i].extension);
78 }
79
80 FIXME("Unhandled view flags %#x for texture target %#x.\n", desc->flags, texture->target);
81 return texture->target;
82}
83
85 struct wined3d_resource *resource, BOOL mip_slice, BOOL allow_srgb_toggle)
86{
87 const struct wined3d_gl_info *gl_info = &resource->device->adapter->gl_info;
88 const struct wined3d_format *format;
89
90 format = wined3d_get_format(gl_info, desc->format_id, resource->usage);
92 {
94 {
95 WARN("Invalid format %s for raw buffer view.\n", debug_d3dformat(format->id));
96 return NULL;
97 }
98
100 }
101
103 {
104 WARN("Trying to create view for typeless format %s.\n", debug_d3dformat(format->id));
105 return NULL;
106 }
107
108 if (resource->type == WINED3D_RTYPE_BUFFER)
109 {
111 unsigned int buffer_size, element_size;
112
113 if (buffer->desc.structure_byte_stride)
114 {
115 if (desc->format_id != WINED3DFMT_UNKNOWN)
116 {
117 WARN("Invalid format %s for structured buffer view.\n", debug_d3dformat(desc->format_id));
118 return NULL;
119 }
120
122 element_size = buffer->desc.structure_byte_stride;
123 }
124 else
125 {
126 element_size = format->byte_count;
127 }
128
129 if (!element_size)
130 return NULL;
131
132 buffer_size = buffer->resource.size / element_size;
133 if (desc->u.buffer.start_idx >= buffer_size
134 || desc->u.buffer.count > buffer_size - desc->u.buffer.start_idx)
135 return NULL;
136 }
137 else
138 {
140 unsigned int depth_or_layer_count;
141
142 if (resource->format->id != format->id && !wined3d_format_is_typeless(resource->format)
143 && (!allow_srgb_toggle || !wined3d_formats_are_srgb_variants(resource->format->id, format->id)))
144 {
145 WARN("Trying to create incompatible view for non typeless format %s.\n",
147 return NULL;
148 }
149
150 if (mip_slice && resource->type == WINED3D_RTYPE_TEXTURE_3D)
151 depth_or_layer_count = wined3d_texture_get_level_depth(texture, desc->u.texture.level_idx);
152 else
153 depth_or_layer_count = texture->layer_count;
154
155 if (!desc->u.texture.level_count
156 || (mip_slice && desc->u.texture.level_count != 1)
157 || desc->u.texture.level_idx >= texture->level_count
158 || desc->u.texture.level_count > texture->level_count - desc->u.texture.level_idx
159 || !desc->u.texture.layer_count
160 || desc->u.texture.layer_idx >= depth_or_layer_count
161 || desc->u.texture.layer_count > depth_or_layer_count - desc->u.texture.layer_idx)
162 return NULL;
163 }
164
165 return format;
166}
167
168static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target,
169 const struct wined3d_view_desc *desc, struct wined3d_texture *texture,
170 const struct wined3d_format *view_format)
171{
172 const struct wined3d_gl_info *gl_info;
173 unsigned int layer_idx, layer_count;
174 struct wined3d_context *context;
175 GLuint texture_name;
176
177 view->target = view_target;
178
179 context = context_acquire(texture->resource.device, NULL, 0);
180 gl_info = context->gl_info;
181
182 if (!gl_info->supported[ARB_TEXTURE_VIEW])
183 {
185 FIXME("OpenGL implementation does not support texture views.\n");
186 return;
187 }
188
191
192 layer_idx = desc->u.texture.layer_idx;
193 layer_count = desc->u.texture.layer_count;
194 if (view_target == GL_TEXTURE_3D && (layer_idx || layer_count != 1))
195 {
196 FIXME("Depth slice (%u-%u) not supported.\n", layer_idx, layer_count);
197 layer_idx = 0;
198 layer_count = 1;
199 }
200
201 gl_info->gl_ops.gl.p_glGenTextures(1, &view->name);
202 GL_EXTCALL(glTextureView(view->name, view->target, texture_name, view_format->glInternal,
203 desc->u.texture.level_idx, desc->u.texture.level_count,
204 layer_idx, layer_count));
205 checkGLcall("Create texture view");
206
207 if (is_stencil_view_format(view_format))
208 {
209 static const GLint swizzle[] = {GL_ZERO, GL_RED, GL_ZERO, GL_ZERO};
210
211 if (!gl_info->supported[ARB_STENCIL_TEXTURING])
212 {
214 FIXME("OpenGL implementation does not support stencil texturing.\n");
215 return;
216 }
217
218 context_bind_texture(context, view->target, view->name);
219 gl_info->gl_ops.gl.p_glTexParameteriv(view->target, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
220 gl_info->gl_ops.gl.p_glTexParameteri(view->target, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_INDEX);
221 checkGLcall("Initialize stencil view");
222
225 }
226
228}
229
231 struct wined3d_buffer *buffer, const struct wined3d_format *view_format,
232 unsigned int offset, unsigned int size)
233{
234 const struct wined3d_gl_info *gl_info = context->gl_info;
235
237 {
238 FIXME("OpenGL implementation does not support buffer textures.\n");
239 return;
240 }
241
242 if ((offset & (gl_info->limits.texture_buffer_offset_alignment - 1)))
243 {
244 FIXME("Buffer offset %u is not %u byte aligned.\n",
245 offset, gl_info->limits.texture_buffer_offset_alignment);
246 return;
247 }
248
250
251 view->target = GL_TEXTURE_BUFFER;
252 gl_info->gl_ops.gl.p_glGenTextures(1, &view->name);
253
256 {
257 GL_EXTCALL(glTexBufferRange(GL_TEXTURE_BUFFER, view_format->glInternal,
258 buffer->buffer_object, offset, size));
259 }
260 else
261 {
262 if (offset || size != buffer->resource.size)
263 FIXME("OpenGL implementation does not support ARB_texture_buffer_range.\n");
264 GL_EXTCALL(glTexBuffer(GL_TEXTURE_BUFFER, view_format->glInternal, buffer->buffer_object));
265 }
266 checkGLcall("Create buffer texture");
267
270}
271
273 const struct wined3d_view_desc *desc, const struct wined3d_format *view_format,
274 unsigned int *offset, unsigned int *size)
275{
276 if (desc->format_id == WINED3DFMT_UNKNOWN)
277 {
278 *offset = desc->u.buffer.start_idx * buffer->desc.structure_byte_stride;
279 *size = desc->u.buffer.count * buffer->desc.structure_byte_stride;
280 }
281 else
282 {
283 *offset = desc->u.buffer.start_idx * view_format->byte_count;
284 *size = desc->u.buffer.count * view_format->byte_count;
285 }
286}
287
289 const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer,
290 const struct wined3d_format *view_format)
291{
292 unsigned int offset, size;
293
294 get_buffer_view_range(buffer, desc, view_format, &offset, &size);
296}
297
299 const struct wined3d_view_desc *desc, DWORD location)
300{
301 unsigned int i, sub_resource_idx, layer_count;
302 struct wined3d_texture *texture;
303
304 if (resource->type == WINED3D_RTYPE_BUFFER)
305 {
307 return;
308 }
309
311
312 sub_resource_idx = desc->u.texture.layer_idx * texture->level_count + desc->u.texture.level_idx;
313 layer_count = resource->type != WINED3D_RTYPE_TEXTURE_3D ? desc->u.texture.layer_count : 1;
314 for (i = 0; i < layer_count; ++i, sub_resource_idx += texture->level_count)
316}
317
319{
320 ULONG refcount = InterlockedIncrement(&view->refcount);
321
322 TRACE("%p increasing refcount to %u.\n", view, refcount);
323
324 return refcount;
325}
326
328{
330 struct wined3d_device *device = view->resource->device;
331
332 if (view->gl_view.name)
333 {
334 const struct wined3d_gl_info *gl_info;
335 struct wined3d_context *context;
336
338 gl_info = context->gl_info;
340 gl_info->gl_ops.gl.p_glDeleteTextures(1, &view->gl_view.name);
341 checkGLcall("glDeleteTextures");
343 }
344
346}
347
349{
350 ULONG refcount = InterlockedDecrement(&view->refcount);
351
352 TRACE("%p decreasing refcount to %u.\n", view, refcount);
353
354 if (!refcount)
355 {
356 struct wined3d_resource *resource = view->resource;
357 struct wined3d_device *device = resource->device;
358
359 /* Call wined3d_object_destroyed() before releasing the resource,
360 * since releasing the resource may end up destroying the parent. */
361 view->parent_ops->wined3d_object_destroyed(view->parent);
364 }
365
366 return refcount;
367}
368
370{
371 TRACE("view %p.\n", view);
372
373 return view->parent;
374}
375
377{
378 struct wined3d_texture *texture;
379
380 TRACE("view %p.\n", view);
381
382 if (view->resource->type == WINED3D_RTYPE_BUFFER)
384
386
387 return texture->sub_resources[view->sub_resource_idx].parent;
388}
389
391{
392 TRACE("view %p, parent %p.\n", view, parent);
393
394 view->parent = parent;
395}
396
398{
399 TRACE("view %p.\n", view);
400
401 return view->resource;
402}
403
405 const struct wined3d_context *context, unsigned int *width, unsigned int *height)
406{
407 const struct wined3d_texture *texture;
408
409 if (view->resource->type != WINED3D_RTYPE_TEXTURE_2D)
410 {
411 *width = view->width;
412 *height = view->height;
413 return;
414 }
415
417 if (texture->swapchain)
418 {
419 /* The drawable size of an onscreen drawable is the surface size.
420 * (Actually: The window size, but the surface is created in window
421 * size.) */
422 *width = texture->resource.width;
423 *height = texture->resource.height;
424 }
426 {
427 const struct wined3d_swapchain *swapchain = context->swapchain;
428
429 /* The drawable size of a backbuffer / aux buffer offscreen target is
430 * the size of the current context's drawable, which is the size of
431 * the back buffer of the swapchain the active context belongs to. */
432 *width = swapchain->desc.backbuffer_width;
433 *height = swapchain->desc.backbuffer_height;
434 }
435 else
436 {
437 unsigned int level_idx = view->sub_resource_idx % texture->level_count;
438
439 /* The drawable size of an FBO target is the OpenGL texture size,
440 * which is the power of two size. */
443 }
444}
445
448{
449 struct wined3d_resource *resource = view->resource;
450 unsigned int i, sub_resource_idx, layer_count;
451 struct wined3d_texture *texture;
452
453 if (resource->type == WINED3D_RTYPE_BUFFER)
454 {
455 FIXME("Not implemented for resources %s.\n", debug_d3dresourcetype(resource->type));
456 return;
457 }
458
460 sub_resource_idx = view->sub_resource_idx;
461 layer_count = resource->type != WINED3D_RTYPE_TEXTURE_3D ? view->layer_count : 1;
462 for (i = 0; i < layer_count; ++i, sub_resource_idx += texture->level_count)
464}
465
468{
469 struct wined3d_resource *resource = view->resource;
470 unsigned int i, sub_resource_idx, layer_count;
471 struct wined3d_texture *texture;
472
473 if (resource->type == WINED3D_RTYPE_BUFFER)
474 {
476 return;
477 }
478
480 sub_resource_idx = view->sub_resource_idx;
481 layer_count = resource->type != WINED3D_RTYPE_TEXTURE_3D ? view->layer_count : 1;
482 for (i = 0; i < layer_count; ++i, sub_resource_idx += texture->level_count)
484}
485
487{
488 struct wined3d_resource *resource = view->resource;
489 unsigned int i, sub_resource_idx, layer_count;
490 struct wined3d_texture *texture;
491
492 if (resource->type == WINED3D_RTYPE_BUFFER)
493 {
494 FIXME("Not implemented for resources %s.\n", debug_d3dresourcetype(resource->type));
495 return;
496 }
497
499 sub_resource_idx = view->sub_resource_idx;
500 layer_count = resource->type != WINED3D_RTYPE_TEXTURE_3D ? view->layer_count : 1;
501 for (i = 0; i < layer_count; ++i, sub_resource_idx += texture->level_count)
503}
504
506{
508}
509
510static void wined3d_render_target_view_cs_init(void *object)
511{
513 struct wined3d_resource *resource = view->resource;
514 const struct wined3d_view_desc *desc = &view->desc;
515
516 if (resource->type == WINED3D_RTYPE_BUFFER)
517 {
518 FIXME("Not implemented for resources %s.\n", debug_d3dresourcetype(resource->type));
519 }
520 else
521 {
523 unsigned int depth_or_layer_count;
524
526 depth_or_layer_count = wined3d_texture_get_level_depth(texture, desc->u.texture.level_idx);
527 else
528 depth_or_layer_count = texture->layer_count;
529
530 if (resource->format->id != view->format->id
531 || (view->layer_count != 1 && view->layer_count != depth_or_layer_count))
532 {
533 if (resource->format->gl_view_class != view->format->gl_view_class)
534 {
535 FIXME("Render target view not supported, resource format %s, view format %s.\n",
536 debug_d3dformat(resource->format->id), debug_d3dformat(view->format->id));
537 return;
538 }
539 if (texture->swapchain && texture->swapchain->desc.backbuffer_count > 1)
540 {
541 FIXME("Swapchain views not supported.\n");
542 return;
543 }
544
545 create_texture_view(&view->gl_view, texture->target, desc, texture, view->format);
546 }
547 }
548}
549
551 const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
552 void *parent, const struct wined3d_parent_ops *parent_ops)
553{
554 BOOL allow_srgb_toggle = FALSE;
555
556 view->refcount = 1;
557 view->parent = parent;
558 view->parent_ops = parent_ops;
559
560 if (resource->type != WINED3D_RTYPE_BUFFER)
561 {
563
564 if (texture->swapchain)
565 allow_srgb_toggle = TRUE;
566 }
567 if (!(view->format = validate_resource_view(desc, resource, TRUE, allow_srgb_toggle)))
568 return E_INVALIDARG;
569 view->format_flags = view->format->flags[resource->gl_type];
570 view->desc = *desc;
571
572 if (resource->type == WINED3D_RTYPE_BUFFER)
573 {
574 view->sub_resource_idx = 0;
575 view->layer_count = 1;
576 view->width = desc->u.buffer.count;
577 view->height = 1;
578 }
579 else
580 {
582
583 view->sub_resource_idx = desc->u.texture.level_idx;
585 view->sub_resource_idx += desc->u.texture.layer_idx * texture->level_count;
586 view->layer_count = desc->u.texture.layer_count;
587 view->width = wined3d_texture_get_level_width(texture, desc->u.texture.level_idx);
588 view->height = wined3d_texture_get_level_height(texture, desc->u.texture.level_idx);
589 }
590
592
594
595 return WINED3D_OK;
596}
597
599 struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops,
601{
603 HRESULT hr;
604
605 TRACE("desc %p, resource %p, parent %p, parent_ops %p, view %p.\n",
607
608 if (!(object = heap_alloc_zero(sizeof(*object))))
609 return E_OUTOFMEMORY;
610
612 {
613 heap_free(object);
614 WARN("Failed to initialise view, hr %#x.\n", hr);
615 return hr;
616 }
617
618 TRACE("Created render target view %p.\n", object);
619 *view = object;
620
621 return hr;
622}
623
625 unsigned int sub_resource_idx, void *parent, const struct wined3d_parent_ops *parent_ops,
627{
628 struct wined3d_view_desc desc;
629
630 TRACE("texture %p, sub_resource_idx %u, parent %p, parent_ops %p, view %p.\n",
631 texture, sub_resource_idx, parent, parent_ops, view);
632
633 desc.format_id = texture->resource.format->id;
634 desc.flags = 0;
635 desc.u.texture.level_idx = sub_resource_idx % texture->level_count;
636 desc.u.texture.level_count = 1;
637 desc.u.texture.layer_idx = sub_resource_idx / texture->level_count;
638 desc.u.texture.layer_count = 1;
639
640 return wined3d_rendertarget_view_create(&desc, &texture->resource, parent, parent_ops, view);
641}
642
644{
645 ULONG refcount = InterlockedIncrement(&view->refcount);
646
647 TRACE("%p increasing refcount to %u.\n", view, refcount);
648
649 return refcount;
650}
651
653{
655
656 if (view->gl_view.name)
657 {
658 const struct wined3d_gl_info *gl_info;
659 struct wined3d_context *context;
660
661 context = context_acquire(view->resource->device, NULL, 0);
662 gl_info = context->gl_info;
663 gl_info->gl_ops.gl.p_glDeleteTextures(1, &view->gl_view.name);
664 checkGLcall("glDeleteTextures");
666 }
667
669}
670
672{
673 ULONG refcount = InterlockedDecrement(&view->refcount);
674
675 TRACE("%p decreasing refcount to %u.\n", view, refcount);
676
677 if (!refcount)
678 {
679 struct wined3d_resource *resource = view->resource;
680 struct wined3d_device *device = resource->device;
681
682 /* Call wined3d_object_destroyed() before releasing the resource,
683 * since releasing the resource may end up destroying the parent. */
684 view->parent_ops->wined3d_object_destroyed(view->parent);
687 }
688
689 return refcount;
690}
691
693{
694 TRACE("view %p.\n", view);
695
696 return view->parent;
697}
698
700{
702 struct wined3d_resource *resource = view->resource;
703 const struct wined3d_format *view_format;
704 const struct wined3d_gl_info *gl_info;
705 const struct wined3d_view_desc *desc;
706 GLenum view_target;
707
708 view_format = view->format;
709 gl_info = &resource->device->adapter->gl_info;
710 desc = &view->desc;
711
712 if (resource->type == WINED3D_RTYPE_BUFFER)
713 {
715 struct wined3d_context *context;
716
717 context = context_acquire(resource->device, NULL, 0);
718 create_buffer_view(&view->gl_view, context, desc, buffer, view_format);
720 }
721 else
722 {
724
725 view_target = get_texture_view_target(gl_info, desc, texture);
726
727 if (resource->format->id == view_format->id && texture->target == view_target
728 && !desc->u.texture.level_idx && desc->u.texture.level_count == texture->level_count
729 && !desc->u.texture.layer_idx && desc->u.texture.layer_count == texture->layer_count
730 && !is_stencil_view_format(view_format))
731 {
732 TRACE("Creating identity shader resource view.\n");
733 }
734 else if (texture->swapchain && texture->swapchain->desc.backbuffer_count > 1)
735 {
736 FIXME("Swapchain shader resource views not supported.\n");
737 }
738 else if (resource->format->typeless_id == view_format->typeless_id
739 && resource->format->gl_view_class == view_format->gl_view_class)
740 {
741 create_texture_view(&view->gl_view, view_target, desc, texture, view_format);
742 }
743 else if (wined3d_format_is_depth_view(resource->format->id, view_format->id))
744 {
745 create_texture_view(&view->gl_view, view_target, desc, texture, resource->format);
746 }
747 else
748 {
749 FIXME("Shader resource view not supported, resource format %s, view format %s.\n",
750 debug_d3dformat(resource->format->id), debug_d3dformat(view_format->id));
751 }
752 }
753#if defined(STAGING_CSMT)
754
756#endif /* STAGING_CSMT */
757}
758
760 const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
761 void *parent, const struct wined3d_parent_ops *parent_ops)
762{
763 view->refcount = 1;
764 view->parent = parent;
765 view->parent_ops = parent_ops;
766
767 if (!(view->format = validate_resource_view(desc, resource, FALSE, FALSE)))
768 return E_INVALIDARG;
769 view->desc = *desc;
770
772
773#if defined(STAGING_CSMT)
775#endif /* STAGING_CSMT */
777
778 return WINED3D_OK;
779}
780
782 struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops,
784{
786 HRESULT hr;
787
788 TRACE("desc %p, resource %p, parent %p, parent_ops %p, view %p.\n",
790
791 if (!(object = heap_alloc_zero(sizeof(*object))))
792 return E_OUTOFMEMORY;
793
795 {
796 heap_free(object);
797 WARN("Failed to initialise view, hr %#x.\n", hr);
798 return hr;
799 }
800
801 TRACE("Created shader resource view %p.\n", object);
802 *view = object;
803
804 return WINED3D_OK;
805}
806
808 unsigned int unit, struct wined3d_sampler *sampler, struct wined3d_context *context)
809{
810 const struct wined3d_gl_info *gl_info = context->gl_info;
811 struct wined3d_texture *texture;
812
814
815 if (view->gl_view.name)
816 {
817 context_bind_texture(context, view->gl_view.target, view->gl_view.name);
819 return;
820 }
821
822 if (view->resource->type == WINED3D_RTYPE_BUFFER)
823 {
824 FIXME("Buffer shader resources not supported.\n");
825 return;
826 }
827
831}
832
833/* Context activation is done by the caller. */
835 struct wined3d_context *context)
836{
837 if (context->active_texture < ARRAY_SIZE(context->rev_tex_unit_map))
838 {
839 DWORD active_sampler = context->rev_tex_unit_map[context->active_texture];
840 if (active_sampler != WINED3D_UNMAPPED_STAGE)
842 }
843 /* FIXME: Ideally we'd only do this when touching a binding that's used by
844 * a shader. */
847
848 context_bind_texture(context, view->gl_view.target, view->gl_view.name);
849}
850
852{
854 unsigned int i, j, layer_count, level_count, base_level, max_level;
855 const struct wined3d_gl_info *gl_info;
856 struct wined3d_context *context;
857 struct gl_texture *gl_tex;
859 BOOL srgb;
860
861 TRACE("view %p.\n", view);
862
863 context = context_acquire(view->resource->device, NULL, 0);
864 gl_info = context->gl_info;
865 layer_count = view->desc.u.texture.layer_count;
866 level_count = view->desc.u.texture.level_count;
867 base_level = view->desc.u.texture.level_idx;
868 max_level = base_level + level_count - 1;
869
870 srgb = !!(texture->flags & WINED3D_TEXTURE_IS_SRGB);
872 for (i = 0; i < layer_count; ++i)
874
875 if (view->gl_view.name)
876 {
878 }
879 else
880 {
882 gl_info->gl_ops.gl.p_glTexParameteri(texture->target, GL_TEXTURE_BASE_LEVEL, base_level);
883 gl_info->gl_ops.gl.p_glTexParameteri(texture->target, GL_TEXTURE_MAX_LEVEL, max_level);
884 }
885
886 if (gl_info->supported[ARB_SAMPLER_OBJECTS])
887 GL_EXTCALL(glBindSampler(context->active_texture, 0));
889 if (context->d3d_info->wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL)
890 {
891 gl_info->gl_ops.gl.p_glTexParameteri(texture->target, GL_TEXTURE_SRGB_DECODE_EXT,
893 gl_tex->sampler_desc.srgb_decode = FALSE;
894 }
895
896 gl_info->fbo_ops.glGenerateMipmap(texture->target);
897 checkGLcall("glGenerateMipMap()");
898
899 for (i = 0; i < layer_count; ++i)
900 {
901 for (j = base_level + 1; j <= max_level; ++j)
902 {
905 }
906 }
907
908 if (!view->gl_view.name)
909 {
910 gl_tex->base_level = base_level;
911 gl_info->gl_ops.gl.p_glTexParameteri(texture->target, GL_TEXTURE_MAX_LEVEL, texture->level_count - 1);
912 }
913
915}
916
918{
919 struct wined3d_texture *texture;
920
921 TRACE("view %p.\n", view);
922
923 if (view->resource->type == WINED3D_RTYPE_BUFFER)
924 {
925 WARN("Called on buffer resource %p.\n", view->resource);
926 return;
927 }
928
931 {
932 WARN("Texture without the WINED3D_TEXTURE_GENERATE_MIPMAPS flag, ignoring.\n");
933 return;
934 }
935
936 wined3d_cs_emit_generate_mipmaps(view->resource->device->cs, view);
937}
938
940{
941 ULONG refcount = InterlockedIncrement(&view->refcount);
942
943 TRACE("%p increasing refcount to %u.\n", view, refcount);
944
945 return refcount;
946}
947
949{
951
952 if (view->gl_view.name || view->counter_bo)
953 {
954 const struct wined3d_gl_info *gl_info;
955 struct wined3d_context *context;
956
957 context = context_acquire(view->resource->device, NULL, 0);
958 gl_info = context->gl_info;
959 if (view->gl_view.name)
960 gl_info->gl_ops.gl.p_glDeleteTextures(1, &view->gl_view.name);
961 if (view->counter_bo)
962 GL_EXTCALL(glDeleteBuffers(1, &view->counter_bo));
963 checkGLcall("delete resources");
965 }
966
968}
969
971{
972 ULONG refcount = InterlockedDecrement(&view->refcount);
973
974 TRACE("%p decreasing refcount to %u.\n", view, refcount);
975
976 if (!refcount)
977 {
978 struct wined3d_resource *resource = view->resource;
979 struct wined3d_device *device = resource->device;
980
981 /* Call wined3d_object_destroyed() before releasing the resource,
982 * since releasing the resource may end up destroying the parent. */
983 view->parent_ops->wined3d_object_destroyed(view->parent);
986 }
987
988 return refcount;
989}
990
992{
993 TRACE("view %p.\n", view);
994
995 return view->parent;
996}
997
1000{
1002}
1003
1005 const struct wined3d_uvec4 *clear_value, struct wined3d_context *context)
1006{
1007 const struct wined3d_gl_info *gl_info = context->gl_info;
1008 const struct wined3d_format *format;
1009 struct wined3d_resource *resource;
1010 struct wined3d_buffer *buffer;
1011 unsigned int offset, size;
1012
1013 resource = view->resource;
1014 if (resource->type != WINED3D_RTYPE_BUFFER)
1015 {
1016 FIXME("Not implemented for %s resources.\n", debug_d3dresourcetype(resource->type));
1017 return;
1018 }
1019
1020 if (!gl_info->supported[ARB_CLEAR_BUFFER_OBJECT])
1021 {
1022 FIXME("OpenGL implementation does not support ARB_clear_buffer_object.\n");
1023 return;
1024 }
1025
1026 format = view->format;
1030 {
1031 FIXME("Not implemented for format %s.\n", debug_d3dformat(format->id));
1032 return;
1033 }
1034
1038
1040 context_bind_bo(context, buffer->buffer_type_hint, buffer->buffer_object);
1041 GL_EXTCALL(glClearBufferSubData(buffer->buffer_type_hint, format->glInternal,
1042 offset, size, format->glFormat, format->glType, clear_value));
1043 checkGLcall("clear unordered access view");
1044}
1045
1047 unsigned int value)
1048{
1049 const struct wined3d_gl_info *gl_info;
1050 struct wined3d_context *context;
1051
1052 if (!view->counter_bo)
1053 return;
1054
1055 context = context_acquire(view->resource->device, NULL, 0);
1056 gl_info = context->gl_info;
1057 GL_EXTCALL(glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, view->counter_bo));
1058 GL_EXTCALL(glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, 0, sizeof(value), &value));
1059 checkGLcall("set atomic counter");
1061}
1062
1064 struct wined3d_buffer *buffer, unsigned int offset, struct wined3d_context *context)
1065{
1066 struct wined3d_bo_address dst, src;
1067 DWORD dst_location;
1068
1069 if (!view->counter_bo)
1070 return;
1071
1072 dst_location = wined3d_buffer_get_memory(buffer, &dst, buffer->locations);
1073 dst.addr += offset;
1074
1075 src.buffer_object = view->counter_bo;
1076 src.addr = NULL;
1077
1078 context_copy_bo_address(context, &dst, buffer->buffer_type_hint,
1080
1082}
1083
1085{
1087 struct wined3d_resource *resource = view->resource;
1088 struct wined3d_view_desc *desc = &view->desc;
1089 const struct wined3d_gl_info *gl_info;
1090
1091 gl_info = &resource->device->adapter->gl_info;
1092
1093 if (resource->type == WINED3D_RTYPE_BUFFER)
1094 {
1096 struct wined3d_context *context;
1097
1098 context = context_acquire(resource->device, NULL, 0);
1099 gl_info = context->gl_info;
1100 create_buffer_view(&view->gl_view, context, desc, buffer, view->format);
1102 {
1103 static const GLuint initial_value = 0;
1104 GL_EXTCALL(glGenBuffers(1, &view->counter_bo));
1105 GL_EXTCALL(glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, view->counter_bo));
1107 sizeof(initial_value), &initial_value, GL_STATIC_DRAW));
1108 checkGLcall("create atomic counter buffer");
1109 }
1111 }
1112 else
1113 {
1115 unsigned int depth_or_layer_count;
1116
1118 depth_or_layer_count = wined3d_texture_get_level_depth(texture, desc->u.texture.level_idx);
1119 else
1120 depth_or_layer_count = texture->layer_count;
1121
1122 if (desc->u.texture.layer_idx || desc->u.texture.layer_count != depth_or_layer_count)
1123 {
1125 desc, texture, view->format);
1126 }
1127 }
1128#if defined(STAGING_CSMT)
1129
1131#endif /* STAGING_CSMT */
1132}
1133
1135 const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
1136 void *parent, const struct wined3d_parent_ops *parent_ops)
1137{
1138 view->refcount = 1;
1139 view->parent = parent;
1140 view->parent_ops = parent_ops;
1141
1142 if (!(view->format = validate_resource_view(desc, resource, TRUE, FALSE)))
1143 return E_INVALIDARG;
1144 view->desc = *desc;
1145
1147
1148#if defined(STAGING_CSMT)
1150#endif /* STAGING_CSMT */
1152
1153 return WINED3D_OK;
1154}
1155
1157 struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops,
1159{
1161 HRESULT hr;
1162
1163 TRACE("desc %p, resource %p, parent %p, parent_ops %p, view %p.\n",
1165
1166 if (!(object = heap_alloc_zero(sizeof(*object))))
1167 return E_OUTOFMEMORY;
1168
1170 {
1171 heap_free(object);
1172 WARN("Failed to initialise view, hr %#x.\n", hr);
1173 return hr;
1174 }
1175
1176 TRACE("Created unordered access view %p.\n", object);
1177 *view = object;
1178
1179 return WINED3D_OK;
1180}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:33
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
Definition: cs.c:1885
void wined3d_cs_emit_generate_mipmaps(struct wined3d_cs *cs, struct wined3d_shader_resource_view *view)
Definition: cs.c:2436
void wined3d_cs_init_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
Definition: cs.c:1890
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
DWORD wined3d_buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_bo_address *data, DWORD locations)
Definition: buffer.c:713
void *CDECL wined3d_buffer_get_parent(const struct wined3d_buffer *buffer)
Definition: buffer.c:807
BOOL wined3d_buffer_load_location(struct wined3d_buffer *buffer, struct wined3d_context *context, DWORD location)
Definition: buffer.c:641
void wined3d_buffer_invalidate_location(struct wined3d_buffer *buffer, DWORD location)
Definition: buffer.c:130
void context_bind_bo(struct wined3d_context *context, GLenum binding, GLuint name)
Definition: context.c:2724
struct wined3d_context * context_acquire(const struct wined3d_device *device, struct wined3d_texture *texture, unsigned int sub_resource_idx)
Definition: context.c:4242
void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, unsigned int unit)
Definition: context.c:2717
void context_invalidate_compute_state(struct wined3d_context *context, DWORD state_id)
Definition: context.c:1642
void context_bind_texture(struct wined3d_context *context, GLenum target, GLuint name)
Definition: context.c:2734
void context_invalidate_state(struct wined3d_context *context, DWORD state)
Definition: context.c:1652
void context_copy_bo_address(struct wined3d_context *context, const struct wined3d_bo_address *dst, GLenum dst_binding, const struct wined3d_bo_address *src, GLenum src_binding, size_t size)
Definition: context.c:2846
void context_release(struct wined3d_context *context)
Definition: context.c:1571
void context_gl_resource_released(struct wined3d_device *device, GLuint name, BOOL rb_namespace)
Definition: context.c:1104
void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb)
Definition: texture.c:1546
BOOL wined3d_texture_load_location(struct wined3d_texture *texture, unsigned int sub_resource_idx, struct wined3d_context *context, DWORD location)
Definition: texture.c:229
void wined3d_texture_invalidate_location(struct wined3d_texture *texture, unsigned int sub_resource_idx, DWORD location)
Definition: texture.c:159
struct wined3d_texture *__cdecl wined3d_texture_from_resource(struct wined3d_resource *resource)
Definition: texture.c:2210
BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx, struct wined3d_context *context, DWORD location)
Definition: texture.c:1605
void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb)
Definition: texture.c:868
void wined3d_texture_bind(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb)
Definition: texture.c:729
void wined3d_texture_validate_location(struct wined3d_texture *texture, unsigned int sub_resource_idx, DWORD location)
Definition: texture.c:135
const struct wined3d_format * wined3d_get_format(const struct wined3d_gl_info *gl_info, enum wined3d_format_id format_id, unsigned int resource_usage)
Definition: utils.c:3831
const char * debug_d3dformat(enum wined3d_format_id format_id)
Definition: utils.c:3980
const char * debug_d3dresourcetype(enum wined3d_resource_type resource_type)
Definition: utils.c:4329
BOOL wined3d_formats_are_srgb_variants(enum wined3d_format_id format1, enum wined3d_format_id format2)
Definition: utils.c:3922
BOOL wined3d_format_is_depth_view(enum wined3d_format_id resource_format_id, enum wined3d_format_id view_format_id)
Definition: utils.c:3863
static void wined3d_shader_resource_view_destroy_object(void *object)
Definition: view.c:652
void wined3d_rendertarget_view_prepare_location(struct wined3d_rendertarget_view *view, struct wined3d_context *context, DWORD location)
Definition: view.c:446
static void get_buffer_view_range(const struct wined3d_buffer *buffer, const struct wined3d_view_desc *desc, const struct wined3d_format *view_format, unsigned int *offset, unsigned int *size)
Definition: view.c:272
HRESULT CDECL wined3d_shader_resource_view_create(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_shader_resource_view **view)
Definition: view.c:781
void wined3d_unordered_access_view_copy_counter(struct wined3d_unordered_access_view *view, struct wined3d_buffer *buffer, unsigned int offset, struct wined3d_context *context)
Definition: view.c:1063
static void wined3d_unordered_access_view_destroy_object(void *object)
Definition: view.c:948
void CDECL wined3d_shader_resource_view_generate_mipmaps(struct wined3d_shader_resource_view *view)
Definition: view.c:917
static void wined3d_view_invalidate_location(struct wined3d_resource *resource, const struct wined3d_view_desc *desc, DWORD location)
Definition: view.c:298
#define WINED3D_VIEW_CUBE_ARRAY
Definition: view.c:27
static void wined3d_rendertarget_view_destroy_object(void *object)
Definition: view.c:327
void wined3d_unordered_access_view_clear_uint(struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value, struct wined3d_context *context)
Definition: view.c:1004
void wined3d_shader_resource_view_bind(struct wined3d_shader_resource_view *view, unsigned int unit, struct wined3d_sampler *sampler, struct wined3d_context *context)
Definition: view.c:807
void wined3d_unordered_access_view_invalidate_location(struct wined3d_unordered_access_view *view, DWORD location)
Definition: view.c:998
HRESULT CDECL wined3d_rendertarget_view_create_from_sub_resource(struct wined3d_texture *texture, unsigned int sub_resource_idx, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_rendertarget_view **view)
Definition: view.c:624
ULONG CDECL wined3d_unordered_access_view_decref(struct wined3d_unordered_access_view *view)
Definition: view.c:970
HRESULT CDECL wined3d_unordered_access_view_create(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_unordered_access_view **view)
Definition: view.c:1156
static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target, const struct wined3d_view_desc *desc, struct wined3d_texture *texture, const struct wined3d_format *view_format)
Definition: view.c:168
void wined3d_rendertarget_view_invalidate_location(struct wined3d_rendertarget_view *view, DWORD location)
Definition: view.c:505
ULONG CDECL wined3d_shader_resource_view_incref(struct wined3d_shader_resource_view *view)
Definition: view.c:643
void wined3d_rendertarget_view_load_location(struct wined3d_rendertarget_view *view, struct wined3d_context *context, DWORD location)
Definition: view.c:466
static GLenum get_texture_view_target(const struct wined3d_gl_info *gl_info, const struct wined3d_view_desc *desc, const struct wined3d_texture *texture)
Definition: view.c:35
HRESULT CDECL wined3d_rendertarget_view_create(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_rendertarget_view **view)
Definition: view.c:598
static HRESULT wined3d_shader_resource_view_init(struct wined3d_shader_resource_view *view, const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: view.c:759
void *CDECL wined3d_shader_resource_view_get_parent(const struct wined3d_shader_resource_view *view)
Definition: view.c:692
static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_access_view *view, const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: view.c:1134
void wined3d_rendertarget_view_get_drawable_size(const struct wined3d_rendertarget_view *view, const struct wined3d_context *context, unsigned int *width, unsigned int *height)
Definition: view.c:404
ULONG CDECL wined3d_rendertarget_view_incref(struct wined3d_rendertarget_view *view)
Definition: view.c:318
void *CDECL wined3d_rendertarget_view_get_parent(const struct wined3d_rendertarget_view *view)
Definition: view.c:369
void CDECL wined3d_rendertarget_view_set_parent(struct wined3d_rendertarget_view *view, void *parent)
Definition: view.c:390
void *CDECL wined3d_rendertarget_view_get_sub_resource_parent(const struct wined3d_rendertarget_view *view)
Definition: view.c:376
static void wined3d_shader_resource_view_cs_init(void *object)
Definition: view.c:699
static void create_buffer_view(struct wined3d_gl_view *view, struct wined3d_context *context, const struct wined3d_view_desc *desc, struct wined3d_buffer *buffer, const struct wined3d_format *view_format)
Definition: view.c:288
ULONG CDECL wined3d_unordered_access_view_incref(struct wined3d_unordered_access_view *view)
Definition: view.c:939
static void wined3d_render_target_view_cs_init(void *object)
Definition: view.c:510
static void create_buffer_texture(struct wined3d_gl_view *view, struct wined3d_context *context, struct wined3d_buffer *buffer, const struct wined3d_format *view_format, unsigned int offset, unsigned int size)
Definition: view.c:230
void shader_resource_view_generate_mipmaps(struct wined3d_shader_resource_view *view)
Definition: view.c:851
static void shader_resource_view_bind_and_dirtify(struct wined3d_shader_resource_view *view, struct wined3d_context *context)
Definition: view.c:834
static const struct wined3d_format * validate_resource_view(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, BOOL mip_slice, BOOL allow_srgb_toggle)
Definition: view.c:84
static void wined3d_unordered_access_view_cs_init(void *object)
Definition: view.c:1084
static BOOL is_stencil_view_format(const struct wined3d_format *format)
Definition: view.c:29
static HRESULT wined3d_rendertarget_view_init(struct wined3d_rendertarget_view *view, const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: view.c:550
void *CDECL wined3d_unordered_access_view_get_parent(const struct wined3d_unordered_access_view *view)
Definition: view.c:991
struct wined3d_resource *CDECL wined3d_rendertarget_view_get_resource(const struct wined3d_rendertarget_view *view)
Definition: view.c:397
ULONG CDECL wined3d_rendertarget_view_decref(struct wined3d_rendertarget_view *view)
Definition: view.c:348
void wined3d_rendertarget_view_validate_location(struct wined3d_rendertarget_view *view, DWORD location)
Definition: view.c:486
void wined3d_unordered_access_view_set_counter(struct wined3d_unordered_access_view *view, unsigned int value)
Definition: view.c:1046
ULONG CDECL wined3d_shader_resource_view_decref(struct wined3d_shader_resource_view *view)
Definition: view.c:671
#define CDECL
Definition: compat.h:29
r parent
Definition: btrfs.c:3010
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define GL_TEXTURE_CUBE_MAP
Definition: gl.h:1788
#define GL_TEXTURE_BASE_LEVEL
Definition: gl.h:1503
#define GL_TEXTURE_MAX_LEVEL
Definition: gl.h:1504
unsigned int GLenum
Definition: gl.h:150
unsigned int GLuint
Definition: gl.h:159
#define GL_TEXTURE_3D
Definition: gl.h:1515
#define GL_ZERO
Definition: gl.h:374
#define GL_RED
Definition: gl.h:480
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
int GLint
Definition: gl.h:156
GLint GLint GLsizei width
Definition: gl.h:1546
#define GL_TEXTURE_2D
Definition: gl.h:645
#define GL_TEXTURE_1D
Definition: gl.h:644
#define GL_STENCIL_INDEX
Definition: gl.h:458
GLsizeiptr size
Definition: glext.h:5919
#define GL_SKIP_DECODE_EXT
Definition: glext.h:5291
GLenum GLuint texture
Definition: glext.h:6295
#define GL_ATOMIC_COUNTER_BUFFER
Definition: glext.h:2297
GLenum src
Definition: glext.h:6340
GLuint GLenum swizzle
Definition: glext.h:9511
GLuint buffer
Definition: glext.h:5915
GLuint sampler
Definition: glext.h:7283
#define GL_TEXTURE_SRGB_DECODE_EXT
Definition: glext.h:5289
#define GL_TEXTURE_BUFFER
Definition: glext.h:748
#define GL_TEXTURE_SWIZZLE_RGBA
Definition: glext.h:2032
GLenum GLenum dst
Definition: glext.h:6340
#define GL_TEXTURE_RECTANGLE
Definition: glext.h:753
#define GL_TEXTURE_1D_ARRAY
Definition: glext.h:533
#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY
Definition: glext.h:1941
#define GL_TEXTURE_2D_MULTISAMPLE
Definition: glext.h:1939
#define GL_STATIC_DRAW
Definition: glext.h:350
#define GL_TEXTURE_CUBE_MAP_ARRAY
Definition: glext.h:920
#define GL_TEXTURE_2D_ARRAY
Definition: glext.h:535
GLintptr offset
Definition: glext.h:5920
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define FAILED(hr)
Definition: intsafe.h:51
#define resource
Definition: kernel32.h:9
#define location(file, line)
Definition: kmtest.h:18
static const WCHAR desc[]
Definition: protectdata.c:36
png_const_structrp png_const_inforp int * unit
Definition: png.h:2159
void wined3d_sampler_bind(struct wined3d_sampler *sampler, unsigned int unit, struct wined3d_texture *texture, const struct wined3d_context *context)
Definition: sampler.c:184
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
Definition: http.c:7252
Definition: devices.h:37
struct wined3d_sampler_desc sampler_desc
unsigned int base_level
enum view_type type
const struct wined3d_gl_info * gl_info
enum wined3d_format_id id
enum wined3d_format_id typeless_id
BOOL supported[WINED3D_GL_EXT_COUNT]
struct opengl_funcs gl_ops
struct wined3d_gl_limits limits
struct wined3d_fbo_ops fbo_ops
const struct wined3d_parent_ops * parent_ops
const struct wined3d_parent_ops * parent_ops
struct wined3d_swapchain_desc desc
const struct wined3d_parent_ops * parent_ops
static void buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
Definition: swimpl.c:888
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:94
#define GL_DEPTH_STENCIL_TEXTURE_MODE
Definition: wgl.h:1005
#define WINED3D_OK
Definition: wined3d.h:37
#define WINED3D_VIEW_TEXTURE_CUBE
Definition: wined3d.h:1576
@ WINED3D_RTYPE_TEXTURE_2D
Definition: wined3d.h:700
@ WINED3D_RTYPE_BUFFER
Definition: wined3d.h:698
@ WINED3D_RTYPE_TEXTURE_3D
Definition: wined3d.h:701
#define WINED3D_VIEW_TEXTURE_ARRAY
Definition: wined3d.h:1577
#define WINED3D_VIEW_BUFFER_RAW
Definition: wined3d.h:1573
@ WINED3DFMT_X24_TYPELESS_G8_UINT
Definition: wined3d.h:183
@ WINED3DFMT_R32_SINT
Definition: wined3d.h:179
@ WINED3DFMT_UNKNOWN
Definition: wined3d.h:107
@ WINED3DFMT_R32_UINT
Definition: wined3d.h:178
@ WINED3DFMT_R32G32B32A32_UINT
Definition: wined3d.h:137
@ WINED3DFMT_X32_TYPELESS_G8X24_UINT
Definition: wined3d.h:156
@ WINED3DFMT_R32_TYPELESS
Definition: wined3d.h:175
@ WINED3DFMT_R32G32B32A32_SINT
Definition: wined3d.h:138
#define WINED3D_VIEW_BUFFER_APPEND
Definition: wined3d.h:1574
#define WINED3D_VIEW_BUFFER_COUNTER
Definition: wined3d.h:1575
#define WINED3D_SRGB_READ_WRITE_CONTROL
Definition: wined3d.h:1324
wined3d_gl_extension
Definition: wined3d_gl.h:36
@ ARB_TEXTURE_BUFFER_OBJECT
Definition: wined3d_gl.h:108
@ ARB_TEXTURE_VIEW
Definition: wined3d_gl.h:131
@ ARB_SAMPLER_OBJECTS
Definition: wined3d_gl.h:92
@ ARB_CLEAR_BUFFER_OBJECT
Definition: wined3d_gl.h:47
@ ARB_STENCIL_TEXTURING
Definition: wined3d_gl.h:104
@ ARB_TEXTURE_BUFFER_RANGE
Definition: wined3d_gl.h:109
@ ARB_TEXTURE_CUBE_MAP_ARRAY
Definition: wined3d_gl.h:114
static BOOL wined3d_format_is_typeless(const struct wined3d_format *format)
static unsigned int wined3d_texture_get_level_height(const struct wined3d_texture *texture, unsigned int level)
#define WINED3D_TEXTURE_GENERATE_MIPMAPS
#define WINED3D_LOCATION_TEXTURE_SRGB
static unsigned int wined3d_texture_get_level_pow2_height(const struct wined3d_texture *texture, unsigned int level)
#define STATE_GRAPHICS_SHADER_RESOURCE_BINDING
static void wined3d_resource_acquire(struct wined3d_resource *resource)
static unsigned int wined3d_texture_get_level_width(const struct wined3d_texture *texture, unsigned int level)
#define WINED3D_LOCATION_BUFFER
#define GL_EXTCALL(f)
static unsigned int wined3d_texture_get_level_pow2_width(const struct wined3d_texture *texture, unsigned int level)
static ULONG wined3d_resource_decref(struct wined3d_resource *resource)
#define STATE_SAMPLER(num)
static void wined3d_resource_release(struct wined3d_resource *resource)
#define STATE_COMPUTE_SHADER_RESOURCE_BINDING
#define WINED3D_LOCATION_TEXTURE_RGB
#define ORM_BACKBUFFER
static GLuint wined3d_texture_get_texture_name(const struct wined3d_texture *texture, const struct wined3d_context *context, BOOL srgb)
static ULONG wined3d_resource_incref(struct wined3d_resource *resource)
static struct gl_texture * wined3d_texture_get_gl_texture(struct wined3d_texture *texture, BOOL srgb)
#define WINED3D_UNMAPPED_STAGE
#define checkGLcall(A)
static struct wined3d_texture * texture_from_resource(struct wined3d_resource *resource)
static struct wined3d_buffer * buffer_from_resource(struct wined3d_resource *resource)
#define WINED3D_TEXTURE_IS_SRGB
static unsigned int wined3d_texture_get_level_depth(const struct wined3d_texture *texture, unsigned int level)