ReactOS 0.4.17-dev-1037-g720d112
directx.c File Reference
#include "wined3d_private.h"
#include "wined3d_gl.h"
#include "winternl.h"
#include "wine/list.h"
Include dependency graph for directx.c:

Go to the source code of this file.

Classes

struct  wined3d_adapter_budget_change_notification
 
struct  driver_version_information
 

Macros

#define DEFAULT_REFRESH_RATE   0
 

Enumerations

enum  wined3d_driver_model {
  DRIVER_MODEL_GENERIC , DRIVER_MODEL_WIN9X , DRIVER_MODEL_NT40 , DRIVER_MODEL_NT5X ,
  DRIVER_MODEL_NT6X
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3d)
 
 WINE_DECLARE_DEBUG_CHANNEL (winediag)
 
void CDECL wined3d_output_release_ownership (const struct wined3d_output *output)
 
HRESULT CDECL wined3d_output_take_ownership (const struct wined3d_output *output, BOOL exclusive)
 
static void wined3d_output_cleanup (const struct wined3d_output *output)
 
static HRESULT wined3d_output_init (struct wined3d_output *output, unsigned int ordinal, struct wined3d_adapter *adapter, const WCHAR *device_name)
 
UINT64 adapter_adjust_memory (struct wined3d_adapter *adapter, INT64 amount)
 
ssize_t adapter_adjust_mapped_memory (struct wined3d_adapter *adapter, ssize_t size)
 
void wined3d_adapter_cleanup (struct wined3d_adapter *adapter)
 
ULONG CDECL wined3d_incref (struct wined3d *wined3d)
 
ULONG CDECL wined3d_decref (struct wined3d *wined3d)
 
static const struct driver_version_information * get_driver_version_info (enum wined3d_display_driver driver, enum wined3d_driver_model driver_model)
 
const struct wined3d_gpu_description * wined3d_get_gpu_description (enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
 
const struct wined3d_gpu_description * wined3d_get_user_override_gpu_description (enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
 
static void wined3d_copy_name (char *dst, const char *src, unsigned int dst_size)
 
bool wined3d_driver_info_init (struct wined3d_driver_info *driver_info, const struct wined3d_gpu_description *gpu_desc, enum wined3d_feature_level feature_level, UINT64 vram_bytes, UINT64 sysmem_bytes)
 
enum wined3d_pci_device wined3d_gpu_from_feature_level (enum wined3d_pci_vendor *vendor, enum wined3d_feature_level feature_level)
 
struct wined3d_adapter *CDECL wined3d_get_adapter (const struct wined3d *wined3d, unsigned int idx)
 
UINT CDECL wined3d_get_adapter_count (const struct wined3d *wined3d)
 
struct wined3d_output *CDECL wined3d_adapter_get_output (const struct wined3d_adapter *adapter, unsigned int idx)
 
unsigned int CDECL wined3d_adapter_get_output_count (const struct wined3d_adapter *adapter)
 
HRESULT CDECL wined3d_adapter_get_video_memory_info (const struct wined3d_adapter *adapter, unsigned int node_idx, enum wined3d_memory_segment_group group, struct wined3d_video_memory_info *info)
 
static DWORD CALLBACK notification_thread_func (void *stop_event)
 
HRESULT CDECL wined3d_adapter_register_budget_change_notification (const struct wined3d_adapter *adapter, HANDLE event, DWORD *cookie)
 
HRESULT CDECL wined3d_adapter_unregister_budget_change_notification (DWORD cookie)
 
HRESULT CDECL wined3d_register_software_device (struct wined3d *wined3d, void *init_function)
 
static BOOL CALLBACK enum_monitor_proc (HMONITOR monitor, HDC hdc, RECT *rect, LPARAM lparam)
 
HRESULT CDECL wined3d_output_get_desc (const struct wined3d_output *output, struct wined3d_output_desc *desc)
 
static void wined3d_output_update_modes (struct wined3d_output *output, bool cached)
 
static bool mode_matches_filter (const struct wined3d_adapter *adapter, const struct wined3d_display_mode *mode, const struct wined3d_format *format, enum wined3d_scanline_ordering scanline_ordering)
 
unsigned int CDECL wined3d_output_get_mode_count (struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, bool cached)
 
HRESULT CDECL wined3d_output_get_mode (struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, unsigned int mode_idx, struct wined3d_display_mode *mode, bool cached)
 
HRESULT CDECL wined3d_output_find_closest_matching_mode (struct wined3d_output *output, struct wined3d_display_mode *mode)
 
struct wined3d_adapter *CDECL wined3d_output_get_adapter (const struct wined3d_output *output)
 
HRESULT CDECL wined3d_output_get_display_mode (const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
 
static BOOL equal_display_mode (const DEVMODEW *mode1, const DEVMODEW *mode2)
 
HRESULT CDECL wined3d_restore_display_modes (struct wined3d *wined3d)
 
HRESULT CDECL wined3d_output_set_display_mode (struct wined3d_output *output, const struct wined3d_display_mode *mode)
 
HRESULT CDECL wined3d_output_set_gamma_ramp (struct wined3d_output *output, const struct wined3d_gamma_ramp *ramp)
 
HRESULT wined3d_output_get_gamma_ramp (struct wined3d_output *output, struct wined3d_gamma_ramp *ramp)
 
HRESULT CDECL wined3d_adapter_get_identifier (const struct wined3d_adapter *adapter, uint32_t flags, struct wined3d_adapter_identifier *identifier)
 
HRESULT CDECL wined3d_output_get_raster_status (const struct wined3d_output *output, struct wined3d_raster_status *raster_status)
 
HRESULT CDECL wined3d_check_depth_stencil_match (const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id)
 
HRESULT CDECL wined3d_check_device_multisample_type (const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id surface_format_id, BOOL windowed, enum wined3d_multisample_type multisample_type, unsigned int *quality_levels)
 
static BOOL wined3d_check_depth_stencil_format (const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, const struct wined3d_format *ds_format, enum wined3d_gl_resource_type gl_type)
 
static BOOL wined3d_check_surface_format (const struct wined3d_format *format)
 
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)
 
unsigned int CDECL wined3d_calculate_format_pitch (const struct wined3d_adapter *adapter, enum wined3d_format_id format_id, unsigned int width)
 
HRESULT CDECL wined3d_check_device_format_conversion (const struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id src_format_id, enum wined3d_format_id dst_format_id)
 
HRESULT CDECL wined3d_check_device_type (const struct wined3d *wined3d, struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id display_format, enum wined3d_format_id backbuffer_format, BOOL windowed)
 
HRESULT CDECL wined3d_get_device_caps (const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, struct wined3d_caps *caps)
 
HRESULT CDECL wined3d_device_create (struct wined3d *wined3d, struct wined3d_adapter *adapter, enum wined3d_device_type device_type, HWND focus_window, uint32_t flags, BYTE surface_alignment, const enum wined3d_feature_level *feature_levels, unsigned int feature_level_count, struct wined3d_device_parent *device_parent, struct wined3d_device **device)
 
static void adapter_no3d_destroy (struct wined3d_adapter *adapter)
 
static HRESULT adapter_no3d_create_device (struct wined3d *wined3d, const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, HWND focus_window, unsigned int flags, BYTE surface_alignment, const enum wined3d_feature_level *levels, unsigned int level_count, struct wined3d_device_parent *device_parent, struct wined3d_device **device)
 
static void adapter_no3d_destroy_device (struct wined3d_device *device)
 
static struct wined3d_context * adapter_no3d_acquire_context (struct wined3d_device *device, struct wined3d_texture *texture, unsigned int sub_resource_idx)
 
static void adapter_no3d_release_context (struct wined3d_context *context)
 
static void adapter_no3d_get_wined3d_caps (const struct wined3d_adapter *adapter, struct wined3d_caps *caps)
 
static BOOL adapter_no3d_check_format (const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, const struct wined3d_format *rt_format, const struct wined3d_format *ds_format)
 
static HRESULT adapter_no3d_init_3d (struct wined3d_device *device)
 
static void adapter_no3d_uninit_3d (struct wined3d_device *device)
 
static void * adapter_no3d_map_bo_address (struct wined3d_context *context, const struct wined3d_bo_address *data, size_t size, uint32_t map_flags)
 
static void adapter_no3d_unmap_bo_address (struct wined3d_context *context, const struct wined3d_bo_address *data, unsigned int range_count, const struct wined3d_range *ranges)
 
static void adapter_no3d_copy_bo_address (struct wined3d_context *context, const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src, unsigned int range_count, const struct wined3d_range *ranges, uint32_t map_flags)
 
static void adapter_no3d_flush_bo_address (struct wined3d_context *context, const struct wined3d_const_bo_address *data, size_t size)
 
static bool adapter_no3d_alloc_bo (struct wined3d_device *device, struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_bo_address *addr)
 
static void adapter_no3d_destroy_bo (struct wined3d_context *context, struct wined3d_bo *bo)
 
static HRESULT adapter_no3d_create_swapchain (struct wined3d_device *device, const struct wined3d_swapchain_desc *desc, struct wined3d_swapchain_state_parent *state_parent, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain)
 
static void adapter_no3d_destroy_swapchain (struct wined3d_swapchain *swapchain)
 
static HRESULT adapter_no3d_create_buffer (struct wined3d_device *device, const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_buffer **buffer)
 
static void adapter_no3d_destroy_buffer (struct wined3d_buffer *buffer)
 
static HRESULT adapter_no3d_create_texture (struct wined3d_device *device, const struct wined3d_resource_desc *desc, unsigned int layer_count, unsigned int level_count, uint32_t flags, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_texture **texture)
 
static void adapter_no3d_destroy_texture (struct wined3d_texture *texture)
 
static HRESULT adapter_no3d_create_rendertarget_view (const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_rendertarget_view **view)
 
static void adapter_no3d_destroy_rendertarget_view (struct wined3d_rendertarget_view *view)
 
static HRESULT adapter_no3d_create_shader_resource_view (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)
 
static void adapter_no3d_destroy_shader_resource_view (struct wined3d_shader_resource_view *view)
 
static HRESULT adapter_no3d_create_unordered_access_view (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)
 
static void adapter_no3d_destroy_unordered_access_view (struct wined3d_unordered_access_view *view)
 
static HRESULT adapter_no3d_create_sampler (struct wined3d_device *device, const struct wined3d_sampler_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_sampler **sampler)
 
static void adapter_no3d_destroy_sampler (struct wined3d_sampler *sampler)
 
static HRESULT adapter_no3d_create_query (struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
 
static void adapter_no3d_destroy_query (struct wined3d_query *query)
 
static void adapter_no3d_flush_context (struct wined3d_context *context)
 
static void adapter_no3d_draw_primitive (struct wined3d_device *device, const struct wined3d_state *state, const struct wined3d_draw_parameters *parameters)
 
static void adapter_no3d_dispatch_compute (struct wined3d_device *device, const struct wined3d_state *state, const struct wined3d_dispatch_parameters *parameters)
 
static void adapter_no3d_clear_uav (struct wined3d_context *context, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value, bool fp)
 
static void wined3d_adapter_no3d_init_d3d_info (struct wined3d_adapter *adapter, unsigned int wined3d_creation_flags)
 
static struct wined3d_adapter * wined3d_adapter_no3d_create (unsigned int ordinal, unsigned int wined3d_creation_flags)
 
static BOOL wined3d_adapter_create_output (struct wined3d_adapter *adapter, const WCHAR *output_name)
 
BOOL wined3d_adapter_init (struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid, const struct wined3d_adapter_ops *adapter_ops)
 
static struct wined3d_adapter * wined3d_adapter_create (unsigned int ordinal, DWORD wined3d_creation_flags)
 
static void STDMETHODCALLTYPE wined3d_null_wined3d_object_destroyed (void *parent)
 
HRESULT wined3d_init (struct wined3d *wined3d, uint32_t flags)
 

Variables

static struct list adapter_budget_change_notifications = LIST_INIT( adapter_budget_change_notifications )
 
static HANDLE notification_thread
 
static HANDLE notification_thread_stop_event
 
static const GUID IID_D3DDEVICE_D3DUID = { 0xaeb2cdd4, 0x6e41, 0x43ea, { 0x94,0x1c,0x83,0x61,0xcc,0x76,0x07,0x81 } }
 
const struct min_lookup minMipLookup []
 
const GLenum magLookup []
 
static const struct driver_version_information driver_version_table []
 
static const struct wined3d_gpu_description gpu_description_table []
 
static const struct wined3d_state_entry_template misc_state_template_no3d []
 
static const struct wined3d_adapter_ops wined3d_adapter_no3d_ops
 
const struct wined3d_parent_ops wined3d_null_parent_ops
 

Macro Definition Documentation

◆ DEFAULT_REFRESH_RATE

#define DEFAULT_REFRESH_RATE   0

Definition at line 32 of file directx.c.

Enumeration Type Documentation

◆ wined3d_driver_model

Enumerator
DRIVER_MODEL_GENERIC 
DRIVER_MODEL_WIN9X 
DRIVER_MODEL_NT40 
DRIVER_MODEL_NT5X 
DRIVER_MODEL_NT6X 

Definition at line 34 of file directx.c.

35{
41};
@ DRIVER_MODEL_NT6X
Definition: directx.c:40
@ DRIVER_MODEL_NT5X
Definition: directx.c:39
@ DRIVER_MODEL_GENERIC
Definition: directx.c:36
@ DRIVER_MODEL_WIN9X
Definition: directx.c:37
@ DRIVER_MODEL_NT40
Definition: directx.c:38

Function Documentation

◆ adapter_adjust_mapped_memory()

ssize_t adapter_adjust_mapped_memory ( struct wined3d_adapter *  adapter,
ssize_t  size 
)

Definition at line 167 of file directx.c.

168{
169 /* Note that this needs to be thread-safe; the Vulkan adapter may map from
170 * client threads. */
172 TRACE("Adjusted mapped adapter memory by %Id to %Id.\n", size, ret);
173 return ret;
174}
return ret
Definition: mutex.c:147
return adapter
GLsizeiptr size
Definition: glext.h:5919
#define InterlockedExchangeAddSizeT(a, b)
Definition: interlocked.h:211
int ssize_t
Definition: rosdhcp.h:52
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by wined3d_allocator_chunk_gl_map(), wined3d_allocator_chunk_gl_unmap(), wined3d_allocator_chunk_vk_map(), wined3d_allocator_chunk_vk_unmap(), wined3d_allocator_vk_destroy_chunk(), wined3d_bo_gl_map(), wined3d_bo_gl_unmap(), wined3d_bo_vk_map(), wined3d_bo_vk_unmap(), wined3d_context_gl_destroy_bo(), and wined3d_context_vk_destroy_bo().

◆ adapter_adjust_memory()

UINT64 adapter_adjust_memory ( struct wined3d_adapter *  adapter,
INT64  amount 
)

Definition at line 158 of file directx.c.

159{
160 adapter->vram_bytes_used += amount;
161 TRACE("Adjusted used adapter memory by 0x%s to 0x%s.\n",
162 wine_dbgstr_longlong(amount),
163 wine_dbgstr_longlong(adapter->vram_bytes_used));
164 return adapter->vram_bytes_used;
165}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49

Referenced by resource_cleanup(), resource_init(), and wined3d_texture_update_desc().

◆ adapter_no3d_acquire_context()

static struct wined3d_context * adapter_no3d_acquire_context ( struct wined3d_device *  device,
struct wined3d_texture *  texture,
unsigned int  sub_resource_idx 
)
static

Definition at line 2880 of file directx.c.

2882{
2883 TRACE("device %p, texture %p, sub_resource_idx %u.\n", device, texture, sub_resource_idx);
2884
2886
2887 if (!device->context_count)
2888 return NULL;
2889
2891}
#define NULL
Definition: types.h:112
GLenum GLuint texture
Definition: glext.h:6295
Definition: devices.h:37
struct wined3d_context context_no3d
static void wined3d_from_cs(const struct wined3d_cs *cs)

◆ adapter_no3d_alloc_bo()

static bool adapter_no3d_alloc_bo ( struct wined3d_device *  device,
struct wined3d_resource *  resource,
unsigned int  sub_resource_idx,
struct wined3d_bo_address *  addr 
)
static

Definition at line 2998 of file directx.c.

3000{
3001 return false;
3002}

◆ adapter_no3d_check_format()

static BOOL adapter_no3d_check_format ( const struct wined3d_adapter *  adapter,
const struct wined3d_format *  adapter_format,
const struct wined3d_format *  rt_format,
const struct wined3d_format *  ds_format 
)
static

Definition at line 2902 of file directx.c.

2905{
2906 return TRUE;
2907}
#define TRUE
Definition: types.h:120

◆ adapter_no3d_clear_uav()

static void adapter_no3d_clear_uav ( struct wined3d_context *  context,
struct wined3d_unordered_access_view *  view,
const struct wined3d_uvec4 *  clear_value,
bool  fp 
)
static

Definition at line 3257 of file directx.c.

3259{
3260 ERR("context %p, view %p, clear_value %s, fp %#x.\n", context, view, debug_uvec4(clear_value), fp);
3261}
#define ERR(fmt,...)
Definition: precomp.h:57
const char * debug_uvec4(const struct wined3d_uvec4 *v)
Definition: utils.c:4577
Definition: http.c:7252

◆ adapter_no3d_copy_bo_address()

static void adapter_no3d_copy_bo_address ( struct wined3d_context *  context,
const struct wined3d_bo_address *  dst,
const struct wined3d_bo_address *  src,
unsigned int  range_count,
const struct wined3d_range *  ranges,
uint32_t  map_flags 
)
static

Definition at line 2976 of file directx.c.

2979{
2980 unsigned int i;
2981
2982 if (dst->buffer_object)
2983 ERR("Unsupported dst buffer object %p.\n", dst->buffer_object);
2984 if (src->buffer_object)
2985 ERR("Unsupported src buffer object %p.\n", src->buffer_object);
2986 if (dst->buffer_object || src->buffer_object)
2987 return;
2988
2989 for (i = 0; i < range_count; ++i)
2990 memcpy(dst->addr + ranges[i].offset, src->addr + ranges[i].offset, ranges[i].size);
2991}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
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
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

◆ adapter_no3d_create_buffer()

static HRESULT adapter_no3d_create_buffer ( struct wined3d_device *  device,
const struct wined3d_buffer_desc *  desc,
const struct wined3d_sub_resource_data *  data,
void *  parent,
const struct wined3d_parent_ops *  parent_ops,
struct wined3d_buffer **  buffer 
)
static

Definition at line 3041 of file directx.c.

3044{
3045 struct wined3d_buffer *buffer_no3d;
3046 HRESULT hr;
3047
3048 TRACE("device %p, desc %p, data %p, parent %p, parent_ops %p, buffer %p.\n",
3049 device, desc, data, parent, parent_ops, buffer);
3050
3051 if (!(buffer_no3d = calloc(1, sizeof(*buffer_no3d))))
3052 return E_OUTOFMEMORY;
3053
3054 if (FAILED(hr = wined3d_buffer_no3d_init(buffer_no3d, device, desc, data, parent, parent_ops)))
3055 {
3056 WARN("Failed to initialise buffer, hr %#lx.\n", hr);
3057 free(buffer_no3d);
3058 return hr;
3059 }
3060
3061 TRACE("Created buffer %p.\n", buffer_no3d);
3062 *buffer = buffer_no3d;
3063
3064 return hr;
3065}
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
HRESULT wined3d_buffer_no3d_init(struct wined3d_buffer *buffer_no3d, struct wined3d_device *device, const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: buffer.c:1040
r parent
Definition: btrfs.c:3010
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint buffer
Definition: glext.h:5915
#define FAILED(hr)
Definition: intsafe.h:51
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
#define calloc
Definition: rosglue.h:14

◆ adapter_no3d_create_device()

static HRESULT adapter_no3d_create_device ( struct wined3d *  wined3d,
const struct wined3d_adapter *  adapter,
enum wined3d_device_type  device_type,
HWND  focus_window,
unsigned int  flags,
BYTE  surface_alignment,
const enum wined3d_feature_level *  levels,
unsigned int  level_count,
struct wined3d_device_parent *  device_parent,
struct wined3d_device **  device 
)
static

Definition at line 2848 of file directx.c.

2852{
2853 /* No extensions in the state table, only extension 0, which is implicitly supported. */
2854 static const BOOL supported_extensions[] = {TRUE};
2855 struct wined3d_device_no3d *device_no3d;
2856 HRESULT hr;
2857
2858 if (!(device_no3d = calloc(1, sizeof(*device_no3d))))
2859 return E_OUTOFMEMORY;
2860
2861 if (FAILED(hr = wined3d_device_init(&device_no3d->d, wined3d, adapter->ordinal, device_type, focus_window,
2862 flags, surface_alignment, levels, level_count, supported_extensions, device_parent)))
2863 {
2864 WARN("Failed to initialize device, hr %#lx.\n", hr);
2865 free(device_no3d);
2866 return hr;
2867 }
2868
2869 *device = &device_no3d->d;
2870
2871 return WINED3D_OK;
2872}
device_type
HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined3d, unsigned int adapter_idx, enum wined3d_device_type device_type, HWND focus_window, unsigned int flags, BYTE surface_alignment, const enum wined3d_feature_level *levels, unsigned int level_count, const BOOL *supported_extensions, struct wined3d_device_parent *device_parent)
Definition: device.c:5479
unsigned int BOOL
Definition: ntddk_ex.h:94
GLbitfield flags
Definition: glext.h:7161
GLsizei levels
Definition: glext.h:7884
struct wined3d_device d
#define WINED3D_OK
Definition: wined3d.h:33

◆ adapter_no3d_create_query()

static HRESULT adapter_no3d_create_query ( struct wined3d_device *  device,
enum wined3d_query_type  type,
void *  parent,
const struct wined3d_parent_ops *  parent_ops,
struct wined3d_query **  query 
)
static

Definition at line 3226 of file directx.c.

3228{
3229 TRACE("device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
3230 device, type, parent, parent_ops, query);
3231
3233}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define WINED3DERR_NOTAVAILABLE
Definition: wined3d.h:42

◆ adapter_no3d_create_rendertarget_view()

static HRESULT adapter_no3d_create_rendertarget_view ( const struct wined3d_view_desc *  desc,
struct wined3d_resource *  resource,
void *  parent,
const struct wined3d_parent_ops *  parent_ops,
struct wined3d_rendertarget_view **  view 
)
static

Definition at line 3137 of file directx.c.

3140{
3141 struct wined3d_rendertarget_view *view_no3d;
3142 HRESULT hr;
3143
3144 TRACE("desc %s, resource %p, parent %p, parent_ops %p, view %p.\n",
3146
3147 if (!(view_no3d = calloc(1, sizeof(*view_no3d))))
3148 return E_OUTOFMEMORY;
3149
3151 {
3152 WARN("Failed to initialise view, hr %#lx.\n", hr);
3153 free(view_no3d);
3154 return hr;
3155 }
3156
3157 TRACE("Created render target view %p.\n", view_no3d);
3158 *view = view_no3d;
3159
3160 return hr;
3161}
const char * wined3d_debug_view_desc(const struct wined3d_view_desc *d, const struct wined3d_resource *resource)
Definition: utils.c:4867
HRESULT wined3d_rendertarget_view_no3d_init(struct wined3d_rendertarget_view *view_no3d, const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: view.c:649
const struct wined3d_parent_ops * parent_ops

◆ adapter_no3d_create_sampler()

static HRESULT adapter_no3d_create_sampler ( struct wined3d_device *  device,
const struct wined3d_sampler_desc *  desc,
void *  parent,
const struct wined3d_parent_ops *  parent_ops,
struct wined3d_sampler **  sampler 
)
static

Definition at line 3212 of file directx.c.

3214{
3215 TRACE("device %p, desc %p, parent %p, parent_ops %p, sampler %p.\n",
3216 device, desc, parent, parent_ops, sampler);
3217
3218 return E_NOTIMPL;
3219}
#define E_NOTIMPL
Definition: ddrawi.h:99
GLuint sampler
Definition: glext.h:7283

◆ adapter_no3d_create_shader_resource_view()

static HRESULT adapter_no3d_create_shader_resource_view ( 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 
)
static

Definition at line 3182 of file directx.c.

3185{
3186 TRACE("desc %s, resource %p, parent %p, parent_ops %p, view %p.\n",
3188
3189 return E_NOTIMPL;
3190}

◆ adapter_no3d_create_swapchain()

static HRESULT adapter_no3d_create_swapchain ( struct wined3d_device *  device,
const struct wined3d_swapchain_desc *  desc,
struct wined3d_swapchain_state_parent *  state_parent,
void *  parent,
const struct wined3d_parent_ops *  parent_ops,
struct wined3d_swapchain **  swapchain 
)
static

Definition at line 3008 of file directx.c.

3011{
3012 struct wined3d_swapchain *swapchain_no3d;
3013 HRESULT hr;
3014
3015 TRACE("device %p, desc %p, state_parent %p, parent %p, parent_ops %p, swapchain %p.\n",
3016 device, desc, state_parent, parent, parent_ops, swapchain);
3017
3018 if (!(swapchain_no3d = calloc(1, sizeof(*swapchain_no3d))))
3019 return E_OUTOFMEMORY;
3020
3021 if (FAILED(hr = wined3d_swapchain_no3d_init(swapchain_no3d, device, desc, state_parent, parent,
3022 parent_ops)))
3023 {
3024 WARN("Failed to initialise swapchain, hr %#lx.\n", hr);
3025 free(swapchain_no3d);
3026 return hr;
3027 }
3028
3029 TRACE("Created swapchain %p.\n", swapchain_no3d);
3030 *swapchain = swapchain_no3d;
3031
3032 return hr;
3033}
const struct wined3d_parent_ops * parent_ops
HRESULT wined3d_swapchain_no3d_init(struct wined3d_swapchain *swapchain_no3d, struct wined3d_device *device, const struct wined3d_swapchain_desc *desc, struct wined3d_swapchain_state_parent *state_parent, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: swapchain.c:1685

◆ adapter_no3d_create_texture()

static HRESULT adapter_no3d_create_texture ( struct wined3d_device *  device,
const struct wined3d_resource_desc *  desc,
unsigned int  layer_count,
unsigned int  level_count,
uint32_t  flags,
void *  parent,
const struct wined3d_parent_ops *  parent_ops,
struct wined3d_texture **  texture 
)
static

Definition at line 3086 of file directx.c.

3089{
3090 struct wined3d_texture *texture_no3d;
3091 HRESULT hr;
3092
3093 TRACE("device %p, desc %p, layer_count %u, level_count %u, flags %#x, parent %p, parent_ops %p, texture %p.\n",
3095
3096 if (!(texture_no3d = wined3d_texture_allocate_object_memory(sizeof(*texture_no3d), level_count, layer_count)))
3097 return E_OUTOFMEMORY;
3098
3099 if (FAILED(hr = wined3d_texture_no3d_init(texture_no3d, device, desc,
3100 layer_count, level_count, flags, parent, parent_ops)))
3101 {
3102 WARN("Failed to initialise texture, hr %#lx.\n", hr);
3103 free(texture_no3d);
3104 return hr;
3105 }
3106
3107 TRACE("Created texture %p.\n", texture_no3d);
3108 *texture = texture_no3d;
3109
3110 return hr;
3111}
HRESULT wined3d_texture_no3d_init(struct wined3d_texture *texture_no3d, struct wined3d_device *device, const struct wined3d_resource_desc *desc, unsigned int layer_count, unsigned int level_count, uint32_t flags, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: texture.c:4570
unsigned int level_count
static void * wined3d_texture_allocate_object_memory(SIZE_T s, SIZE_T level_count, SIZE_T layer_count)

◆ adapter_no3d_create_unordered_access_view()

static HRESULT adapter_no3d_create_unordered_access_view ( 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 
)
static

Definition at line 3197 of file directx.c.

3200{
3201 TRACE("desc %s, resource %p, parent %p, parent_ops %p, view %p.\n",
3203
3204 return E_NOTIMPL;
3205}

◆ adapter_no3d_destroy()

static void adapter_no3d_destroy ( struct wined3d_adapter *  adapter)
static

Definition at line 2842 of file directx.c.

2843{
2845 free(adapter);
2846}
void wined3d_adapter_cleanup(struct wined3d_adapter *adapter)
Definition: directx.c:176

◆ adapter_no3d_destroy_bo()

static void adapter_no3d_destroy_bo ( struct wined3d_context *  context,
struct wined3d_bo *  bo 
)
static

Definition at line 3004 of file directx.c.

3005{
3006}

◆ adapter_no3d_destroy_buffer()

static void adapter_no3d_destroy_buffer ( struct wined3d_buffer *  buffer)
static

Definition at line 3067 of file directx.c.

3068{
3069 struct wined3d_device *device = buffer->resource.device;
3070 unsigned int swapchain_count = device->swapchain_count;
3071
3072 TRACE("buffer %p.\n", buffer);
3073
3074 /* Take a reference to the device, in case releasing the buffer would
3075 * cause the device to be destroyed. However, swapchain resources don't
3076 * take a reference to the device, and we wouldn't want to increment the
3077 * refcount on a device that's in the process of being destroyed. */
3078 if (swapchain_count)
3082 if (swapchain_count)
3084}
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
Definition: cs.c:2299
void wined3d_buffer_cleanup(struct wined3d_buffer *buffer)
Definition: buffer.c:453
ULONG CDECL wined3d_device_decref(struct wined3d_device *device)
Definition: device.c:251
ULONG CDECL wined3d_device_incref(struct wined3d_device *device)
Definition: device.c:161

◆ adapter_no3d_destroy_device()

static void adapter_no3d_destroy_device ( struct wined3d_device *  device)
static

Definition at line 2874 of file directx.c.

2875{
2877 free(device);
2878}
void wined3d_device_cleanup(struct wined3d_device *device)
Definition: device.c:205

◆ adapter_no3d_destroy_query()

static void adapter_no3d_destroy_query ( struct wined3d_query *  query)
static

Definition at line 3235 of file directx.c.

3236{
3237 TRACE("query %p.\n", query);
3238}

◆ adapter_no3d_destroy_rendertarget_view()

static void adapter_no3d_destroy_rendertarget_view ( struct wined3d_rendertarget_view *  view)
static

Definition at line 3163 of file directx.c.

3164{
3165 struct wined3d_device *device = view->resource->device;
3166 unsigned int swapchain_count = device->swapchain_count;
3167
3168 TRACE("view %p.\n", view);
3169
3170 /* Take a reference to the device, in case releasing the view's resource
3171 * would cause the device to be destroyed. However, swapchain resources
3172 * don't take a reference to the device, and we wouldn't want to increment
3173 * the refcount on a device that's in the process of being destroyed. */
3174 if (swapchain_count)
3178 if (swapchain_count)
3180}
void wined3d_rendertarget_view_cleanup(struct wined3d_rendertarget_view *view)
Definition: view.c:374

◆ adapter_no3d_destroy_sampler()

static void adapter_no3d_destroy_sampler ( struct wined3d_sampler *  sampler)
static

Definition at line 3221 of file directx.c.

3222{
3223 TRACE("sampler %p.\n", sampler);
3224}

◆ adapter_no3d_destroy_shader_resource_view()

static void adapter_no3d_destroy_shader_resource_view ( struct wined3d_shader_resource_view *  view)
static

Definition at line 3192 of file directx.c.

3193{
3194 TRACE("view %p.\n", view);
3195}

◆ adapter_no3d_destroy_swapchain()

static void adapter_no3d_destroy_swapchain ( struct wined3d_swapchain *  swapchain)
static

Definition at line 3035 of file directx.c.

3036{
3037 wined3d_swapchain_cleanup(swapchain);
3038 free(swapchain);
3039}
void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain)
Definition: swapchain.c:30

◆ adapter_no3d_destroy_texture()

static void adapter_no3d_destroy_texture ( struct wined3d_texture *  texture)
static

Definition at line 3113 of file directx.c.

3114{
3115 struct wined3d_device *device = texture->resource.device;
3116 unsigned int swapchain_count = device->swapchain_count;
3117
3118 TRACE("texture %p.\n", texture);
3119
3120 /* Take a reference to the device, in case releasing the texture would
3121 * cause the device to be destroyed. However, swapchain resources don't
3122 * take a reference to the device, and we wouldn't want to increment the
3123 * refcount on a device that's in the process of being destroyed. */
3124 if (swapchain_count)
3126
3128 texture->resource.parent_ops->wined3d_object_destroyed(texture->resource.parent);
3129
3132
3133 if (swapchain_count)
3135}
void wined3d_texture_cleanup(struct wined3d_texture *texture)
Definition: texture.c:1593
void wined3d_texture_sub_resources_destroyed(struct wined3d_texture *texture)
Definition: texture.c:1111

◆ adapter_no3d_destroy_unordered_access_view()

static void adapter_no3d_destroy_unordered_access_view ( struct wined3d_unordered_access_view *  view)
static

Definition at line 3207 of file directx.c.

3208{
3209 TRACE("view %p.\n", view);
3210}

◆ adapter_no3d_dispatch_compute()

static void adapter_no3d_dispatch_compute ( struct wined3d_device *  device,
const struct wined3d_state *  state,
const struct wined3d_dispatch_parameters *  parameters 
)
static

Definition at line 3251 of file directx.c.

3253{
3254 ERR("device %p, state %p, parameters %p.\n", device, state, parameters);
3255}
static int state
Definition: maze.c:121
static BYTE parameters[]
Definition: asn.c:558

◆ adapter_no3d_draw_primitive()

static void adapter_no3d_draw_primitive ( struct wined3d_device *  device,
const struct wined3d_state *  state,
const struct wined3d_draw_parameters *  parameters 
)
static

Definition at line 3245 of file directx.c.

3247{
3248 ERR("device %p, state %p, parameters %p.\n", device, state, parameters);
3249}

◆ adapter_no3d_flush_bo_address()

static void adapter_no3d_flush_bo_address ( struct wined3d_context *  context,
const struct wined3d_const_bo_address *  data,
size_t  size 
)
static

Definition at line 2993 of file directx.c.

2995{
2996}

◆ adapter_no3d_flush_context()

static void adapter_no3d_flush_context ( struct wined3d_context *  context)
static

Definition at line 3240 of file directx.c.

3241{
3242 TRACE("context %p.\n", context);
3243}

◆ adapter_no3d_get_wined3d_caps()

static void adapter_no3d_get_wined3d_caps ( const struct wined3d_adapter *  adapter,
struct wined3d_caps *  caps 
)
static

Definition at line 2898 of file directx.c.

2899{
2900}

◆ adapter_no3d_init_3d()

static HRESULT adapter_no3d_init_3d ( struct wined3d_device *  device)
static

Definition at line 2909 of file directx.c.

2910{
2911 struct wined3d_context *context_no3d;
2912 HRESULT hr;
2913
2914 TRACE("device %p.\n", device);
2915
2916 context_no3d = &wined3d_device_no3d(device)->context_no3d;
2917 if (FAILED(hr = wined3d_context_no3d_init(context_no3d, device->swapchains[0])))
2918 {
2919 WARN("Failed to initialise context.\n");
2920 return hr;
2921 }
2922
2923 if (!device_context_add(device, context_no3d))
2924 {
2925 ERR("Failed to add the newly created context to the context list.\n");
2926 wined3d_context_cleanup(context_no3d);
2927 return E_FAIL;
2928 }
2929
2930 TRACE("Initialised context %p.\n", context_no3d);
2931
2932 if (!(device->blitter = wined3d_cpu_blitter_create()))
2933 {
2934 ERR("Failed to create CPU blitter.\n");
2935 device_context_remove(device, context_no3d);
2936 wined3d_context_cleanup(context_no3d);
2937 return E_FAIL;
2938 }
2939
2940 return WINED3D_OK;
2941}
#define E_FAIL
Definition: ddrawi.h:102
void wined3d_context_cleanup(struct wined3d_context *context)
Definition: context.c:48
HRESULT wined3d_context_no3d_init(struct wined3d_context *context_no3d, struct wined3d_swapchain *swapchain)
Definition: context.c:122
BOOL device_context_add(struct wined3d_device *device, struct wined3d_context *context)
Definition: device.c:84
void device_context_remove(struct wined3d_device *device, struct wined3d_context *context)
Definition: device.c:118
struct wined3d_blitter * wined3d_cpu_blitter_create(void)
Definition: surface.c:1300

◆ adapter_no3d_map_bo_address()

static void * adapter_no3d_map_bo_address ( struct wined3d_context *  context,
const struct wined3d_bo_address *  data,
size_t  size,
uint32_t  map_flags 
)
static

Definition at line 2957 of file directx.c.

2959{
2960 if (data->buffer_object)
2961 {
2962 ERR("Unsupported buffer object %p.\n", data->buffer_object);
2963 return NULL;
2964 }
2965
2966 return data->addr;
2967}

◆ adapter_no3d_release_context()

static void adapter_no3d_release_context ( struct wined3d_context *  context)
static

Definition at line 2893 of file directx.c.

2894{
2895 TRACE("context %p.\n", context);
2896}

◆ adapter_no3d_uninit_3d()

static void adapter_no3d_uninit_3d ( struct wined3d_device *  device)
static

Definition at line 2943 of file directx.c.

2944{
2945 struct wined3d_context *context_no3d;
2946
2947 TRACE("device %p.\n", device);
2948
2949 context_no3d = &wined3d_device_no3d(device)->context_no3d;
2950 device->blitter->ops->blitter_destroy(device->blitter, NULL);
2952
2953 device_context_remove(device, context_no3d);
2954 wined3d_context_cleanup(context_no3d);
2955}
static void wined3d_cs_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id)
@ WINED3D_CS_QUEUE_DEFAULT

◆ adapter_no3d_unmap_bo_address()

static void adapter_no3d_unmap_bo_address ( struct wined3d_context *  context,
const struct wined3d_bo_address *  data,
unsigned int  range_count,
const struct wined3d_range *  ranges 
)
static

Definition at line 2969 of file directx.c.

2971{
2972 if (data->buffer_object)
2973 ERR("Unsupported buffer object %p.\n", data->buffer_object);
2974}

◆ enum_monitor_proc()

static BOOL CALLBACK enum_monitor_proc ( HMONITOR  monitor,
HDC  hdc,
RECT *  rect,
LPARAM  lparam 
)
static

Definition at line 1238 of file directx.c.

1239{
1242
1243 monitor_info.cbSize = sizeof(monitor_info);
1245 !lstrcmpiW(desc->device_name, monitor_info.szDevice))
1246 {
1247 desc->monitor = monitor;
1248 desc->desktop_rect = monitor_info.rcMonitor;
1249 desc->attached_to_desktop = TRUE;
1250 return FALSE;
1251 }
1252
1253 return TRUE;
1254}
@ lparam
Definition: SystemMenu.c:31
#define FALSE
Definition: types.h:117
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
HMONITOR monitor
Definition: wined3d.h:2155

Referenced by wined3d_output_get_desc().

◆ equal_display_mode()

static BOOL equal_display_mode ( const DEVMODEW *  mode1,
const DEVMODEW *  mode2 
)
static

Definition at line 1584 of file directx.c.

1585{
1586 if (mode1->dmFields & mode2->dmFields & DM_PELSWIDTH
1587 && mode1->dmPelsWidth != mode2->dmPelsWidth)
1588 return FALSE;
1589
1590 if (mode1->dmFields & mode2->dmFields & DM_PELSHEIGHT
1591 && mode1->dmPelsHeight != mode2->dmPelsHeight)
1592 return FALSE;
1593
1594 if (mode1->dmFields & mode2->dmFields & DM_BITSPERPEL
1595 && mode1->dmBitsPerPel != mode2->dmBitsPerPel)
1596 return FALSE;
1597
1598 if (mode1->dmFields & mode2->dmFields & DM_DISPLAYFLAGS
1599 && mode1->dmDisplayFlags != mode2->dmDisplayFlags)
1600 return FALSE;
1601
1602 if (mode1->dmFields & mode2->dmFields & DM_DISPLAYFREQUENCY
1603 && mode1->dmDisplayFrequency != mode2->dmDisplayFrequency)
1604 return FALSE;
1605
1606 if (mode1->dmFields & mode2->dmFields & DM_DISPLAYORIENTATION
1607 && mode1->dmDisplayOrientation != mode2->dmDisplayOrientation)
1608 return FALSE;
1609
1610 if (mode1->dmFields & mode2->dmFields & DM_POSITION
1611 && (mode1->dmPosition.x != mode2->dmPosition.x
1612 || mode1->dmPosition.y != mode2->dmPosition.y))
1613 return FALSE;
1614
1615 return TRUE;
1616}
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129
DWORD dmBitsPerPel
Definition: wingdi.h:2093
POINTL dmPosition
Definition: wingdi.h:2081
DWORD dmFields
Definition: wingdi.h:2068
DWORD dmDisplayOrientation
Definition: wingdi.h:2082
DWORD dmPelsWidth
Definition: wingdi.h:2094
DWORD dmDisplayFlags
Definition: wingdi.h:2097
DWORD dmPelsHeight
Definition: wingdi.h:2095
DWORD dmDisplayFrequency
Definition: wingdi.h:2100
#define DM_DISPLAYFREQUENCY
Definition: wingdi.h:1272
#define DM_PELSWIDTH
Definition: wingdi.h:1269
#define DM_POSITION
Definition: wingdi.h:1255
#define DM_BITSPERPEL
Definition: wingdi.h:1268
#define DM_DISPLAYORIENTATION
Definition: wingdi.h:1257
#define DM_PELSHEIGHT
Definition: wingdi.h:1270
#define DM_DISPLAYFLAGS
Definition: wingdi.h:1271

Referenced by wined3d_output_set_display_mode(), and wined3d_restore_display_modes().

◆ get_driver_version_info()

static const struct driver_version_information * get_driver_version_info ( enum wined3d_display_driver  driver,
enum wined3d_driver_model  driver_model 
)
static

Definition at line 666 of file directx.c.

668{
669 unsigned int i;
670
671 TRACE("Looking up version info for driver %#x, driver_model %#x.\n", driver, driver_model);
672
673 for (i = 0; i < ARRAY_SIZE(driver_version_table); ++i)
674 {
676
677 if (entry->driver == driver && (driver_model == DRIVER_MODEL_GENERIC
678 || entry->driver_model == driver_model))
679 {
680 TRACE("Found driver \"%s\", subversion %u, build %u.\n",
681 entry->driver_name, entry->subversion, entry->build);
682 return entry;
683 }
684 }
685 return NULL;
686}
#define ARRAY_SIZE(A)
Definition: main.h:20
uint32_t entry
Definition: isohybrid.c:63
enum wined3d_driver_model driver_model
Definition: directx.c:272
static WORD const char * driver
Definition: odbccp32.c:56
static const struct driver_version_information driver_version_table[]
Definition: directx.c:279

Referenced by wined3d_driver_info_init().

◆ mode_matches_filter()

static bool mode_matches_filter ( const struct wined3d_adapter *  adapter,
const struct wined3d_display_mode *  mode,
const struct wined3d_format *  format,
enum wined3d_scanline_ordering  scanline_ordering 
)
static

Definition at line 1314 of file directx.c.

1316{
1317 if (scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN
1318 && mode->scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN
1319 && scanline_ordering != mode->scanline_ordering)
1320 return false;
1321
1322 if (format->id == WINED3DFMT_UNKNOWN)
1323 {
1324 /* This is for d3d8, do not enumerate P8 here. */
1325 if (mode->format_id != WINED3DFMT_B5G6R5_UNORM && mode->format_id != WINED3DFMT_B8G8R8X8_UNORM)
1326 return false;
1327 }
1328 else
1329 {
1330 const struct wined3d_format *mode_format = wined3d_get_format(adapter,
1331 mode->format_id, WINED3D_BIND_RENDER_TARGET);
1332
1333 if (format->byte_count != mode_format->byte_count)
1334 return false;
1335 }
1336
1337 return true;
1338}
const struct wined3d_format * wined3d_get_format(const struct wined3d_adapter *adapter, enum wined3d_format_id format_id, unsigned int bind_flags)
Definition: utils.c:4428
GLenum mode
Definition: glext.h:6217
@ WINED3DFMT_B8G8R8X8_UNORM
Definition: wined3d.h:245
@ WINED3DFMT_UNKNOWN
Definition: wined3d.h:127
@ WINED3DFMT_B5G6R5_UNORM
Definition: wined3d.h:242
@ WINED3D_SCANLINE_ORDERING_UNKNOWN
Definition: wined3d.h:825
#define WINED3D_BIND_RENDER_TARGET
Definition: wined3d.h:914

Referenced by wined3d_output_get_mode(), and wined3d_output_get_mode_count().

◆ notification_thread_func()

static DWORD CALLBACK notification_thread_func ( void *  stop_event)
static

Definition at line 1104 of file directx.c.

1105{
1108 HRESULT hr;
1109
1110 SetThreadDescription(GetCurrentThread(), L"wined3d_budget_change_notification");
1111
1112 while (TRUE)
1113 {
1117 {
1120 if (SUCCEEDED(hr) && info.budget != notification->last_local_budget)
1121 {
1122 notification->last_local_budget = info.budget;
1123 SetEvent(notification->event);
1124 continue;
1125 }
1126
1129 if (SUCCEEDED(hr) && info.budget != notification->last_non_local_budget)
1130 {
1131 notification->last_non_local_budget = info.budget;
1132 SetEvent(notification->event);
1133 }
1134 }
1136
1138 break;
1139 }
1140
1141 return TRUE;
1142}
HRESULT WINAPI DECLSPEC_HOTPATCH SetThreadDescription(_In_ HANDLE hThread, _In_ PCWSTR lpThreadDescription)
#define L(x)
Definition: resources.c:13
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HANDLE stop_event
Definition: nfs41_daemon.c:55
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
HANDLE WINAPI GetCurrentThread(void)
Definition: proc.c:1195
#define WAIT_OBJECT_0
Definition: winbase.h:383
HRESULT CDECL wined3d_adapter_get_video_memory_info(const struct wined3d_adapter *adapter, unsigned int node_idx, enum wined3d_memory_segment_group group, struct wined3d_video_memory_info *info)
Definition: directx.c:1045
static struct list adapter_budget_change_notifications
Definition: directx.c:53
@ WINED3D_MEMORY_SEGMENT_GROUP_NON_LOCAL
Definition: wined3d.h:863
@ WINED3D_MEMORY_SEGMENT_GROUP_LOCAL
Definition: wined3d.h:862
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539

Referenced by wined3d_adapter_register_budget_change_notification().

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( winediag  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3d  )

◆ wined3d_adapter_cleanup()

void wined3d_adapter_cleanup ( struct wined3d_adapter *  adapter)

Definition at line 176 of file directx.c.

177{
178 D3DKMT_CLOSEADAPTER close_adapter_desc;
179 unsigned int output_idx;
180
181 for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
182 wined3d_output_cleanup(&adapter->outputs[output_idx]);
183 free(adapter->outputs);
184 free(adapter->formats);
185 close_adapter_desc.hAdapter = adapter->kmt_adapter;
186 D3DKMTCloseAdapter(&close_adapter_desc);
187}
D3DKMT_HANDLE hAdapter
Definition: d3dkmthk.h:156
NTSTATUS WINAPI D3DKMTCloseAdapter(const D3DKMT_CLOSEADAPTER *desc)
static void wined3d_output_cleanup(const struct wined3d_output *output)
Definition: directx.c:118

Referenced by adapter_gl_destroy(), adapter_no3d_destroy(), adapter_vk_destroy(), wined3d_adapter_no3d_create(), and wined3d_adapter_vk_init().

◆ wined3d_adapter_create()

static struct wined3d_adapter * wined3d_adapter_create ( unsigned int  ordinal,
DWORD  wined3d_creation_flags 
)
static

Definition at line 3459 of file directx.c.

3460{
3461 if (wined3d_creation_flags & WINED3D_NO3D)
3462 return wined3d_adapter_no3d_create(ordinal, wined3d_creation_flags);
3463
3465 return wined3d_adapter_vk_create(ordinal, wined3d_creation_flags);
3466
3467 return wined3d_adapter_gl_create(ordinal, wined3d_creation_flags);
3468}
struct wined3d_adapter * wined3d_adapter_gl_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
Definition: adapter_gl.c:5190
struct wined3d_adapter * wined3d_adapter_vk_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
Definition: adapter_vk.c:2555
enum wined3d_renderer renderer
static struct wined3d_adapter * wined3d_adapter_no3d_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
Definition: directx.c:3311
#define WINED3D_NO3D
Definition: wined3d.h:1323
@ WINED3D_RENDERER_VULKAN
Definition: wined3d.h:59

Referenced by wined3d_init().

◆ wined3d_adapter_create_output()

static BOOL wined3d_adapter_create_output ( struct wined3d_adapter *  adapter,
const WCHAR *  output_name 
)
static

Definition at line 3363 of file directx.c.

3364{
3365 HRESULT hr;
3366
3367 if (!wined3d_array_reserve((void **)&adapter->outputs, &adapter->outputs_size,
3368 adapter->output_count + 1, sizeof(*adapter->outputs)))
3369 return FALSE;
3370
3371 if (FAILED(hr = wined3d_output_init(&adapter->outputs[adapter->output_count],
3372 adapter->output_count, adapter, output_name)))
3373 {
3374 ERR("Failed to initialise output %s, hr %#lx.\n", wine_dbgstr_w(output_name), hr);
3375 return FALSE;
3376 }
3377
3378 ++adapter->output_count;
3379 TRACE("Initialised output %s.\n", wine_dbgstr_w(output_name));
3380 return TRUE;
3381}
BOOL wined3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size)
Definition: utils.c:6740
#define wine_dbgstr_w
Definition: kernel32.h:34
static char * output_name
Definition: widl.c:141
static HRESULT wined3d_output_init(struct wined3d_output *output, unsigned int ordinal, struct wined3d_adapter *adapter, const WCHAR *device_name)
Definition: directx.c:128

Referenced by wined3d_adapter_init().

◆ wined3d_adapter_get_identifier()

HRESULT CDECL wined3d_adapter_get_identifier ( const struct wined3d_adapter *  adapter,
uint32_t  flags,
struct wined3d_adapter_identifier *  identifier 
)

Definition at line 1785 of file directx.c.

1787{
1788 TRACE("adapter %p, flags %#x, identifier %p.\n", adapter, flags, identifier);
1789
1791
1792 wined3d_copy_name(identifier->driver, adapter->driver_info.name, identifier->driver_size);
1793 wined3d_copy_name(identifier->description, adapter->driver_info.description, identifier->description_size);
1794
1795 identifier->driver_version.u.HighPart = adapter->driver_info.version_high;
1796 identifier->driver_version.u.LowPart = adapter->driver_info.version_low;
1797 identifier->vendor_id = adapter->driver_info.vendor;
1798 identifier->device_id = adapter->driver_info.device;
1799 identifier->subsystem_id = 0;
1800 identifier->revision = 0;
1802 identifier->driver_uuid = adapter->driver_uuid;
1803 identifier->device_uuid = adapter->device_uuid;
1804 identifier->whql_level = (flags & WINED3DENUM_WHQL_LEVEL) ? 1 : 0;
1805 identifier->adapter_luid = adapter->luid;
1806 identifier->video_memory = min(~(SIZE_T)0, adapter->driver_info.vram_bytes);
1807 identifier->shared_system_memory = min(~(SIZE_T)0, adapter->driver_info.sysmem_bytes);
1808
1810
1811 return WINED3D_OK;
1812}
#define min(a, b)
Definition: monoChain.cc:55
unsigned int description_size
Definition: wined3d.h:1746
unsigned int driver_size
Definition: wined3d.h:1744
LARGE_INTEGER driver_version
Definition: wined3d.h:1747
ULONG_PTR SIZE_T
Definition: typedefs.h:80
struct _LARGE_INTEGER::@2747 u
static void wined3d_copy_name(char *dst, const char *src, unsigned int dst_size)
Definition: directx.c:728
static const GUID IID_D3DDEVICE_D3DUID
Definition: directx.c:57
#define WINED3DENUM_WHQL_LEVEL
Definition: wined3d.h:872

Referenced by d3d8_GetAdapterIdentifier(), d3d9_GetAdapterIdentifier(), d3d9_GetAdapterLUID(), ddraw7_GetAvailableVidMem(), ddraw7_GetDeviceIdentifier(), ddraw_enumerate_secondary_devices(), dxgi_adapter_CheckInterfaceSupport(), dxgi_adapter_get_adapter_info(), dxgi_adapter_get_desc(), and wined3d_adapter_get_video_memory_info().

◆ wined3d_adapter_get_output()

struct wined3d_output *CDECL wined3d_adapter_get_output ( const struct wined3d_adapter *  adapter,
unsigned int  idx 
)

Definition at line 1027 of file directx.c.

1029{
1030 TRACE("adapter %p, idx %u.\n", adapter, idx);
1031
1032 if (idx >= adapter->output_count)
1033 return NULL;
1034
1035 return &adapter->outputs[idx];
1036}
unsigned int idx
Definition: utils.c:40

Referenced by d3d8_init(), d3d9_init(), ddraw_enumerate_secondary_devices(), ddraw_init(), and dxgi_output_init().

◆ wined3d_adapter_get_output_count()

unsigned int CDECL wined3d_adapter_get_output_count ( const struct wined3d_adapter *  adapter)

Definition at line 1038 of file directx.c.

1039{
1040 TRACE("adapter %p, reporting %Iu outputs.\n", adapter, adapter->output_count);
1041
1042 return adapter->output_count;
1043}

Referenced by d3d8_init(), d3d9_caps_from_wined3dcaps(), d3d9_init(), and dxgi_adapter_EnumOutputs().

◆ wined3d_adapter_get_video_memory_info()

HRESULT CDECL wined3d_adapter_get_video_memory_info ( const struct wined3d_adapter *  adapter,
unsigned int  node_idx,
enum wined3d_memory_segment_group  group,
struct wined3d_video_memory_info *  info 
)

Definition at line 1045 of file directx.c.

1048{
1049 static unsigned int once;
1050 D3DKMT_QUERYVIDEOMEMORYINFO query_memory_info;
1051 struct wined3d_adapter_identifier adapter_id;
1053 HRESULT hr;
1054
1055 TRACE("adapter %p, node_idx %u, group %d, info %p.\n", adapter, node_idx, group, info);
1056
1058 {
1059 WARN("Invalid memory segment group %#x.\n", group);
1060 return E_INVALIDARG;
1061 }
1062
1063 query_memory_info.hProcess = NULL;
1064 query_memory_info.hAdapter = adapter->kmt_adapter;
1065 query_memory_info.PhysicalAdapterIndex = node_idx;
1067 status = D3DKMTQueryVideoMemoryInfo(&query_memory_info);
1068 if (status == STATUS_SUCCESS)
1069 {
1070 info->budget = query_memory_info.Budget;
1071 info->current_usage = query_memory_info.CurrentUsage;
1072 info->current_reservation = query_memory_info.CurrentReservation;
1073 info->available_reservation = query_memory_info.AvailableForReservation;
1074 return WINED3D_OK;
1075 }
1076
1077 /* D3DKMTQueryVideoMemoryInfo() failed, fallback to fake memory info */
1078 if (!once++)
1079 FIXME("Returning fake video memory info.\n");
1080
1081 if (node_idx)
1082 FIXME("Ignoring node index %u.\n", node_idx);
1083
1084 adapter_id.driver_size = 0;
1085 adapter_id.description_size = 0;
1086 if (FAILED(hr = wined3d_adapter_get_identifier(adapter, 0, &adapter_id)))
1087 return hr;
1088
1089 switch (group)
1090 {
1092 info->budget = adapter_id.video_memory;
1093 info->current_usage = adapter->vram_bytes_used;
1094 info->available_reservation = adapter_id.video_memory / 2;
1095 info->current_reservation = 0;
1096 break;
1098 memset(info, 0, sizeof(*info));
1099 break;
1100 }
1101 return WINED3D_OK;
1102}
LONG NTSTATUS
Definition: precomp.h:26
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_INVALIDARG
Definition: ddrawi.h:101
GLboolean GLuint group
Definition: glext.h:11120
#define memset(x, y, z)
Definition: compat.h:39
#define STATUS_SUCCESS
Definition: shellext.h:65
D3DKMT_MEMORY_SEGMENT_GROUP MemorySegmentGroup
Definition: d3dkmthk.h:709
Definition: ps.c:97
enum _D3DKMT_MEMORY_SEGMENT_GROUP D3DKMT_MEMORY_SEGMENT_GROUP
NTSTATUS WINAPI D3DKMTQueryVideoMemoryInfo(D3DKMT_QUERYVIDEOMEMORYINFO *desc)
HRESULT CDECL wined3d_adapter_get_identifier(const struct wined3d_adapter *adapter, uint32_t flags, struct wined3d_adapter_identifier *identifier)
Definition: directx.c:1785

Referenced by dxgi_adapter_QueryVideoMemoryInfo(), and notification_thread_func().

◆ wined3d_adapter_init()

BOOL wined3d_adapter_init ( struct wined3d_adapter *  adapter,
unsigned int  ordinal,
const LUID *  luid,
const struct wined3d_adapter_ops *  adapter_ops 
)

Definition at line 3383 of file directx.c.

3385{
3386 D3DKMT_OPENADAPTERFROMLUID open_adapter_desc;
3387 unsigned int output_idx = 0, primary_idx = 0;
3388 D3DKMT_CLOSEADAPTER close_adapter_desc;
3389 DISPLAY_DEVICEW display_device;
3390 BOOL ret = FALSE;
3391
3392 adapter->ordinal = ordinal;
3393 adapter->output_count = 0;
3394 adapter->outputs = NULL;
3395
3396 if (luid)
3397 {
3398 adapter->luid = *luid;
3399 }
3400 else
3401 {
3402 WARN("Allocating a random LUID.\n");
3403 if (!AllocateLocallyUniqueId(&adapter->luid))
3404 {
3405 ERR("Failed to allocate a LUID, error %#lx.\n", GetLastError());
3406 return FALSE;
3407 }
3408 }
3409 TRACE("adapter %p LUID %08lx:%08lx.\n", adapter, adapter->luid.HighPart, adapter->luid.LowPart);
3410
3411 open_adapter_desc.AdapterLuid = adapter->luid;
3412 if (D3DKMTOpenAdapterFromLuid(&open_adapter_desc))
3413 return FALSE;
3414 adapter->kmt_adapter = open_adapter_desc.hAdapter;
3415
3416 display_device.cb = sizeof(display_device);
3417 while (EnumDisplayDevicesW(NULL, output_idx++, &display_device, 0))
3418 {
3419 /* Detached outputs are not enumerated */
3420 if (!(display_device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP))
3421 continue;
3422
3423 if (display_device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)
3424 primary_idx = adapter->output_count;
3425
3426 if (!wined3d_adapter_create_output(adapter, display_device.DeviceName))
3427 goto done;
3428 }
3429 TRACE("Initialised %Iu outputs for adapter %p.\n", adapter->output_count, adapter);
3430
3431 /* Make the primary output first */
3432 if (primary_idx)
3433 {
3434 struct wined3d_output tmp = adapter->outputs[0];
3435 adapter->outputs[0] = adapter->outputs[primary_idx];
3436 adapter->outputs[0].ordinal = 0;
3437 adapter->outputs[primary_idx] = tmp;
3438 adapter->outputs[primary_idx].ordinal = primary_idx;
3439 }
3440
3441 memset(&adapter->driver_uuid, 0, sizeof(adapter->driver_uuid));
3442 memset(&adapter->device_uuid, 0, sizeof(adapter->device_uuid));
3443
3444 adapter->formats = NULL;
3445 adapter->adapter_ops = adapter_ops;
3446 ret = TRUE;
3447done:
3448 if (!ret)
3449 {
3450 for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
3451 wined3d_output_cleanup(&adapter->outputs[output_idx]);
3452 free(adapter->outputs);
3453 close_adapter_desc.hAdapter = adapter->kmt_adapter;
3454 D3DKMTCloseAdapter(&close_adapter_desc);
3455 }
3456 return ret;
3457}
BOOL WINAPI AllocateLocallyUniqueId(PLUID Luid)
Definition: security.c:1218
D3DKMT_HANDLE hAdapter
Definition: d3dkmthk.h:135
WCHAR DeviceName[32]
Definition: wingdi.h:3264
DWORD StateFlags
Definition: wingdi.h:3266
BOOL WINAPI EnumDisplayDevicesW(LPCWSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags)
Definition: display.c:78
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
NTSTATUS WINAPI D3DKMTOpenAdapterFromLuid(D3DKMT_OPENADAPTERFROMLUID *desc)
static BOOL wined3d_adapter_create_output(struct wined3d_adapter *adapter, const WCHAR *output_name)
Definition: directx.c:3363
#define DISPLAY_DEVICE_PRIMARY_DEVICE
Definition: wingdi.h:1398
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
Definition: wingdi.h:1396

Referenced by wined3d_adapter_gl_init(), wined3d_adapter_no3d_create(), and wined3d_adapter_vk_init().

◆ wined3d_adapter_no3d_create()

static struct wined3d_adapter * wined3d_adapter_no3d_create ( unsigned int  ordinal,
unsigned int  wined3d_creation_flags 
)
static

Definition at line 3311 of file directx.c.

3312{
3313 struct wined3d_adapter *adapter;
3314 LUID primary_luid, *luid = NULL;
3315
3316 static const struct wined3d_gpu_description gpu_description =
3317 {
3318 HW_VENDOR_SOFTWARE, CARD_WINE, "WineD3D DirectDraw Emulation", DRIVER_WINE, 128,
3319 };
3320
3321 TRACE("ordinal %u, wined3d_creation_flags %#x.\n", ordinal, wined3d_creation_flags);
3322
3323 if (!(adapter = calloc(1, sizeof(*adapter))))
3324 return NULL;
3325
3326 if (ordinal == 0 && wined3d_get_primary_adapter_luid(&primary_luid))
3327 luid = &primary_luid;
3328
3330 {
3331 free(adapter);
3332 return NULL;
3333 }
3334
3336 {
3338 free(adapter);
3339 return NULL;
3340 }
3341
3342 if (!wined3d_driver_info_init(&adapter->driver_info, &gpu_description, WINED3D_FEATURE_LEVEL_NONE, 0, 0))
3343 {
3345 free(adapter);
3346 return NULL;
3347 }
3348 adapter->vram_bytes_used = 0;
3349 TRACE("Emulating 0x%s bytes of video ram.\n", wine_dbgstr_longlong(adapter->driver_info.vram_bytes));
3350
3351 adapter->vertex_pipe = &none_vertex_pipe;
3352 adapter->fragment_pipe = &none_fragment_pipe;
3353 adapter->misc_state_template = misc_state_template_no3d;
3354 adapter->shader_backend = &none_shader_backend;
3355
3356 wined3d_adapter_no3d_init_d3d_info(adapter, wined3d_creation_flags);
3357
3358 TRACE("Created adapter %p.\n", adapter);
3359
3360 return adapter;
3361}
const struct wined3d_shader_backend_ops none_shader_backend
Definition: shader.c:2060
BOOL wined3d_get_primary_adapter_luid(LUID *luid)
Definition: utils.c:5761
BOOL wined3d_adapter_no3d_init_format_info(struct wined3d_adapter *adapter)
Definition: utils.c:4135
const struct wined3d_vertex_pipe_ops none_vertex_pipe
Definition: ffp_gl.c:1489
const struct wined3d_fragment_pipe_ops none_fragment_pipe
Definition: ffp_gl.c:1514
static const struct wined3d_adapter_ops wined3d_adapter_no3d_ops
Definition: directx.c:3263
static void wined3d_adapter_no3d_init_d3d_info(struct wined3d_adapter *adapter, unsigned int wined3d_creation_flags)
Definition: directx.c:3302
static const struct wined3d_state_entry_template misc_state_template_no3d[]
Definition: directx.c:2803
BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid, const struct wined3d_adapter_ops *adapter_ops)
Definition: directx.c:3383
bool wined3d_driver_info_init(struct wined3d_driver_info *driver_info, const struct wined3d_gpu_description *gpu_desc, enum wined3d_feature_level feature_level, UINT64 vram_bytes, UINT64 sysmem_bytes)
Definition: directx.c:740
@ WINED3D_FEATURE_LEVEL_NONE
Definition: wined3d.h:99
@ HW_VENDOR_SOFTWARE
@ DRIVER_WINE
@ CARD_WINE

Referenced by wined3d_adapter_create().

◆ wined3d_adapter_no3d_init_d3d_info()

static void wined3d_adapter_no3d_init_d3d_info ( struct wined3d_adapter *  adapter,
unsigned int  wined3d_creation_flags 
)
static

Definition at line 3302 of file directx.c.

3303{
3304 struct wined3d_d3d_info *d3d_info = &adapter->d3d_info;
3305
3307 d3d_info->unconditional_npot = true;
3309}
enum wined3d_feature_level feature_level
uint32_t wined3d_creation_flags
uint32_t unconditional_npot
@ WINED3D_FEATURE_LEVEL_5
Definition: wined3d.h:100

Referenced by wined3d_adapter_no3d_create().

◆ wined3d_adapter_register_budget_change_notification()

HRESULT CDECL wined3d_adapter_register_budget_change_notification ( const struct wined3d_adapter *  adapter,
HANDLE  event,
DWORD *  cookie 
)

Definition at line 1144 of file directx.c.

1146{
1147 static DWORD cookie_counter;
1148 static BOOL wrapped;
1150 BOOL found = FALSE;
1151
1152 new_notification = calloc(1, sizeof(*new_notification));
1153 if (!new_notification)
1154 return E_OUTOFMEMORY;
1155
1157 new_notification->adapter = adapter;
1158 new_notification->event = event;
1159 new_notification->cookie = cookie_counter++;
1160 if (cookie_counter < new_notification->cookie)
1161 wrapped = TRUE;
1162 if (wrapped)
1163 {
1164 while (TRUE)
1165 {
1168 {
1169 if (notification->cookie == new_notification->cookie)
1170 {
1171 found = TRUE;
1172 break;
1173 }
1174 }
1175
1176 if (!found)
1177 break;
1178
1179 new_notification->cookie = cookie_counter++;
1180 }
1181 }
1182
1183 *cookie = new_notification->cookie;
1185
1187 {
1191 }
1193 return WINED3D_OK;
1194}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
static LONG cookie_counter
Definition: systemclock.c:28
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: cookie.c:34
const struct wined3d_adapter * adapter
Definition: directx.c:45
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587
static DWORD CALLBACK notification_thread_func(void *stop_event)
Definition: directx.c:1104
static HANDLE notification_thread_stop_event
Definition: directx.c:54
static HANDLE notification_thread
Definition: directx.c:54

Referenced by dxgi_adapter_RegisterVideoMemoryBudgetChangeNotificationEvent().

◆ wined3d_adapter_unregister_budget_change_notification()

HRESULT CDECL wined3d_adapter_unregister_budget_change_notification ( DWORD  cookie)

Definition at line 1196 of file directx.c.

1197{
1199 HANDLE thread, thread_stop_event;
1200
1204 {
1205 if (notification->cookie == cookie)
1206 {
1207 list_remove(&notification->entry);
1209 break;
1210 }
1211 }
1212
1214 {
1216 return WINED3D_OK;
1217 }
1218
1220 thread_stop_event = notification_thread_stop_event;
1224 SetEvent(thread_stop_event);
1227 CloseHandle(thread_stop_event);
1228 return WINED3D_OK;
1229}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static HANDLE thread
Definition: service.c:33
#define CloseHandle
Definition: compat.h:739
#define INFINITE
Definition: serial.h:102

Referenced by dxgi_adapter_UnregisterVideoMemoryBudgetChangeNotification().

◆ wined3d_calculate_format_pitch()

unsigned int CDECL wined3d_calculate_format_pitch ( const struct wined3d_adapter *  adapter,
enum wined3d_format_id  format_id,
unsigned int  width 
)

Definition at line 2197 of file directx.c.

2199{
2200 unsigned int row_pitch, slice_pitch;
2201
2202 TRACE("adapter %p, format_id %s, width %u.\n", adapter, debug_d3dformat(format_id), width);
2203
2205 1, width, 1, &row_pitch, &slice_pitch);
2206
2207 return row_pitch;
2208}
const char * debug_d3dformat(enum wined3d_format_id format_id)
Definition: utils.c:4605
void wined3d_format_calculate_pitch(const struct wined3d_format *format, unsigned int alignment, unsigned int width, unsigned int height, unsigned int *row_pitch, unsigned int *slice_pitch)
Definition: utils.c:4489
GLint GLint GLsizei width
Definition: gl.h:1546
static UINT format_id
Definition: clipboard.c:1455

Referenced by ddraw7_GetAvailableVidMem(), and ddraw_texture_init().

◆ wined3d_check_depth_stencil_format()

static BOOL wined3d_check_depth_stencil_format ( const struct wined3d_adapter *  adapter,
const struct wined3d_format *  adapter_format,
const struct wined3d_format *  ds_format,
enum wined3d_gl_resource_type  gl_type 
)
static

Definition at line 1941 of file directx.c.

1944{
1945 if (!ds_format->depth_size && !ds_format->stencil_size)
1946 return FALSE;
1947
1948 return adapter->adapter_ops->adapter_check_format(adapter, adapter_format, NULL, ds_format);
1949}

Referenced by wined3d_check_device_format().

◆ wined3d_check_depth_stencil_match()

HRESULT CDECL wined3d_check_depth_stencil_match ( const struct wined3d_adapter *  adapter,
enum wined3d_device_type  device_type,
enum wined3d_format_id  adapter_format_id,
enum wined3d_format_id  render_target_format_id,
enum wined3d_format_id  depth_stencil_format_id 
)

Definition at line 1859 of file directx.c.

1862{
1863 const struct wined3d_format *rt_format;
1864 const struct wined3d_format *ds_format;
1865
1866 TRACE("adapter %p, device_type %s, adapter_format %s, render_target_format %s, "
1867 "depth_stencil_format %s.\n",
1869 debug_d3dformat(render_target_format_id), debug_d3dformat(depth_stencil_format_id));
1870
1871 rt_format = wined3d_get_format(adapter, render_target_format_id, WINED3D_BIND_RENDER_TARGET);
1872 ds_format = wined3d_get_format(adapter, depth_stencil_format_id, WINED3D_BIND_DEPTH_STENCIL);
1873
1875 {
1876 WARN("Format %s is not render target format.\n", debug_d3dformat(rt_format->id));
1878 }
1880 {
1881 WARN("Format %s is not depth/stencil format.\n", debug_d3dformat(ds_format->id));
1883 }
1884
1885 if (adapter->adapter_ops->adapter_check_format(adapter, NULL, rt_format, ds_format))
1886 {
1887 TRACE("Formats match.\n");
1888 return WINED3D_OK;
1889 }
1890
1891 TRACE("Unsupported format pair: %s and %s.\n",
1892 debug_d3dformat(render_target_format_id),
1893 debug_d3dformat(depth_stencil_format_id));
1894
1896}
const char * debug_d3ddevicetype(enum wined3d_device_type device_type)
Definition: utils.c:4781
unsigned int caps[WINED3D_GL_RES_TYPE_COUNT]
enum wined3d_format_id id
#define WINED3D_BIND_DEPTH_STENCIL
Definition: wined3d.h:915
@ WINED3D_GL_RES_TYPE_TEX_2D
#define WINED3D_FORMAT_CAP_DEPTH_STENCIL
#define WINED3D_FORMAT_CAP_RENDERTARGET

Referenced by d3d8_CheckDepthStencilMatch(), and d3d9_CheckDepthStencilMatch().

◆ wined3d_check_device_format()

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 at line 1972 of file directx.c.

1976{
1977 const struct wined3d_format *adapter_format, *format;
1978 enum wined3d_gl_resource_type gl_type, gl_type_end;
1979 unsigned int format_caps = 0, format_attrs = 0;
1980 BOOL mipmap_gen_supported = TRUE;
1981 unsigned int allowed_bind_flags;
1982 uint32_t allowed_usage;
1983
1984 TRACE("wined3d %p, adapter %p, device_type %s, adapter_format %s, usage %s, "
1985 "bind_flags %s, resource_type %s, check_format %s.\n",
1988 debug_d3dresourcetype(resource_type), debug_d3dformat(check_format_id));
1989
1990 adapter_format = wined3d_get_format(adapter, adapter_format_id, WINED3D_BIND_RENDER_TARGET);
1991 format = wined3d_get_format(adapter, check_format_id, bind_flags);
1992
1993 switch (resource_type)
1994 {
1995 case WINED3D_RTYPE_NONE:
1996 allowed_usage = 0;
1997 allowed_bind_flags = WINED3D_BIND_RENDER_TARGET
2001 gl_type_end = WINED3D_GL_RES_TYPE_TEX_3D;
2002 break;
2003
2005 allowed_usage = WINED3DUSAGE_DYNAMIC
2014 allowed_bind_flags = WINED3D_BIND_SHADER_RESOURCE
2016 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_1D;
2017 break;
2018
2021 if (bind_flags & WINED3D_BIND_RENDER_TARGET)
2022 allowed_usage |= WINED3DUSAGE_QUERY_SRGBWRITE;
2023 allowed_bind_flags = WINED3D_BIND_RENDER_TARGET
2026 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_2D;
2027 if (!(bind_flags & WINED3D_BIND_SHADER_RESOURCE))
2028 {
2030 {
2031 TRACE("%s is not supported for plain surfaces.\n", debug_d3dformat(format->id));
2033 }
2034 break;
2035 }
2036 allowed_usage |= WINED3DUSAGE_DYNAMIC
2046 allowed_bind_flags |= WINED3D_BIND_SHADER_RESOURCE;
2048 {
2049 allowed_usage &= ~WINED3DUSAGE_QUERY_LEGACYBUMPMAP;
2050 allowed_bind_flags &= ~WINED3D_BIND_DEPTH_STENCIL;
2051 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_CUBE;
2052 }
2053 break;
2054
2056 allowed_usage = WINED3DUSAGE_DYNAMIC
2064 allowed_bind_flags = WINED3D_BIND_SHADER_RESOURCE
2066 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_3D;
2067 break;
2068
2071 {
2072 TRACE("Requested WINED3D_RTYPE_BUFFER, but format %s is typeless.\n", debug_d3dformat(check_format_id));
2074 }
2075
2076 allowed_usage = WINED3DUSAGE_DYNAMIC;
2077 allowed_bind_flags = WINED3D_BIND_SHADER_RESOURCE
2081 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_BUFFER;
2082 break;
2083
2084 default:
2085 FIXME("Unhandled resource type %s.\n", debug_d3dresourcetype(resource_type));
2087 }
2088
2089 if ((usage & allowed_usage) != usage)
2090 {
2091 TRACE("Requested usage %#x, but resource type %s only allows %#x.\n",
2092 usage, debug_d3dresourcetype(resource_type), allowed_usage);
2094 }
2095
2096 if ((bind_flags & allowed_bind_flags) != bind_flags)
2097 {
2098 TRACE("Requested bind flags %s, but resource type %s only allows %s.\n",
2099 wined3d_debug_bind_flags(bind_flags), debug_d3dresourcetype(resource_type),
2100 wined3d_debug_bind_flags(allowed_bind_flags));
2102 }
2103
2104 if (bind_flags & WINED3D_BIND_SHADER_RESOURCE)
2105 format_caps |= WINED3D_FORMAT_CAP_TEXTURE;
2106 if (bind_flags & WINED3D_BIND_RENDER_TARGET)
2107 format_caps |= WINED3D_FORMAT_CAP_RENDERTARGET;
2108 if (bind_flags & WINED3D_BIND_DEPTH_STENCIL)
2109 format_caps |= WINED3D_FORMAT_CAP_DEPTH_STENCIL;
2110 if (bind_flags & WINED3D_BIND_UNORDERED_ACCESS)
2112 if (bind_flags & WINED3D_BIND_VERTEX_BUFFER)
2114 if (bind_flags & WINED3D_BIND_INDEX_BUFFER)
2115 format_caps |= WINED3D_FORMAT_CAP_INDEX_BUFFER;
2116
2118 format_caps |= WINED3D_FORMAT_CAP_FILTERING;
2122 format_caps |= WINED3D_FORMAT_CAP_SRGB_READ;
2124 format_caps |= WINED3D_FORMAT_CAP_SRGB_WRITE;
2126 format_caps |= WINED3D_FORMAT_CAP_VTF;
2128 format_attrs |= WINED3D_FORMAT_ATTR_BUMPMAP;
2129
2130 if ((format_caps & WINED3D_FORMAT_CAP_TEXTURE) && (wined3d->flags & WINED3D_NO3D))
2131 {
2132 TRACE("Requested texturing support, but wined3d was created with WINED3D_NO3D.\n");
2134 }
2135
2136 if ((format->attrs & format_attrs) != format_attrs)
2137 {
2138 TRACE("Requested format attributes %#x, but format %s only has %#x.\n",
2139 format_attrs, debug_d3dformat(check_format_id), format->attrs);
2141 }
2142
2143 for (; gl_type <= gl_type_end; ++gl_type)
2144 {
2145 unsigned int caps = format->caps[gl_type];
2146
2147 if (gl_type == WINED3D_GL_RES_TYPE_TEX_2D && !(bind_flags & WINED3D_BIND_SHADER_RESOURCE))
2149
2150 if ((bind_flags & WINED3D_BIND_RENDER_TARGET)
2151 && !adapter->adapter_ops->adapter_check_format(adapter, adapter_format, format, NULL))
2152 {
2153 TRACE("Requested WINED3D_BIND_RENDER_TARGET, but format %s is not supported for render targets.\n",
2154 debug_d3dformat(check_format_id));
2156 }
2157
2158 /* 3D depth / stencil textures are never supported. */
2159 if (bind_flags == WINED3D_BIND_DEPTH_STENCIL && gl_type == WINED3D_GL_RES_TYPE_TEX_3D)
2160 continue;
2161
2162 if ((bind_flags & WINED3D_BIND_DEPTH_STENCIL)
2163 && !wined3d_check_depth_stencil_format(adapter, adapter_format, format, gl_type))
2164 {
2165 TRACE("Requested WINED3D_BIND_DEPTH_STENCIL, but format %s is not supported for depth/stencil buffers.\n",
2166 debug_d3dformat(check_format_id));
2168 }
2169
2171 {
2172 TRACE("Requested WINED3D_BIND_UNORDERED_ACCESS, but format %s is typeless.\n",
2173 debug_d3dformat(check_format_id));
2175 }
2176
2177 if ((caps & format_caps) != format_caps)
2178 {
2179 TRACE("Requested format caps %#x, but format %s only has %#x.\n",
2180 format_caps, debug_d3dformat(check_format_id), caps);
2182 }
2183
2185 mipmap_gen_supported = FALSE;
2186 }
2187
2188 if ((usage & WINED3DUSAGE_QUERY_GENMIPMAP) && !mipmap_gen_supported)
2189 {
2190 TRACE("No WINED3DUSAGE_AUTOGENMIPMAP support, returning WINED3DOK_NOAUTOGEN.\n");
2191 return WINED3DOK_NOMIPGEN;
2192 }
2193
2194 return WINED3D_OK;
2195}
UINT32 uint32_t
Definition: types.h:75
const char * debug_d3dusage(uint32_t usage)
Definition: utils.c:4895
const char * wined3d_debug_bind_flags(uint32_t bind_flags)
Definition: utils.c:4845
const char * debug_d3dresourcetype(enum wined3d_resource_type resource_type)
Definition: utils.c:4992
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
unsigned int flags
static BOOL wined3d_check_depth_stencil_format(const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, const struct wined3d_format *ds_format, enum wined3d_gl_resource_type gl_type)
Definition: directx.c:1941
static BOOL wined3d_check_surface_format(const struct wined3d_format *format)
Definition: directx.c:1951
#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP
Definition: wined3d.h:942
#define WINED3DUSAGE_LEGACY_CUBEMAP
Definition: wined3d.h:934
#define WINED3D_BIND_VERTEX_BUFFER
Definition: wined3d.h:909
@ WINED3D_RTYPE_TEXTURE_2D
Definition: wined3d.h:720
@ WINED3D_RTYPE_TEXTURE_1D
Definition: wined3d.h:719
@ WINED3D_RTYPE_NONE
Definition: wined3d.h:717
@ WINED3D_RTYPE_BUFFER
Definition: wined3d.h:718
@ WINED3D_RTYPE_TEXTURE_3D
Definition: wined3d.h:721
#define WINED3D_BIND_UNORDERED_ACCESS
Definition: wined3d.h:916
#define WINED3DUSAGE_QUERY_SRGBREAD
Definition: wined3d.h:945
#define WINED3DUSAGE_QUERY_FILTER
Definition: wined3d.h:943
#define WINED3D_BIND_SHADER_RESOURCE
Definition: wined3d.h:912
#define WINED3DUSAGE_QUERY_WRAPANDMIP
Definition: wined3d.h:948
#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING
Definition: wined3d.h:944
#define WINED3DUSAGE_QUERY_VERTEXTEXTURE
Definition: wined3d.h:947
#define WINED3DUSAGE_QUERY_GENMIPMAP
Definition: wined3d.h:941
#define WINED3DUSAGE_DYNAMIC
Definition: wined3d.h:924
#define WINED3DUSAGE_QUERY_SRGBWRITE
Definition: wined3d.h:946
#define WINED3D_BIND_INDEX_BUFFER
Definition: wined3d.h:910
#define WINED3DOK_NOMIPGEN
Definition: wined3d.h:37
#define WINED3DUSAGE_SOFTWAREPROCESSING
Definition: wined3d.h:919
#define WINED3D_FORMAT_CAP_VERTEX_ATTRIBUTE
static BOOL wined3d_format_is_typeless(const struct wined3d_format *format)
#define WINED3D_FORMAT_CAP_UNORDERED_ACCESS
#define WINED3D_FORMAT_CAP_TEXTURE
#define WINED3D_FORMAT_CAP_INDEX_BUFFER
#define WINED3D_FORMAT_CAP_SRGB_WRITE
#define WINED3D_FORMAT_CAP_FILTERING
wined3d_gl_resource_type
@ WINED3D_GL_RES_TYPE_TEX_3D
@ WINED3D_GL_RES_TYPE_TEX_CUBE
@ WINED3D_GL_RES_TYPE_BUFFER
@ WINED3D_GL_RES_TYPE_RB
@ WINED3D_GL_RES_TYPE_TEX_1D
#define WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING
#define WINED3D_FORMAT_CAP_VTF
#define WINED3D_FORMAT_CAP_SRGB_READ
#define WINED3D_FORMAT_CAP_GEN_MIPMAP
#define WINED3D_FORMAT_ATTR_BUMPMAP

Referenced by d3d11_device_CheckFormatSupport(), d3d7_EnumZBufferFormats(), d3d8_CheckDeviceFormat(), d3d9_CheckDeviceFormat(), d3d9_texture_init(), d3d_device2_EnumTextureFormats(), d3d_device7_EnumTextureFormats(), ddraw7_GetFourCCCodes(), ddraw_surface_create(), and wined3d_check_device_type().

◆ wined3d_check_device_format_conversion()

HRESULT CDECL wined3d_check_device_format_conversion ( const struct wined3d_output *  output,
enum wined3d_device_type  device_type,
enum wined3d_format_id  src_format_id,
enum wined3d_format_id  dst_format_id 
)

Definition at line 2210 of file directx.c.

2213{
2214 const struct wined3d_format *src_format = wined3d_get_format(output->adapter, src_format_id, 0);
2215 const struct wined3d_format *dst_format = wined3d_get_format(output->adapter, dst_format_id, 0);
2216
2217 TRACE("output %p, device_type %s, src_format %s, dst_format %s.\n",
2218 output, debug_d3ddevicetype(device_type), debug_d3dformat(src_format_id),
2219 debug_d3dformat(dst_format_id));
2220
2222 {
2223 TRACE("Source format does not support blitting.\n");
2225 }
2226
2228 {
2229 TRACE("Destination format does not support blitting.\n");
2231 }
2232
2233 /* Source cannot be depth/stencil (although it can be YUV or compressed,
2234 * and AMD also allows blitting from luminance formats). */
2235 if (src_format->depth_size || src_format->stencil_size)
2236 {
2237 TRACE("Source format is depth/stencil.\n");
2239 }
2240
2241 /* The destination format must be a simple RGB format (no luminance, YUV,
2242 * compression, etc.) All such formats have a nonzero red_size; the only
2243 * exceptions are X24G8 (not supported in d3d9) and A8 (which, it turns out,
2244 * no vendor reports support for converting to). */
2245 if (!dst_format->red_size)
2246 {
2247 TRACE("Destination format is not a simple RGB format.\n");
2249 }
2250
2251 return WINED3D_OK;
2252}
static const char * dst_format
Definition: dib.c:1339
struct wined3d_adapter * adapter
#define WINED3D_FORMAT_CAP_BLIT

Referenced by d3d9_CheckDeviceFormatConversion(), and wined3d_check_device_type().

◆ wined3d_check_device_multisample_type()

HRESULT CDECL wined3d_check_device_multisample_type ( const struct wined3d_adapter *  adapter,
enum wined3d_device_type  device_type,
enum wined3d_format_id  surface_format_id,
BOOL  windowed,
enum wined3d_multisample_type  multisample_type,
unsigned int *  quality_levels 
)

Definition at line 1898 of file directx.c.

1901{
1902 const struct wined3d_format *format;
1904
1905 TRACE("adapter %p, device_type %s, surface_format %s, "
1906 "windowed %#x, multisample_type %#x, quality_levels %p.\n",
1908 windowed, multisample_type, quality_levels);
1909
1910 if (surface_format_id == WINED3DFMT_UNKNOWN)
1912 if (multisample_type < WINED3D_MULTISAMPLE_NONE)
1914 if (multisample_type > WINED3D_MULTISAMPLE_16_SAMPLES)
1915 {
1916 FIXME("multisample_type %u not handled yet.\n", multisample_type);
1918 }
1919
1920 format = wined3d_get_format(adapter, surface_format_id, 0);
1921
1922 if (multisample_type && !(format->multisample_types & 1u << (multisample_type - 1)))
1924
1925 if (SUCCEEDED(hr) || (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE && format->multisample_types))
1926 {
1927 if (quality_levels)
1928 {
1929 if (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE)
1930 *quality_levels = wined3d_popcount(format->multisample_types);
1931 else
1932 *quality_levels = 1;
1933 }
1934 return WINED3D_OK;
1935 }
1936
1937 TRACE("Returning not supported.\n");
1938 return hr;
1939}
@ WINED3D_MULTISAMPLE_NON_MASKABLE
Definition: wined3d.h:574
@ WINED3D_MULTISAMPLE_16_SAMPLES
Definition: wined3d.h:589
@ WINED3D_MULTISAMPLE_NONE
Definition: wined3d.h:573
#define WINED3DERR_INVALIDCALL
Definition: wined3d.h:44
static unsigned int wined3d_popcount(unsigned int x)

Referenced by d3d11_device_CheckFormatSupport(), d3d11_device_CheckMultisampleQualityLevels(), d3d8_CheckDeviceFormat(), d3d8_CheckDeviceMultiSampleType(), d3d9_CheckDeviceFormat(), and d3d9_CheckDeviceMultiSampleType().

◆ wined3d_check_device_type()

HRESULT CDECL wined3d_check_device_type ( const struct wined3d *  wined3d,
struct wined3d_output *  output,
enum wined3d_device_type  device_type,
enum wined3d_format_id  display_format,
enum wined3d_format_id  backbuffer_format,
BOOL  windowed 
)

Definition at line 2254 of file directx.c.

2258{
2259 BOOL present_conversion = wined3d->flags & WINED3D_PRESENT_CONVERSION;
2260
2261 TRACE("wined3d %p, output %p, device_type %s, display_format %s, backbuffer_format %s, windowed %#x.\n",
2262 wined3d, output, debug_d3ddevicetype(device_type), debug_d3dformat(display_format),
2263 debug_d3dformat(backbuffer_format), windowed);
2264
2265 /* The task of this function is to check whether a certain display / backbuffer format
2266 * combination is available on the given output. In fullscreen mode microsoft specified
2267 * that the display format shouldn't provide alpha and that ignoring alpha the backbuffer
2268 * and display format should match exactly.
2269 * In windowed mode format conversion can occur and this depends on the driver. */
2270
2271 /* There are only 4 display formats. */
2272 if (!(display_format == WINED3DFMT_B5G6R5_UNORM
2273 || display_format == WINED3DFMT_B5G5R5X1_UNORM
2274 || display_format == WINED3DFMT_B8G8R8X8_UNORM
2275 || display_format == WINED3DFMT_B10G10R10A2_UNORM))
2276 {
2277 TRACE("Format %s is not supported as display format.\n", debug_d3dformat(display_format));
2279 }
2280
2281 if (!windowed)
2282 {
2283 /* If the requested display format is not available, don't continue. */
2284 if (!wined3d_output_get_mode_count(output, display_format,
2286 {
2287 TRACE("No available modes for display format %s.\n", debug_d3dformat(display_format));
2289 }
2290
2291 present_conversion = FALSE;
2292 }
2293 else if (display_format == WINED3DFMT_B10G10R10A2_UNORM)
2294 {
2295 /* WINED3DFMT_B10G10R10A2_UNORM is only allowed in fullscreen mode. */
2296 TRACE("Unsupported format combination %s / %s in windowed mode.\n",
2297 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2299 }
2300
2301 if (present_conversion)
2302 {
2303 /* Use the display format as back buffer format if the latter is
2304 * WINED3DFMT_UNKNOWN. */
2305 if (backbuffer_format == WINED3DFMT_UNKNOWN)
2306 backbuffer_format = display_format;
2307
2308 if (FAILED(wined3d_check_device_format_conversion(output, device_type, backbuffer_format,
2309 display_format)))
2310 {
2311 TRACE("Format conversion from %s to %s not supported.\n",
2312 debug_d3dformat(backbuffer_format), debug_d3dformat(display_format));
2314 }
2315 }
2316 else
2317 {
2318 /* When format conversion from the back buffer format to the display
2319 * format is not allowed, only a limited number of combinations are
2320 * valid. */
2321
2322 if (display_format == WINED3DFMT_B5G6R5_UNORM && backbuffer_format != WINED3DFMT_B5G6R5_UNORM)
2323 {
2324 TRACE("Unsupported format combination %s / %s.\n",
2325 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2327 }
2328
2329 if (display_format == WINED3DFMT_B5G5R5X1_UNORM
2330 && !(backbuffer_format == WINED3DFMT_B5G5R5X1_UNORM || backbuffer_format == WINED3DFMT_B5G5R5A1_UNORM))
2331 {
2332 TRACE("Unsupported format combination %s / %s.\n",
2333 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2335 }
2336
2337 if (display_format == WINED3DFMT_B8G8R8X8_UNORM
2338 && !(backbuffer_format == WINED3DFMT_B8G8R8X8_UNORM || backbuffer_format == WINED3DFMT_B8G8R8A8_UNORM))
2339 {
2340 TRACE("Unsupported format combination %s / %s.\n",
2341 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2343 }
2344
2345 if (display_format == WINED3DFMT_B10G10R10A2_UNORM
2346 && backbuffer_format != WINED3DFMT_B10G10R10A2_UNORM)
2347 {
2348 TRACE("Unsupported format combination %s / %s.\n",
2349 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2351 }
2352 }
2353
2354 /* Validate that the back buffer format is usable for render targets. */
2357 backbuffer_format)))
2358 {
2359 TRACE("Format %s not allowed for render targets.\n", debug_d3dformat(backbuffer_format));
2361 }
2362
2363 return WINED3D_OK;
2364}
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_output_get_mode_count(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, bool cached)
Definition: directx.c:1341
HRESULT CDECL wined3d_check_device_format_conversion(const struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id src_format_id, enum wined3d_format_id dst_format_id)
Definition: directx.c:2210
@ WINED3DFMT_B8G8R8A8_UNORM
Definition: wined3d.h:244
@ WINED3DFMT_B5G5R5X1_UNORM
Definition: wined3d.h:129
@ WINED3DFMT_B10G10R10A2_UNORM
Definition: wined3d.h:135
@ WINED3DFMT_B5G5R5A1_UNORM
Definition: wined3d.h:243
#define WINED3D_PRESENT_CONVERSION
Definition: wined3d.h:1324

Referenced by d3d8_CheckDeviceType(), and d3d9_CheckDeviceType().

◆ wined3d_check_surface_format()

static BOOL wined3d_check_surface_format ( const struct wined3d_format *  format)
static

Definition at line 1951 of file directx.c.

1952{
1955 return TRUE;
1956
1959 return TRUE;
1960
1961 return FALSE;
1962}
#define WINED3D_FORMAT_ATTR_EXTENSION

Referenced by wined3d_check_device_format().

◆ wined3d_copy_name()

static void wined3d_copy_name ( char *  dst,
const char *  src,
unsigned int  dst_size 
)
static

Definition at line 728 of file directx.c.

729{
730 size_t len;
731
732 if (dst_size)
733 {
734 len = min(strlen(src), dst_size - 1);
735 memcpy(dst, src, len);
736 memset(&dst[len], 0, dst_size - len);
737 }
738}
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
GLenum GLsizei len
Definition: glext.h:6722

Referenced by wined3d_adapter_get_identifier(), and wined3d_driver_info_init().

◆ wined3d_decref()

ULONG CDECL wined3d_decref ( struct wined3d *  wined3d)

Definition at line 198 of file directx.c.

199{
200 unsigned int refcount = InterlockedDecrement(&wined3d->ref);
201
202 TRACE("%p decreasing refcount to %u.\n", wined3d, refcount);
203
204 if (!refcount)
205 {
206 unsigned int i;
207
209 for (i = 0; i < wined3d->adapter_count; ++i)
210 {
212
213 adapter->adapter_ops->adapter_destroy(adapter);
214 }
215 free(wined3d);
217 }
218
219 return refcount;
220}
#define InterlockedDecrement
Definition: armddk.h:52
unsigned int adapter_count
struct wined3d_adapter * adapters[1]

Referenced by d3d8_init(), d3d8_Release(), d3d9_init(), d3d9_Release(), ddraw_destroy(), ddraw_init(), DirectDrawEnumerateExA(), dxgi_factory_Release(), wined3d_device_cleanup(), and wined3d_device_init().

◆ wined3d_device_create()

HRESULT CDECL wined3d_device_create ( struct wined3d *  wined3d,
struct wined3d_adapter *  adapter,
enum wined3d_device_type  device_type,
HWND  focus_window,
uint32_t  flags,
BYTE  surface_alignment,
const enum wined3d_feature_level *  feature_levels,
unsigned int  feature_level_count,
struct wined3d_device_parent *  device_parent,
struct wined3d_device **  device 
)

Definition at line 2777 of file directx.c.

2781{
2782 struct wined3d_device *object;
2783 HRESULT hr;
2784
2785 TRACE("wined3d %p, adapter %p, device_type %#x, focus_window %p, flags %#x, "
2786 "surface_alignment %u, feature_levels %p, feature_level_count %u, device_parent %p, device %p.\n",
2788 feature_levels, feature_level_count, device_parent, device);
2789
2790 if (FAILED(hr = adapter->adapter_ops->adapter_create_device(wined3d, adapter,
2792 feature_levels, feature_level_count, device_parent, &object)))
2793 return hr;
2794
2795 TRACE("Created device %p.\n", object);
2796 *device = object;
2797
2798 device_parent->ops->wined3d_device_created(device_parent, *device);
2799
2800 return WINED3D_OK;
2801}
static D3D_DRIVER_TYPE HMODULE UINT const D3D_FEATURE_LEVEL * feature_levels
Definition: hlsl_d3d11.c:28
struct wined3d_device_parent * device_parent
unsigned char surface_alignment

Referenced by ddraw_init(), device_init(), and dxgi_device_init().

◆ wined3d_driver_info_init()

bool wined3d_driver_info_init ( struct wined3d_driver_info *  driver_info,
const struct wined3d_gpu_description *  gpu_desc,
enum wined3d_feature_level  feature_level,
UINT64  vram_bytes,
UINT64  sysmem_bytes 
)

Diablo 2 crashes when the amount of video memory is greater than 0x7fffffff. In order to avoid this application bug we limit the amount of video memory to LONG_MAX for older Windows versions.

Definition at line 740 of file directx.c.

743{
745 WORD driver_os_version, driver_feature_level = 10;
748 MEMORYSTATUSEX memory_status;
749 OSVERSIONINFOW os_version;
750
751 memset(&os_version, 0, sizeof(os_version));
752 os_version.dwOSVersionInfoSize = sizeof(os_version);
753 if (!GetVersionExW(&os_version))
754 {
755 ERR("Failed to get OS version, reporting 2000/XP.\n");
756 driver_os_version = 6;
758 }
759 else
760 {
761 TRACE("OS version %lu.%lu.\n", os_version.dwMajorVersion, os_version.dwMinorVersion);
762 switch (os_version.dwMajorVersion)
763 {
764 case 2:
765 case 3:
766 case 4:
767 /* If needed we could distinguish between 9x and NT4, but this code won't make
768 * sense for NT4 since it had no way to obtain this info through DirectDraw 3.0.
769 */
770 driver_os_version = 4;
772 break;
773
774 case 5:
775 driver_os_version = 6;
777 break;
778
779 case 6:
780 if (os_version.dwMinorVersion == 0)
781 {
782 driver_os_version = 7;
784 }
785 else if (os_version.dwMinorVersion == 1)
786 {
787 driver_os_version = 8;
789 }
790 else if (os_version.dwMinorVersion == 2)
791 {
792 driver_os_version = 9;
794 }
795 else
796 {
797 if (os_version.dwMinorVersion > 3)
798 {
799 FIXME("Unhandled OS version %lu.%lu, reporting Windows 8.1.\n",
800 os_version.dwMajorVersion, os_version.dwMinorVersion);
801 }
802 driver_os_version = 10;
804 }
805 break;
806
807 case 10:
808 driver_os_version = 31;
810 break;
811
812 default:
813 FIXME("Unhandled OS version %lu.%lu, reporting Windows 7.\n",
814 os_version.dwMajorVersion, os_version.dwMinorVersion);
815 driver_os_version = 8;
817 break;
818 }
819 }
820
821 TRACE("GPU maximum feature level %#x.\n", feature_level);
822 switch (feature_level)
823 {
827 driver_feature_level = 5;
828 else
829 driver_feature_level = 10;
830 break;
832 driver_feature_level = 11;
833 break;
835 driver_feature_level = 12;
836 break;
838 driver_feature_level = 13;
839 break;
843 driver_feature_level = 14;
844 break;
846 driver_feature_level = 15;
847 break;
849 driver_feature_level = 16;
850 break;
852 driver_feature_level = 17;
853 break;
855 /* Advertise support for everything up to FL 12_x. */
856 driver_feature_level = 21;
857 break;
858 }
859 if (os_version.dwMajorVersion == 6 && !os_version.dwMinorVersion)
860 driver_feature_level = min(driver_feature_level, 18);
861 else if (os_version.dwMajorVersion < 6)
862 driver_feature_level = min(driver_feature_level, 14);
863
864 /* Drivers with the OS version 30+ all have the feature level word set to 0 */
865 if (driver_os_version >= 30)
866 driver_feature_level = 0;
867
868 driver_info->vendor = gpu_desc->vendor;
869 driver_info->device = gpu_desc->device;
870 wined3d_copy_name(driver_info->description, gpu_desc->description, ARRAY_SIZE(driver_info->description));
871 driver_info->vram_bytes = vram_bytes ? vram_bytes : (UINT64)gpu_desc->vidmem * 1024 * 1024;
872 driver = gpu_desc->driver;
873
875 {
877 TRACE("Overriding amount of video memory with 0x%s bytes.\n",
878 wine_dbgstr_longlong(driver_info->vram_bytes));
879 }
880
886 if (driver_model < DRIVER_MODEL_NT6X && driver_info->vram_bytes > LONG_MAX)
887 {
888 TRACE("Limiting amount of video memory to %#lx bytes for OS version older than Vista.\n", LONG_MAX);
889 driver_info->vram_bytes = LONG_MAX;
890 }
891
892 if (!(driver_info->sysmem_bytes = sysmem_bytes))
893 {
894 driver_info->sysmem_bytes = 64 * 1024 * 1024;
895 memory_status.dwLength = sizeof(memory_status);
896 if (GlobalMemoryStatusEx(&memory_status))
897 driver_info->sysmem_bytes = max(memory_status.ullTotalPhys / 2, driver_info->sysmem_bytes);
898 else
899 ERR("Failed to get global memory status.\n");
900 }
901
902 /* Try to obtain driver version information for the current Windows version. This fails in
903 * some cases:
904 * - the gpu is not available on the currently selected OS version:
905 * - Geforce GTX480 on Win98. When running applications in compatibility mode on Windows,
906 * version information for the current Windows version is returned instead of faked info.
907 * We do the same and assume the default Windows version to emulate is WinXP.
908 *
909 * - Videocard is a Riva TNT but winver is set to win7 (there are no drivers for this beast)
910 * For now return the XP driver info. Perhaps later on we should return VESA.
911 *
912 * - the gpu is not in our database (can happen when the user overrides the vendor_id / device_id)
913 * This could be an indication that our database is not up to date, so this should be fixed.
914 */
917 {
918 driver_info->name = version_info->driver_name;
919 driver_info->version_high = MAKEDWORD_VERSION(driver_os_version, driver_feature_level);
920 driver_info->version_low = MAKEDWORD_VERSION(version_info->subversion, version_info->build);
921
922 return true;
923 }
924
925 ERR("No driver version info found for device %04x:%04x, driver model %#x.\n",
926 driver_info->vendor, driver_info->device, driver_model);
927 return false;
928}
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
#define LONG_MAX
Definition: limits.h:30
unsigned short WORD
Definition: ntddk_ex.h:93
BOOL NTAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
Definition: heapmem.c:1272
if(dx< 0)
Definition: linetemp.h:194
ULONG dwMinorVersion
Definition: rtltypes.h:248
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:246
ULONG dwMajorVersion
Definition: rtltypes.h:247
DWORD build
Definition: version.c:68
unsigned int version_high
enum wined3d_pci_vendor vendor
enum wined3d_pci_device device
unsigned int version_low
char description[WINED3D_MAX_DEVICE_IDENTIFIER_LENGTH]
enum wined3d_pci_vendor vendor
enum wined3d_pci_device device
enum wined3d_display_driver driver
#define max(a, b)
Definition: svc.c:63
wined3d_driver_model
Definition: directx.c:35
static const struct driver_version_information * get_driver_version_info(enum wined3d_display_driver driver, enum wined3d_driver_model driver_model)
Definition: directx.c:666
@ WINED3D_FEATURE_LEVEL_11
Definition: wined3d.h:109
@ WINED3D_FEATURE_LEVEL_10_1
Definition: wined3d.h:108
@ WINED3D_FEATURE_LEVEL_8
Definition: wined3d.h:103
@ WINED3D_FEATURE_LEVEL_7
Definition: wined3d.h:102
@ WINED3D_FEATURE_LEVEL_6
Definition: wined3d.h:101
@ WINED3D_FEATURE_LEVEL_9_3
Definition: wined3d.h:106
@ WINED3D_FEATURE_LEVEL_10
Definition: wined3d.h:107
@ WINED3D_FEATURE_LEVEL_11_1
Definition: wined3d.h:110
@ WINED3D_FEATURE_LEVEL_9_1
Definition: wined3d.h:104
@ WINED3D_FEATURE_LEVEL_9_2
Definition: wined3d.h:105
#define MAKEDWORD_VERSION(maj, min)
wined3d_display_driver

Referenced by adapter_vk_init_driver_info(), wined3d_adapter_gl_init(), and wined3d_adapter_no3d_create().

◆ wined3d_get_adapter()

struct wined3d_adapter *CDECL wined3d_get_adapter ( const struct wined3d *  wined3d,
unsigned int  idx 
)

Definition at line 1009 of file directx.c.

1010{
1011 TRACE("wined3d %p, idx %u.\n", wined3d, idx);
1012
1013 if (idx >= wined3d->adapter_count)
1014 return NULL;
1015
1016 return wined3d->adapters[idx];
1017}

Referenced by d3d11_device_CheckFormatSupport(), d3d11_device_CheckMultisampleQualityLevels(), d3d8_init(), d3d9_init(), ddraw_enumerate_secondary_devices(), ddraw_init(), and dxgi_adapter_init().

◆ wined3d_get_adapter_count()

UINT CDECL wined3d_get_adapter_count ( const struct wined3d *  wined3d)

Definition at line 1019 of file directx.c.

1020{
1021 TRACE("wined3d %p, reporting %u adapters.\n",
1023
1024 return wined3d->adapter_count;
1025}

Referenced by d3d8_init(), d3d9_init(), and dxgi_factory_EnumAdapters1().

◆ wined3d_get_device_caps()

HRESULT CDECL wined3d_get_device_caps ( const struct wined3d_adapter *  adapter,
enum wined3d_device_type  device_type,
struct wined3d_caps *  caps 
)

Definition at line 2366 of file directx.c.

2368{
2369 const struct wined3d_d3d_info *d3d_info;
2370 struct wined3d_vertex_caps vertex_caps;
2371 DWORD ckey_caps, blit_caps, fx_caps;
2373 struct shader_caps shader_caps;
2374
2375 TRACE("adapter %p, device_type %s, caps %p.\n",
2377
2378 d3d_info = &adapter->d3d_info;
2379
2381
2382 caps->Caps = 0;
2386
2390
2393
2408
2417 /* TODO:
2418 WINED3DPMISCCAPS_NULLREFERENCE
2419 WINED3DPMISCCAPS_FOGANDSPECULARALPHA
2420 WINED3DPMISCCAPS_FOGVERTEXCLAMPED */
2421
2434
2443
2444 /* WINED3DPBLENDCAPS_BOTHINVSRCALPHA and WINED3DPBLENDCAPS_BOTHSRCALPHA
2445 * are legacy settings for srcblend only. */
2459
2470
2479
2488
2496
2497 if (!d3d_info->unconditional_npot)
2499
2512
2513 caps->CubeTextureFilterCaps = 0;
2514 caps->VolumeTextureFilterCaps = 0;
2515
2519
2520 caps->VolumeTextureAddressCaps = 0;
2521
2527 /* WINED3DLINECAPS_ANTIALIAS is not supported on Windows, and dx and gl seem to have a different
2528 * idea how generating the smoothing alpha values works; the result is different
2529 */
2530
2531 caps->MaxTextureWidth = d3d_info->limits.texture_size;
2532 caps->MaxTextureHeight = d3d_info->limits.texture_size;
2533
2534 caps->MaxVolumeExtent = 0;
2535
2536 caps->MaxTextureRepeat = 32768;
2537 caps->MaxTextureAspectRatio = d3d_info->limits.texture_size;
2538 caps->MaxVertexW = 1e10f;
2539
2540 caps->GuardBandLeft = -32768.0f;
2541 caps->GuardBandTop = -32768.0f;
2542 caps->GuardBandRight = 32768.0f;
2543 caps->GuardBandBottom = 32768.0f;
2544
2545 caps->ExtentsAdjust = 0.0f;
2546
2553
2554 caps->MaxAnisotropy = 0;
2555 caps->MaxPointSize = d3d_info->limits.pointsize_max;
2556
2557 caps->MaxPrimitiveCount = 0x555555; /* Taken from an AMD Radeon HD 5700 (Evergreen) GPU. */
2558 caps->MaxVertexIndex = 0xffffff; /* Taken from an AMD Radeon HD 5700 (Evergreen) GPU. */
2560 caps->MaxStreamStride = 1024;
2561
2562 /* d3d9.dll sets D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES here because StretchRects is implemented in d3d9 */
2566
2567 caps->NumSimultaneousRTs = d3d_info->limits.max_rt_count;
2568
2573 caps->VertexTextureFilterCaps = 0;
2574
2575 adapter->shader_backend->shader_get_caps(adapter, &shader_caps);
2576 adapter->fragment_pipe->get_caps(adapter, &fragment_caps);
2577 adapter->vertex_pipe->vp_get_caps(adapter, &vertex_caps);
2578
2579 /* Add shader misc caps. Only some of them belong to the shader parts of the pipeline */
2581
2584
2587
2591
2592 caps->MaxUserClipPlanes = vertex_caps.max_user_clip_planes;
2593 caps->MaxActiveLights = vertex_caps.max_active_lights;
2594 caps->MaxVertexBlendMatrices = vertex_caps.max_vertex_blend_matrices;
2595 caps->MaxVertexBlendMatrixIndex = vertex_caps.max_vertex_blend_matrix_index;
2596 caps->VertexProcessingCaps = vertex_caps.vertex_processing_caps;
2597 caps->FVFCaps = vertex_caps.fvf_caps;
2598 caps->RasterCaps |= vertex_caps.raster_caps;
2599
2600 /* The following caps are shader specific, but they are things we cannot detect, or which
2601 * are the same among all shader models. So to avoid code duplication set the shader version
2602 * specific, but otherwise constant caps here
2603 */
2604 if (caps->VertexShaderVersion >= 3)
2605 {
2606 /* Where possible set the caps based on OpenGL extensions and if they
2607 * aren't set (in case of software rendering) use the VS 3.0 from
2608 * MSDN or else if there's OpenGL spec use a hardcoded value minimum
2609 * VS3.0 value. */
2611 /* VS 3.0 requires MAX_DYNAMICFLOWCONTROLDEPTH (24) */
2612 caps->VS20Caps.dynamic_flow_control_depth = WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH;
2613 caps->VS20Caps.temp_count = 32;
2614 /* level of nesting in loops / if-statements; VS 3.0 requires MAX (4) */
2615 caps->VS20Caps.static_flow_control_depth = WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH;
2616
2617 caps->MaxVShaderInstructionsExecuted = 65535; /* VS 3.0 needs at least 65535, some cards even use 2^32-1 */
2620 }
2621 else if (caps->VertexShaderVersion == 2)
2622 {
2623 caps->VS20Caps.caps = 0;
2624 caps->VS20Caps.dynamic_flow_control_depth = WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH;
2625 caps->VS20Caps.temp_count = WINED3DVS20_MIN_NUMTEMPS;
2626 caps->VS20Caps.static_flow_control_depth = 1;
2627
2628 caps->MaxVShaderInstructionsExecuted = 65535;
2630 }
2631 else /* VS 1.x */
2632 {
2633 caps->VS20Caps.caps = 0;
2634 caps->VS20Caps.dynamic_flow_control_depth = 0;
2635 caps->VS20Caps.temp_count = 0;
2636 caps->VS20Caps.static_flow_control_depth = 0;
2637
2640 }
2641
2642 if (caps->PixelShaderVersion >= 3)
2643 {
2644 /* Where possible set the caps based on OpenGL extensions and if they
2645 * aren't set (in case of software rendering) use the PS 3.0 from
2646 * MSDN or else if there's OpenGL spec use a hardcoded value minimum
2647 * PS 3.0 value. */
2648
2649 /* Caps is more or less undocumented on MSDN but it appears to be
2650 * used for PS20Caps based on results from R9600/FX5900/Geforce6800
2651 * cards from Windows */
2657 /* PS 3.0 requires MAX_DYNAMICFLOWCONTROLDEPTH (24) */
2658 caps->PS20Caps.dynamic_flow_control_depth = WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH;
2659 caps->PS20Caps.temp_count = 32;
2660 /* PS 3.0 requires MAX_STATICFLOWCONTROLDEPTH (4) */
2661 caps->PS20Caps.static_flow_control_depth = WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH;
2662 /* PS 3.0 requires MAX_NUMINSTRUCTIONSLOTS (512) */
2663 caps->PS20Caps.instruction_slot_count = WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS;
2664
2665 caps->MaxPShaderInstructionsExecuted = 65535;
2667 }
2668 else if (caps->PixelShaderVersion == 2)
2669 {
2670 /* Below we assume PS2.0 specs, not extended 2.0a(GeforceFX)/2.0b(Radeon R3xx) ones */
2671 caps->PS20Caps.caps = 0;
2672 caps->PS20Caps.dynamic_flow_control_depth = 0; /* WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH = 0 */
2673 caps->PS20Caps.temp_count = WINED3DPS20_MIN_NUMTEMPS;
2674 caps->PS20Caps.static_flow_control_depth = WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH; /* Minimum: 1 */
2675 /* Minimum number (64 ALU + 32 Texture), a GeforceFX uses 512 */
2676 caps->PS20Caps.instruction_slot_count = WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS;
2677
2678 caps->MaxPShaderInstructionsExecuted = 512; /* Minimum value, a GeforceFX uses 1024 */
2680 }
2681 else /* PS 1.x */
2682 {
2683 caps->PS20Caps.caps = 0;
2684 caps->PS20Caps.dynamic_flow_control_depth = 0;
2685 caps->PS20Caps.temp_count = 0;
2686 caps->PS20Caps.static_flow_control_depth = 0;
2687 caps->PS20Caps.instruction_slot_count = 0;
2688
2691 }
2692
2693 if (caps->VertexShaderVersion >= 2)
2694 {
2695 /* OpenGL supports all the formats below, perhaps not always
2696 * without conversion, but it supports them.
2697 * Further GLSL doesn't seem to have an official unsigned type so
2698 * don't advertise it yet as I'm not sure how we handle it.
2699 * We might need to add some clamping in the shader engine to
2700 * support it.
2701 * TODO: WINED3DDTCAPS_USHORT2N, WINED3DDTCAPS_USHORT4N, WINED3DDTCAPS_UDEC3, WINED3DDTCAPS_DEC3N */
2706 }
2707 else
2708 {
2709 caps->DeclTypes = 0;
2710 }
2711
2712 /* Set DirectDraw helper Caps */
2713 ckey_caps = WINEDDCKEYCAPS_DESTBLT |
2715 fx_caps = WINEDDFXCAPS_BLTALPHA |
2727 blit_caps = WINEDDCAPS_BLT |
2736
2737 /* Fill the ddraw caps structure */
2738 caps->ddraw_caps.caps = WINEDDCAPS_GDI |
2740 blit_caps;
2741 caps->ddraw_caps.caps2 = WINEDDCAPS2_CERTIFIED |
2746 caps->ddraw_caps.color_key_caps = ckey_caps;
2747 caps->ddraw_caps.fx_caps = fx_caps;
2748 caps->ddraw_caps.svb_caps = blit_caps;
2749 caps->ddraw_caps.svb_color_key_caps = ckey_caps;
2750 caps->ddraw_caps.svb_fx_caps = fx_caps;
2751 caps->ddraw_caps.vsb_caps = blit_caps;
2752 caps->ddraw_caps.vsb_color_key_caps = ckey_caps;
2753 caps->ddraw_caps.vsb_fx_caps = fx_caps;
2754 caps->ddraw_caps.ssb_caps = blit_caps;
2755 caps->ddraw_caps.ssb_color_key_caps = ckey_caps;
2756 caps->ddraw_caps.ssb_fx_caps = fx_caps;
2757
2758 caps->ddraw_caps.dds_caps = WINEDDSCAPS_FLIP
2765
2768 caps->stencil_export = d3d_info->stencil_export;
2769
2770 caps->max_feature_level = d3d_info->feature_level;
2771
2772 adapter->adapter_ops->adapter_get_wined3d_caps(adapter, caps);
2773
2774 return WINED3D_OK;
2775}
unsigned int max_blend_stages
unsigned int PrimitiveMiscCaps
unsigned int max_textures
unsigned int TextureOpCaps
unsigned int vs_version
unsigned int vs_uniform_count
unsigned int ps_version
DWORD MaxPShaderInstructionsExecuted
Definition: wined3d.h:1995
BOOL viewport_array_index_any_shader
Definition: wined3d.h:2002
DWORD MaxVertexBlendMatrices
Definition: wined3d.h:1967
DWORD MaxVertexShader30InstructionSlots
Definition: wined3d.h:1996
DWORD MaxTextureBlendStages
Definition: wined3d.h:1961
struct wined3d_vertex_shader_caps VS20Caps
Definition: wined3d.h:1991
DWORD StretchRectFilterCaps
Definition: wined3d.h:1990
BOOL stencil_export
Definition: wined3d.h:2003
DWORD VolumeTextureAddressCaps
Definition: wined3d.h:1940
float GuardBandTop
Definition: wined3d.h:1952
float PixelShader1xMaxValue
Definition: wined3d.h:1981
DWORD FVFCaps
Definition: wined3d.h:1959
DWORD PrimitiveMiscCaps
Definition: wined3d.h:1928
DWORD MaxVertexBlendMatrixIndex
Definition: wined3d.h:1968
DWORD VertexProcessingCaps
Definition: wined3d.h:1964
DWORD TextureAddressCaps
Definition: wined3d.h:1939
DWORD TextureCaps
Definition: wined3d.h:1935
DWORD ShadeCaps
Definition: wined3d.h:1934
DWORD TextureOpCaps
Definition: wined3d.h:1960
DWORD MaxTextureRepeat
Definition: wined3d.h:1946
DWORD MaxAnisotropy
Definition: wined3d.h:1948
DWORD MaxPixelShader30InstructionSlots
Definition: wined3d.h:1997
DWORD MaxVolumeExtent
Definition: wined3d.h:1945
float ExtentsAdjust
Definition: wined3d.h:1956
float MaxNpatchTessellationLevel
Definition: wined3d.h:1986
float GuardBandLeft
Definition: wined3d.h:1951
DWORD VolumeTextureFilterCaps
Definition: wined3d.h:1938
DWORD DevCaps
Definition: wined3d.h:1927
DWORD ZCmpCaps
Definition: wined3d.h:1930
DWORD MaxTextureHeight
Definition: wined3d.h:1944
DWORD CursorCaps
Definition: wined3d.h:1926
DWORD Caps
Definition: wined3d.h:1922
DWORD Caps3
Definition: wined3d.h:1924
DWORD MaxStreams
Definition: wined3d.h:1974
DWORD NumSimultaneousRTs
Definition: wined3d.h:1989
DWORD AlphaCmpCaps
Definition: wined3d.h:1933
DWORD DestBlendCaps
Definition: wined3d.h:1932
enum wined3d_feature_level max_feature_level
Definition: wined3d.h:2005
DWORD RasterCaps
Definition: wined3d.h:1929
DWORD DevCaps2
Definition: wined3d.h:1984
struct wined3d_pixel_shader_caps PS20Caps
Definition: wined3d.h:1992
float MaxVertexW
Definition: wined3d.h:1949
float MaxPointSize
Definition: wined3d.h:1970
DWORD Caps2
Definition: wined3d.h:1923
DWORD MaxPrimitiveCount
Definition: wined3d.h:1972
DWORD VertexShaderVersion
Definition: wined3d.h:1977
enum wined3d_device_type DeviceType
Definition: wined3d.h:1920
DWORD MaxTextureWidth
Definition: wined3d.h:1943
DWORD LineCaps
Definition: wined3d.h:1941
DWORD MaxUserClipPlanes
Definition: wined3d.h:1966
DWORD VertexTextureFilterCaps
Definition: wined3d.h:1993
DWORD PixelShaderVersion
Definition: wined3d.h:1980
float GuardBandBottom
Definition: wined3d.h:1954
float GuardBandRight
Definition: wined3d.h:1953
DWORD MaxVertexIndex
Definition: wined3d.h:1973
DWORD CubeTextureFilterCaps
Definition: wined3d.h:1937
DWORD MaxTextureAspectRatio
Definition: wined3d.h:1947
DWORD MaxStreamStride
Definition: wined3d.h:1975
DWORD MaxSimultaneousTextures
Definition: wined3d.h:1962
DWORD MaxActiveLights
Definition: wined3d.h:1965
DWORD StencilCaps
Definition: wined3d.h:1957
DWORD SrcBlendCaps
Definition: wined3d.h:1931
DWORD DeclTypes
Definition: wined3d.h:1988
DWORD TextureFilterCaps
Definition: wined3d.h:1936
struct wined3d_ddraw_caps ddraw_caps
Definition: wined3d.h:1999
DWORD MaxVertexShaderConst
Definition: wined3d.h:1978
BOOL shader_double_precision
Definition: wined3d.h:2001
DWORD MaxVShaderInstructionsExecuted
Definition: wined3d.h:1994
uint32_t viewport_array_index_any_shader
struct wined3d_d3d_limits limits
uint32_t shader_double_precision
#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH
Definition: wined3d.h:1122
#define WINED3DSTENCILCAPS_ZERO
Definition: wined3d.h:1145
#define WINED3DPMISCCAPS_MASKZ
Definition: wined3d.h:1102
#define WINED3DPMISCCAPS_CULLCW
Definition: wined3d.h:1105
#define WINED3DPSHADECAPS_FOGGOURAUD
Definition: wined3d.h:1244
#define WINED3DSTENCILCAPS_KEEP
Definition: wined3d.h:1144
#define WINEDDCAPS_BLTSTRETCH
Definition: wined3d.h:1509
#define WINED3DPTADDRESSCAPS_WRAP
Definition: wined3d.h:1137
#define WINED3DVS20_MIN_NUMTEMPS
Definition: wined3d.h:1184
#define WINED3DPRASTERCAPS_FOGVERTEX
Definition: wined3d.h:1206
#define WINEDDSCAPS_PRIMARYSURFACE
Definition: wined3d.h:1429
#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL
Definition: wined3d.h:1255
#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH
Definition: wined3d.h:1181
#define WINED3DPBLENDCAPS_INVSRCALPHA
Definition: wined3d.h:1083
#define WINED3DPRASTERCAPS_FOGTABLE
Definition: wined3d.h:1207
#define WINEDDCAPS_COLORKEY
Definition: wined3d.h:1522
#define WINED3DPS20_MIN_NUMTEMPS
Definition: wined3d.h:1125
#define WINED3DPCMPCAPS_LESSEQUAL
Definition: wined3d.h:1096
#define WINED3DPBLENDCAPS_INVDESTCOLOR
Definition: wined3d.h:1087
#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY
Definition: wined3d.h:1305
#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY
Definition: wined3d.h:1306
#define WINED3DDEVCAPS_DRAWPRIMITIVES2
Definition: wined3d.h:1310
#define WINED3DPCMPCAPS_NEVER
Definition: wined3d.h:1093
#define WINED3DCAPS2_DYNAMICTEXTURES
Definition: wined3d.h:1196
#define WINED3DPRASTERCAPS_WFOG
Definition: wined3d.h:1217
#define WINED3DDEVCAPS_PUREDEVICE
Definition: wined3d.h:1316
#define WINED3DPSHADECAPS_COLORFLATRGB
Definition: wined3d.h:1226
#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING
Definition: wined3d.h:1118
#define WINEDDCKEYCAPS_DESTBLT
Definition: wined3d.h:1451
#define WINEDDSCAPS_ZBUFFER
Definition: wined3d.h:1437
#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST
Definition: wined3d.h:1271
#define WINED3DVS20CAPS_PREDICATION
Definition: wined3d.h:1188
#define WINEDDFXCAPS_BLTROTATION90
Definition: wined3d.h:1478
#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS
Definition: wined3d.h:1128
#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH
Definition: wined3d.h:1126
#define WINED3DPTFILTERCAPS_MAGFLINEAR
Definition: wined3d.h:1279
#define WINED3DPTADDRESSCAPS_INDEPENDENTUV
Definition: wined3d.h:1141
#define WINED3DPTFILTERCAPS_MIPNEAREST
Definition: wined3d.h:1269
#define WINED3DLINECAPS_BLEND
Definition: wined3d.h:1070
#define WINED3DCAPS2_CANRENDERWINDOWED
Definition: wined3d.h:1192
#define WINED3DPBLENDCAPS_ZERO
Definition: wined3d.h:1078
#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD
Definition: wined3d.h:1039
#define WINED3DPTADDRESSCAPS_CLAMP
Definition: wined3d.h:1139
#define WINEDDFXCAPS_BLTSTRETCHX
Definition: wined3d.h:1483
#define WINED3DPBLENDCAPS_SRCALPHASAT
Definition: wined3d.h:1088
#define WINEDDFXCAPS_BLTSHRINKYN
Definition: wined3d.h:1482
#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY
Definition: wined3d.h:1303
#define WINED3DCAPS2_FULLSCREENGAMMA
Definition: wined3d.h:1191
#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND
Definition: wined3d.h:1239
#define WINED3DSTENCILCAPS_REPLACE
Definition: wined3d.h:1146
#define WINEDDSCAPS_OFFSCREENPLAIN
Definition: wined3d.h:1426
#define WINED3DSTENCILCAPS_INCRSAT
Definition: wined3d.h:1147
#define WINED3DPRASTERCAPS_ZTEST
Definition: wined3d.h:1203
#define WINED3DPTFILTERCAPS_MIPFLINEAR
Definition: wined3d.h:1277
#define WINED3DPTEXTURECAPS_ALPHA
Definition: wined3d.h:1249
#define WINED3DPMISCCAPS_CULLNONE
Definition: wined3d.h:1104
#define WINED3DPS20CAPS_PREDICATION
Definition: wined3d.h:1133
#define WINED3DPTEXTURECAPS_POW2
Definition: wined3d.h:1248
#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX
Definition: wined3d.h:1307
#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH
Definition: wined3d.h:1127
#define WINEDDFXCAPS_BLTSTRETCHYN
Definition: wined3d.h:1486
#define WINEDDCAPS_GDI
Definition: wined3d.h:1510
#define WINED3DLINECAPS_ZTEST
Definition: wined3d.h:1069
#define WINED3DPTEXTURECAPS_BORDER
Definition: wined3d.h:1251
#define WINED3DPMISCCAPS_CULLCCW
Definition: wined3d.h:1106
#define WINED3DDTCAPS_SHORT4N
Definition: wined3d.h:1056
#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH
Definition: wined3d.h:1182
#define WINEDDSCAPS_PALETTE
Definition: wined3d.h:1428
#define WINEDDCAPS_BLTDEPTHFILL
Definition: wined3d.h:1528
#define WINEDDCAPS_CANCLIP
Definition: wined3d.h:1529
#define WINED3DLINECAPS_FOG
Definition: wined3d.h:1072
#define WINED3DPSHADECAPS_SPECULARFLATRGB
Definition: wined3d.h:1232
#define WINED3DPRASTERCAPS_ZFOG
Definition: wined3d.h:1218
#define WINED3DSTENCILCAPS_DECRSAT
Definition: wined3d.h:1148
#define WINEDDCAPS_COLORKEYHWASSIST
Definition: wined3d.h:1524
#define WINED3DPBLENDCAPS_SRCCOLOR
Definition: wined3d.h:1080
#define WINED3DDEVCAPS_FLOATTLVERTEX
Definition: wined3d.h:1297
#define WINEDDCAPS_BLTCOLORFILL
Definition: wined3d.h:1526
#define WINED3DPRASTERCAPS_SUBPIXEL
Definition: wined3d.h:1204
#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY
Definition: wined3d.h:1301
#define WINED3DPTEXTURECAPS_TRANSPARENCY
Definition: wined3d.h:1250
#define WINED3DPRASTERCAPS_STIPPLE
Definition: wined3d.h:1208
#define WINED3DPS20CAPS_ARBITRARYSWIZZLE
Definition: wined3d.h:1131
#define WINED3DPCMPCAPS_LESS
Definition: wined3d.h:1094
#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB
Definition: wined3d.h:1234
#define WINED3DPSHADECAPS_COLORGOURAUDRGB
Definition: wined3d.h:1228
#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR
Definition: wined3d.h:1272
#define WINEDDSCAPS_TEXTURE
Definition: wined3d.h:1432
#define WINEDDCAPS2_CERTIFIED
Definition: wined3d.h:1533
#define WINED3D_MAX_STREAMS
Definition: wined3d.h:1596
#define WINED3DPTEXTURECAPS_MIPMAP
Definition: wined3d.h:1260
#define WINED3DPBLENDCAPS_DESTCOLOR
Definition: wined3d.h:1086
#define WINEDDCAPS2_NOPAGELOCKREQUIRED
Definition: wined3d.h:1544
#define WINED3DDEVCAPS_HWRASTERIZATION
Definition: wined3d.h:1315
#define WINEDDFXCAPS_BLTSHRINKXN
Definition: wined3d.h:1480
#define WINED3DPRASTERCAPS_PAT
Definition: wined3d.h:1202
#define WINEDDFXCAPS_BLTMIRRORUPDOWN
Definition: wined3d.h:1476
#define WINEDDFXCAPS_BLTSTRETCHXN
Definition: wined3d.h:1484
#define WINED3DPSHADECAPS_ALPHAFLATBLEND
Definition: wined3d.h:1237
#define WINED3DPBLENDCAPS_ONE
Definition: wined3d.h:1079
#define WINED3DCAPS3_COPY_TO_VIDMEM
Definition: wined3d.h:1041
#define WINED3DPTFILTERCAPS_NEAREST
Definition: wined3d.h:1267
#define WINEDDCAPS_PALETTE
Definition: wined3d.h:1515
#define WINED3DPRASTERCAPS_DEPTHBIAS
Definition: wined3d.h:1222
#define WINEDDCAPS_CANBLTSYSMEM
Definition: wined3d.h:1531
#define WINEDDSCAPS_FLIP
Definition: wined3d.h:1424
#define WINED3DPTFILTERCAPS_MAGFPOINT
Definition: wined3d.h:1278
#define WINEDDCAPS_CANCLIPSTRETCHED
Definition: wined3d.h:1530
#define WINED3DMIN30SHADERINSTRUCTIONS
Definition: wined3d.h:1076
#define WINED3DDEVCAPS_CANRENDERAFTERFLIP
Definition: wined3d.h:1308
#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS
Definition: wined3d.h:1221
#define WINED3DPTFILTERCAPS_LINEAR
Definition: wined3d.h:1268
#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS
Definition: wined3d.h:1132
#define WINED3DPRASTERCAPS_DITHER
Definition: wined3d.h:1199
#define WINED3DPTEXTURECAPS_PERSPECTIVE
Definition: wined3d.h:1247
#define WINED3DCURSORCAPS_COLOR
Definition: wined3d.h:1294
#define WINEDDFXCAPS_BLTSHRINKX
Definition: wined3d.h:1479
#define WINED3DDTCAPS_UBYTE4N
Definition: wined3d.h:1054
#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA
Definition: wined3d.h:1090
#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT
Definition: wined3d.h:1135
#define WINED3DCURSORCAPS_LOWRES
Definition: wined3d.h:1295
#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS
Definition: wined3d.h:1129
#define WINED3DSTENCILCAPS_INVERT
Definition: wined3d.h:1149
#define WINED3DPTFILTERCAPS_MIPLINEAR
Definition: wined3d.h:1270
#define WINEDDCAPS2_CANRENDERWINDOWED
Definition: wined3d.h:1550
#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS
Definition: wined3d.h:1108
#define WINED3DPTEXTURECAPS_PROJECTED
Definition: wined3d.h:1256
#define WINED3DPCMPCAPS_GREATEREQUAL
Definition: wined3d.h:1099
#define WINED3DDTCAPS_SHORT2N
Definition: wined3d.h:1055
#define WINED3DPTFILTERCAPS_MINFPOINT
Definition: wined3d.h:1273
#define WINED3DPBLENDCAPS_INVSRCCOLOR
Definition: wined3d.h:1081
#define WINEDDCAPS2_PRIMARYGAMMA
Definition: wined3d.h:1549
#define WINED3DPCMPCAPS_EQUAL
Definition: wined3d.h:1095
#define WINED3DPMISCCAPS_COLORWRITEENABLE
Definition: wined3d.h:1107
#define WINEDDFXCAPS_BLTSHRINKY
Definition: wined3d.h:1481
#define WINED3DPCMPCAPS_NOTEQUAL
Definition: wined3d.h:1098
#define WINED3DLINECAPS_TEXTURE
Definition: wined3d.h:1068
#define WINED3DPBLENDCAPS_SRCALPHA
Definition: wined3d.h:1082
#define WINED3DDEVCAPS2_STREAMOFFSET
Definition: wined3d.h:1045
#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX
Definition: wined3d.h:1312
#define WINEDDFXCAPS_BLTSTRETCHY
Definition: wined3d.h:1485
#define WINED3DPBLENDCAPS_DESTALPHA
Definition: wined3d.h:1084
#define WINED3DPRASTERCAPS_SCISSORTEST
Definition: wined3d.h:1220
#define WINED3DPTFILTERCAPS_MIPFPOINT
Definition: wined3d.h:1276
#define WINED3DCAPS3_COPY_TO_SYSTEMMEM
Definition: wined3d.h:1042
#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT
Definition: wined3d.h:1134
#define WINED3DPCMPCAPS_GREATER
Definition: wined3d.h:1097
@ WINED3D_DEVICE_TYPE_HAL
Definition: wined3d.h:91
@ WINED3D_DEVICE_TYPE_REF
Definition: wined3d.h:92
#define WINEDDCKEYCAPS_SRCBLT
Definition: wined3d.h:1460
#define WINEDDFXCAPS_BLTALPHA
Definition: wined3d.h:1471
#define WINED3DPBLENDCAPS_INVDESTALPHA
Definition: wined3d.h:1085
#define WINEDDCAPS2_WIDESURFACES
Definition: wined3d.h:1545
#define WINED3DPTFILTERCAPS_MINFLINEAR
Definition: wined3d.h:1274
#define WINED3DPTEXTURECAPS_ALPHAPALETTE
Definition: wined3d.h:1254
#define WINED3DPBLENDCAPS_BOTHSRCALPHA
Definition: wined3d.h:1089
#define WINEDDSCAPS_MIPMAP
Definition: wined3d.h:1442
#define WINEDDCAPS_BLT
Definition: wined3d.h:1506
#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY
Definition: wined3d.h:1302
#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT
Definition: wined3d.h:1475
#define WINED3DPMISCCAPS_CLIPTLVERTS
Definition: wined3d.h:1109
#define WINED3DDTCAPS_UBYTE4
Definition: wined3d.h:1053
#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH
Definition: wined3d.h:1185
#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY
Definition: wined3d.h:1304
#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT
Definition: wined3d.h:1313
#define WINED3DLINECAPS_ALPHACMP
Definition: wined3d.h:1071
#define WINED3DPSHADECAPS_FOGFLAT
Definition: wined3d.h:1243
#define WINED3DPCMPCAPS_ALWAYS
Definition: wined3d.h:1100
#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET
Definition: wined3d.h:1051

Referenced by d3d8_GetDeviceCaps(), d3d9_GetDeviceCaps(), ddraw_get_d3dcaps(), ddraw_init(), device_init(), dxgi_adapter_CheckInterfaceSupport(), and wined3d_device_get_device_caps().

◆ wined3d_get_gpu_description()

const struct wined3d_gpu_description * wined3d_get_gpu_description ( enum wined3d_pci_vendor  vendor,
enum wined3d_pci_device  device 
)

Definition at line 688 of file directx.c.

690{
691 unsigned int i;
692
693 for (i = 0; i < ARRAY_SIZE(gpu_description_table); ++i)
694 {
696 return &gpu_description_table[i];
697 }
698
699 return NULL;
700}
const WCHAR * vendor
Definition: db.cpp:873
static const struct wined3d_gpu_description gpu_description_table[]
Definition: directx.c:335

Referenced by adapter_vk_init_driver_info(), query_gpu_description(), wined3d_adapter_init_gl_caps(), and wined3d_get_user_override_gpu_description().

◆ wined3d_get_user_override_gpu_description()

const struct wined3d_gpu_description * wined3d_get_user_override_gpu_description ( enum wined3d_pci_vendor  vendor,
enum wined3d_pci_device  device 
)

Definition at line 702 of file directx.c.

704{
705 const struct wined3d_gpu_description *gpu_desc;
706 static unsigned int once;
707
709 return NULL;
710
712 {
714 TRACE("Overriding vendor PCI ID with 0x%04x.\n", vendor);
715 }
717 {
719 TRACE("Overriding device PCI ID with 0x%04x.\n", device);
720 }
721
722 if (!(gpu_desc = wined3d_get_gpu_description(vendor, device)) && !once++)
723 ERR_(winediag)("Invalid GPU override %04x:%04x specified, ignoring.\n", vendor, device);
724
725 return gpu_desc;
726}
#define ERR_(ch,...)
Definition: debug.h:156
unsigned short pci_vendor_id
unsigned short pci_device_id
const struct wined3d_gpu_description * wined3d_get_gpu_description(enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
Definition: directx.c:688
#define PCI_VENDOR_NONE
#define PCI_DEVICE_NONE

Referenced by adapter_vk_init_driver_info(), and query_gpu_description().

◆ wined3d_gpu_from_feature_level()

enum wined3d_pci_device wined3d_gpu_from_feature_level ( enum wined3d_pci_vendor *  vendor,
enum wined3d_feature_level  feature_level 
)

Definition at line 930 of file directx.c.

932{
933 static const struct wined3d_fallback_card
934 {
935 enum wined3d_feature_level feature_level;
936 enum wined3d_pci_device device_id;
937 }
938 card_fallback_nvidia[] =
939 {
949 },
950 card_fallback_amd[] =
951 {
960 },
961 card_fallback_intel[] =
962 {
969 };
970
971 static const struct
972 {
974 const struct wined3d_fallback_card *cards;
975 }
976 fallbacks[] =
977 {
978 {HW_VENDOR_AMD, card_fallback_amd},
979 {HW_VENDOR_NVIDIA, card_fallback_nvidia},
980 {HW_VENDOR_VMWARE, card_fallback_amd},
981 {HW_VENDOR_INTEL, card_fallback_intel},
982 };
983
984 const struct wined3d_fallback_card *cards;
985 enum wined3d_pci_device device_id;
986 unsigned int i;
987
988 cards = NULL;
989 for (i = 0; i < ARRAY_SIZE(fallbacks); ++i)
990 {
991 if (*vendor == fallbacks[i].vendor)
992 cards = fallbacks[i].cards;
993 }
994 if (!cards)
995 {
997 cards = card_fallback_nvidia;
998 }
999
1000 device_id = cards->device_id;
1001 for (i = 0; cards[i].feature_level; ++i)
1002 {
1003 if (feature_level >= cards[i].feature_level)
1004 device_id = cards[i].device_id;
1005 }
1006 return device_id;
1007}
#define HW_VENDOR_NVIDIA
Definition: builtin.c:4465
#define HW_VENDOR_AMD
Definition: builtin.c:4464
#define HW_VENDOR_INTEL
Definition: builtin.c:4467
#define HW_VENDOR_VMWARE
Definition: builtin.c:4466
wined3d_feature_level
Definition: wined3d.h:98
wined3d_pci_vendor
wined3d_pci_device
@ CARD_NVIDIA_GEFORCE_6800
@ CARD_INTEL_945G
@ CARD_INTEL_915G
@ CARD_AMD_RADEON_HD2900
@ CARD_NVIDIA_RIVA_128
@ CARD_AMD_RADEON_HD5600
@ CARD_INTEL_IVBD
@ CARD_AMD_RADEON_X1600
@ CARD_NVIDIA_GEFORCE_8800GTX
@ CARD_NVIDIA_RIVA_TNT
@ CARD_AMD_RAGE_128PRO
@ CARD_INTEL_845G
@ CARD_AMD_RADEON_9500
@ CARD_NVIDIA_GEFORCE
@ CARD_INTEL_G45
@ CARD_AMD_RADEON_7200
@ CARD_AMD_RADEON_8500
@ CARD_NVIDIA_GEFORCEFX_5800
@ CARD_NVIDIA_GEFORCE3
@ CARD_NVIDIA_GEFORCE_GTX470

Referenced by wined3d_guess_card().

◆ wined3d_incref()

ULONG CDECL wined3d_incref ( struct wined3d *  wined3d)

Definition at line 189 of file directx.c.

190{
191 unsigned int refcount = InterlockedIncrement(&wined3d->ref);
192
193 TRACE("%p increasing refcount to %u.\n", wined3d, refcount);
194
195 return refcount;
196}
#define InterlockedIncrement
Definition: armddk.h:53

Referenced by wined3d_device_init().

◆ wined3d_init()

HRESULT wined3d_init ( struct wined3d *  wined3d,
uint32_t  flags 
)

Definition at line 3477 of file directx.c.

3478{
3479 wined3d->ref = 1;
3480 wined3d->flags = flags;
3481
3482 TRACE("Initialising adapters.\n");
3483
3485 {
3486 WARN("Failed to create adapter.\n");
3487 return E_FAIL;
3488 }
3490
3491 return WINED3D_OK;
3492}
static struct wined3d_adapter * wined3d_adapter_create(unsigned int ordinal, DWORD wined3d_creation_flags)
Definition: directx.c:3459

Referenced by wined3d_create().

◆ wined3d_null_wined3d_object_destroyed()

static void STDMETHODCALLTYPE wined3d_null_wined3d_object_destroyed ( void *  parent)
static

Definition at line 3470 of file directx.c.

3470{}

◆ wined3d_output_cleanup()

static void wined3d_output_cleanup ( const struct wined3d_output *  output)
static

Definition at line 118 of file directx.c.

119{
120 D3DKMT_DESTROYDEVICE destroy_device_desc;
121
122 TRACE("output %p.\n", output);
123
124 destroy_device_desc.hDevice = output->kmt_device;
125 D3DKMTDestroyDevice(&destroy_device_desc);
126}
D3DKMT_HANDLE hDevice
Definition: d3dkmthk.h:84
D3DKMT_HANDLE kmt_device
NTSTATUS WINAPI D3DKMTDestroyDevice(const D3DKMT_DESTROYDEVICE *desc)

Referenced by wined3d_adapter_cleanup(), and wined3d_adapter_init().

◆ wined3d_output_find_closest_matching_mode()

HRESULT CDECL wined3d_output_find_closest_matching_mode ( struct wined3d_output *  output,
struct wined3d_display_mode *  mode 
)

Definition at line 1409 of file directx.c.

1411{
1412 unsigned int i, j, mode_count, matching_mode_count, closest;
1413 struct wined3d_display_mode **matching_modes;
1414 struct wined3d_display_mode *modes;
1415 HRESULT hr;
1416
1417 TRACE("output %p, mode %p.\n", output, mode);
1418
1419 if (!(mode_count = wined3d_output_get_mode_count(output, mode->format_id,
1421 {
1422 WARN("Output has 0 matching modes.\n");
1423 return E_FAIL;
1424 }
1425
1426 if (!(modes = calloc(mode_count, sizeof(*modes))))
1427 return E_OUTOFMEMORY;
1428 if (!(matching_modes = calloc(mode_count, sizeof(*matching_modes))))
1429 {
1430 free(modes);
1431 return E_OUTOFMEMORY;
1432 }
1433
1434 for (i = 0; i < mode_count; ++i)
1435 {
1436 if (FAILED(hr = wined3d_output_get_mode(output, mode->format_id,
1437 WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &modes[i], true)))
1438 {
1439 free(matching_modes);
1440 free(modes);
1441 return hr;
1442 }
1443 matching_modes[i] = &modes[i];
1444 }
1445
1446 matching_mode_count = mode_count;
1447
1448 if (mode->scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN)
1449 {
1450 for (i = 0, j = 0; i < matching_mode_count; ++i)
1451 {
1452 if (matching_modes[i]->scanline_ordering == mode->scanline_ordering)
1453 matching_modes[j++] = matching_modes[i];
1454 }
1455 if (j > 0)
1456 matching_mode_count = j;
1457 }
1458
1459 if (mode->refresh_rate)
1460 {
1461 for (i = 0, j = 0; i < matching_mode_count; ++i)
1462 {
1463 if (matching_modes[i]->refresh_rate == mode->refresh_rate)
1464 matching_modes[j++] = matching_modes[i];
1465 }
1466 if (j > 0)
1467 matching_mode_count = j;
1468 }
1469
1470 if (!mode->width || !mode->height)
1471 {
1472 struct wined3d_display_mode current_mode;
1473 if (FAILED(hr = wined3d_output_get_display_mode(output, &current_mode, NULL)))
1474 {
1475 free(matching_modes);
1476 free(modes);
1477 return hr;
1478 }
1479 mode->width = current_mode.width;
1480 mode->height = current_mode.height;
1481 }
1482
1483 closest = ~0u;
1484 for (i = 0, j = 0; i < matching_mode_count; ++i)
1485 {
1486 unsigned int d = abs((int)(mode->width - matching_modes[i]->width))
1487 + abs((int)(mode->height - matching_modes[i]->height));
1488
1489 if (closest > d)
1490 {
1491 closest = d;
1492 j = i;
1493 }
1494 }
1495
1496 *mode = *matching_modes[j];
1497
1498 free(matching_modes);
1499 free(modes);
1500
1501 TRACE("Returning %ux%u@%u %s %#x.\n", mode->width, mode->height,
1502 mode->refresh_rate, debug_d3dformat(mode->format_id),
1503 mode->scanline_ordering);
1504
1505 return WINED3D_OK;
1506}
#define abs(i)
Definition: fconv.c:206
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 * u
Definition: glfuncs.h:240
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 d
Definition: ke_i.h:81
enum wined3d_scanline_ordering scanline_ordering
Definition: wined3d.h:1615
HRESULT CDECL wined3d_output_get_mode(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, unsigned int mode_idx, struct wined3d_display_mode *mode, bool cached)
Definition: directx.c:1369
HRESULT CDECL wined3d_output_get_display_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
Definition: directx.c:1515

Referenced by dxgi_output_find_closest_matching_mode(), and wined3d_swapchain_state_set_display_mode().

◆ wined3d_output_get_adapter()

◆ wined3d_output_get_desc()

HRESULT CDECL wined3d_output_get_desc ( const struct wined3d_output *  output,
struct wined3d_output_desc *  desc 
)

Definition at line 1256 of file directx.c.

1258{
1259 TRACE("output %p, desc %p.\n", output, desc);
1260
1261 memset(desc, 0, sizeof(*desc));
1262 desc->ordinal = output->ordinal;
1263 lstrcpyW(desc->device_name, output->device_name);
1265 return WINED3D_OK;
1266}
#define lstrcpyW
Definition: compat.h:749
LONG_PTR LPARAM
Definition: minwindef.h:175
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
WCHAR device_name[CCHDEVICENAME]
unsigned int ordinal
static BOOL CALLBACK enum_monitor_proc(HMONITOR monitor, HDC hdc, RECT *rect, LPARAM lparam)
Definition: directx.c:1238

Referenced by d3d8_GetAdapterMonitor(), d3d9_caps_from_wined3dcaps(), d3d9_GetAdapterIdentifier(), d3d9_GetAdapterMonitor(), ddraw_enumerate_secondary_devices(), device_parent_mode_changed(), dxgi_output_GetDesc(), dxgi_output_GetDesc1(), wined3d_device_reset(), wined3d_swapchain_activate(), wined3d_swapchain_init(), wined3d_swapchain_state_resize_target(), and wined3d_swapchain_state_set_fullscreen().

◆ wined3d_output_get_display_mode()

HRESULT CDECL wined3d_output_get_display_mode ( const struct wined3d_output *  output,
struct wined3d_display_mode *  mode,
enum wined3d_display_rotation *  rotation 
)

Definition at line 1515 of file directx.c.

1517{
1518 DEVMODEW m;
1519
1520 TRACE("output %p, display_mode %p, rotation %p.\n", output, mode, rotation);
1521
1522 if (!mode)
1524
1525 memset(&m, 0, sizeof(m));
1526 m.dmSize = sizeof(m);
1527
1529 mode->width = m.dmPelsWidth;
1530 mode->height = m.dmPelsHeight;
1531 mode->refresh_rate = DEFAULT_REFRESH_RATE;
1532 if (m.dmFields & DM_DISPLAYFREQUENCY)
1533 mode->refresh_rate = m.dmDisplayFrequency;
1534 mode->format_id = pixelformat_for_depth(m.dmBitsPerPel);
1535
1536 /* Lie about the format. X11 can't change the color depth, and some apps
1537 * are pretty angry if they SetDisplayMode from 24 to 16 bpp and find out
1538 * that GetDisplayMode still returns 24 bpp. This should probably be
1539 * handled in winex11 instead. */
1540 if (output->screen_format && output->screen_format != mode->format_id)
1541 {
1542 WARN("Overriding format %s with stored format %s.\n",
1543 debug_d3dformat(mode->format_id),
1545 mode->format_id = output->screen_format;
1546 }
1547
1548 if (!(m.dmFields & DM_DISPLAYFLAGS))
1549 mode->scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN;
1550 else if (m.dmDisplayFlags & DM_INTERLACED)
1551 mode->scanline_ordering = WINED3D_SCANLINE_ORDERING_INTERLACED;
1552 else
1553 mode->scanline_ordering = WINED3D_SCANLINE_ORDERING_PROGRESSIVE;
1554
1555 if (rotation)
1556 {
1557 switch (m.dmDisplayOrientation)
1558 {
1559 case DMDO_DEFAULT:
1560 *rotation = WINED3D_DISPLAY_ROTATION_0;
1561 break;
1562 case DMDO_90:
1563 *rotation = WINED3D_DISPLAY_ROTATION_90;
1564 break;
1565 case DMDO_180:
1566 *rotation = WINED3D_DISPLAY_ROTATION_180;
1567 break;
1568 case DMDO_270:
1569 *rotation = WINED3D_DISPLAY_ROTATION_270;
1570 break;
1571 default:
1572 FIXME("Unhandled display rotation %#lx.\n", m.dmDisplayOrientation);
1574 break;
1575 }
1576 }
1577
1578 TRACE("Returning %ux%u@%u %s %#x.\n", mode->width, mode->height,
1579 mode->refresh_rate, debug_d3dformat(mode->format_id),
1580 mode->scanline_ordering);
1581 return WINED3D_OK;
1582}
enum wined3d_format_id pixelformat_for_depth(DWORD depth)
Definition: utils.c:6067
const GLfloat * m
Definition: glext.h:10848
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
enum wined3d_format_id screen_format
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode, DWORD dwFlags)
Definition: display.c:330
#define DEFAULT_REFRESH_RATE
Definition: directx.c:32
@ WINED3D_SCANLINE_ORDERING_INTERLACED
Definition: wined3d.h:827
@ WINED3D_SCANLINE_ORDERING_PROGRESSIVE
Definition: wined3d.h:826
@ WINED3D_DISPLAY_ROTATION_270
Definition: wined3d.h:836
@ WINED3D_DISPLAY_ROTATION_0
Definition: wined3d.h:833
@ WINED3D_DISPLAY_ROTATION_180
Definition: wined3d.h:835
@ WINED3D_DISPLAY_ROTATION_UNSPECIFIED
Definition: wined3d.h:832
@ WINED3D_DISPLAY_ROTATION_90
Definition: wined3d.h:834
#define DMDO_DEFAULT
Definition: wingdi.h:1217
#define DM_INTERLACED
Definition: wingdi.h:1228
#define DMDO_180
Definition: wingdi.h:1219
#define DMDO_270
Definition: wingdi.h:1220
#define DMDO_90
Definition: wingdi.h:1218

Referenced by d3d7_EnumZBufferFormats(), d3d8_GetAdapterDisplayMode(), d3d9_GetAdapterDisplayMode(), d3d9_GetAdapterDisplayModeEx(), d3d_device2_EnumTextureFormats(), d3d_device7_EnumTextureFormats(), ddraw7_EnumSurfaces(), ddraw7_GetAvailableVidMem(), ddraw7_GetDisplayMode(), ddraw7_GetFourCCCodes(), ddraw7_GetMonitorFrequency(), ddraw7_RestoreDisplayMode(), ddraw_attach_d3d_device(), ddraw_surface_create(), dxgi_output_GetDesc(), dxgi_output_GetDesc1(), wined3d_output_find_closest_matching_mode(), wined3d_output_get_raster_status(), wined3d_swapchain_get_display_mode(), wined3d_swapchain_state_init(), wined3d_swapchain_state_set_display_mode(), and wined3d_swapchain_state_set_fullscreen().

◆ wined3d_output_get_gamma_ramp()

HRESULT wined3d_output_get_gamma_ramp ( struct wined3d_output *  output,
struct wined3d_gamma_ramp *  ramp 
)

Definition at line 1772 of file directx.c.

1773{
1774 HDC dc;
1775
1776 TRACE("output %p, ramp %p.\n", output, ramp);
1777
1778 dc = CreateDCW(output->device_name, NULL, NULL, NULL);
1780 DeleteDC(dc);
1781
1782 return WINED3D_OK;
1783}
HDC dc
Definition: cylfrac.c:34
static HDC
Definition: imagelist.c:88
static const BYTE ramp[17]
Definition: dib.c:2957
BOOL WINAPI GetDeviceGammaRamp(_In_ HDC hdc, _Out_writes_bytes_(3 *256 *2) LPVOID lpRamp)
BOOL WINAPI DeleteDC(_In_ HDC)
HDC WINAPI CreateDCW(_In_opt_ LPCWSTR pszDriver, _In_opt_ LPCWSTR pszDevice, _In_opt_ LPCWSTR psz, _In_opt_ const DEVMODEW *pdmInit)

Referenced by wined3d_swapchain_get_gamma_ramp().

◆ wined3d_output_get_mode()

HRESULT CDECL wined3d_output_get_mode ( struct wined3d_output *  output,
enum wined3d_format_id  format_id,
enum wined3d_scanline_ordering  scanline_ordering,
unsigned int  mode_idx,
struct wined3d_display_mode *  mode,
bool  cached 
)

Definition at line 1369 of file directx.c.

1372{
1373 const struct wined3d_adapter *adapter;
1374 const struct wined3d_format *format;
1375 SIZE_T i, match_idx = 0;
1376
1377 TRACE("output %p, format %s, scanline_ordering %#x, mode_idx %u, mode %p.\n",
1378 output, debug_d3dformat(format_id), scanline_ordering, mode_idx, mode);
1379
1380 if (!mode)
1382
1383 adapter = output->adapter;
1385
1386 wined3d_output_update_modes(output, cached);
1387
1388 for (i = 0; i < output->mode_count; ++i)
1389 {
1390 const struct wined3d_display_mode *wined3d_mode = &output->modes[i];
1391
1392 if (mode_matches_filter(adapter, wined3d_mode, format, scanline_ordering) && match_idx++ == mode_idx)
1393 {
1394 *mode = *wined3d_mode;
1397
1398 TRACE("%ux%u@%u %u bpp, %s %#x.\n", mode->width, mode->height, mode->refresh_rate,
1400 debug_d3dformat(mode->format_id), mode->scanline_ordering);
1401 return WINED3D_OK;
1402 }
1403 }
1404
1405 WARN("Invalid mode_idx %u.\n", mode_idx);
1407}
#define CHAR_BIT
Definition: cabinet.h:45
enum wined3d_format_id format_id
Definition: wined3d.h:1614
struct wined3d_display_mode * modes
static bool mode_matches_filter(const struct wined3d_adapter *adapter, const struct wined3d_display_mode *mode, const struct wined3d_format *format, enum wined3d_scanline_ordering scanline_ordering)
Definition: directx.c:1314
static void wined3d_output_update_modes(struct wined3d_output *output, bool cached)
Definition: directx.c:1271

Referenced by d3d8_EnumAdapterModes(), d3d9_EnumAdapterModes(), d3d9_EnumAdapterModesEx(), ddraw7_EnumDisplayModes(), dxgi_output_get_display_mode_list(), and wined3d_output_find_closest_matching_mode().

◆ wined3d_output_get_mode_count()

unsigned int CDECL wined3d_output_get_mode_count ( struct wined3d_output *  output,
enum wined3d_format_id  format_id,
enum wined3d_scanline_ordering  scanline_ordering,
bool  cached 
)

Definition at line 1341 of file directx.c.

1343{
1344 const struct wined3d_adapter *adapter;
1345 const struct wined3d_format *format;
1346 unsigned int count = 0;
1347 SIZE_T i;
1348
1349 TRACE("output %p, format %s, scanline_ordering %#x.\n",
1350 output, debug_d3dformat(format_id), scanline_ordering);
1351
1352 adapter = output->adapter;
1354
1355 wined3d_output_update_modes(output, cached);
1356
1357 for (i = 0; i < output->mode_count; ++i)
1358 {
1359 if (mode_matches_filter(adapter, &output->modes[i], format, scanline_ordering))
1360 ++count;
1361 }
1362
1363 TRACE("Returning %u matching modes (out of %Iu total).\n", count, output->mode_count);
1364
1365 return count;
1366}
GLuint GLuint GLsizei count
Definition: gl.h:1545

Referenced by d3d8_GetAdapterModeCount(), d3d9_GetAdapterModeCount(), d3d9_GetAdapterModeCountEx(), dxgi_output_get_display_mode_list(), wined3d_check_device_type(), and wined3d_output_find_closest_matching_mode().

◆ wined3d_output_get_raster_status()

HRESULT CDECL wined3d_output_get_raster_status ( const struct wined3d_output *  output,
struct wined3d_raster_status *  raster_status 
)

Definition at line 1814 of file directx.c.

1816{
1817 LONGLONG freq_per_frame, freq_per_line;
1818 LARGE_INTEGER counter, freq_per_sec;
1820 static UINT once;
1821
1822 if (!once++)
1823 FIXME("output %p, raster_status %p semi-stub!\n", output, raster_status);
1824 else
1825 WARN("output %p, raster_status %p semi-stub!\n", output, raster_status);
1826
1827 /* Obtaining the raster status is a widely implemented but optional
1828 * feature. When this method returns OK StarCraft 2 expects the
1829 * raster_status->InVBlank value to actually change over time.
1830 * And Endless Alice Crysis doesn't care even if this method fails.
1831 * Thus this method returns OK and fakes raster_status by
1832 * QueryPerformanceCounter. */
1833
1838 if (mode.refresh_rate == DEFAULT_REFRESH_RATE)
1839 mode.refresh_rate = 60;
1840
1841 freq_per_frame = freq_per_sec.QuadPart / mode.refresh_rate;
1842 /* Assume 20 scan lines in the vertical blank. */
1843 freq_per_line = freq_per_frame / (mode.height + 20);
1844 raster_status->scan_line = (counter.QuadPart % freq_per_frame) / freq_per_line;
1845 if (raster_status->scan_line < mode.height)
1846 raster_status->in_vblank = FALSE;
1847 else
1848 {
1849 raster_status->scan_line = 0;
1850 raster_status->in_vblank = TRUE;
1851 }
1852
1853 TRACE("Returning fake value, in_vblank %u, scan_line %u.\n",
1854 raster_status->in_vblank, raster_status->scan_line);
1855
1856 return WINED3D_OK;
1857}
BOOL WINAPI QueryPerformanceFrequency(OUT PLARGE_INTEGER lpFrequency)
Definition: perfcnt.c:45
BOOL WINAPI QueryPerformanceCounter(OUT PLARGE_INTEGER lpPerformanceCount)
Definition: perfcnt.c:23
unsigned int UINT
Definition: sysinfo.c:13
int64_t LONGLONG
Definition: typedefs.h:68
LONGLONG QuadPart
Definition: typedefs.h:114

Referenced by ddraw7_GetScanLine(), ddraw7_GetVerticalBlankStatus(), and wined3d_swapchain_get_raster_status().

◆ wined3d_output_init()

static HRESULT wined3d_output_init ( struct wined3d_output *  output,
unsigned int  ordinal,
struct wined3d_adapter *  adapter,
const WCHAR *  device_name 
)
static

Definition at line 128 of file directx.c.

130{
131 D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME open_adapter_desc;
132 D3DKMT_CREATEDEVICE create_device_desc = {{0}};
133 D3DKMT_CLOSEADAPTER close_adapter_desc;
134
135 TRACE("output %p, device_name %s.\n", output, wine_dbgstr_w(device_name));
136
137 lstrcpyW(open_adapter_desc.DeviceName, device_name);
138 if (D3DKMTOpenAdapterFromGdiDisplayName(&open_adapter_desc))
139 return E_INVALIDARG;
140 close_adapter_desc.hAdapter = open_adapter_desc.hAdapter;
141 D3DKMTCloseAdapter(&close_adapter_desc);
142
143 create_device_desc.hAdapter = adapter->kmt_adapter;
144 if (D3DKMTCreateDevice(&create_device_desc))
145 return E_FAIL;
146
147 output->ordinal = ordinal;
149 output->adapter = adapter;
151 output->kmt_device = create_device_desc.hDevice;
152 output->vidpn_source_id = open_adapter_desc.VidPnSourceId;
153
154 return WINED3D_OK;
155}
static const WCHAR device_name[]
Definition: btrfs.c:60
D3DKMT_HANDLE hDevice
Definition: d3dkmthk.h:100
D3DKMT_HANDLE hAdapter
Definition: d3dkmthk.h:96
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId
Definition: d3dkmthk.h:129
D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id
NTSTATUS WINAPI D3DKMTCreateDevice(D3DKMT_CREATEDEVICE *desc)
NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME *desc)

Referenced by wined3d_adapter_create_output().

◆ wined3d_output_release_ownership()

void CDECL wined3d_output_release_ownership ( const struct wined3d_output *  output)

Definition at line 77 of file directx.c.

78{
79 D3DKMT_SETVIDPNSOURCEOWNER set_owner_desc = {0};
80
81 TRACE("output %p.\n", output);
82
83 set_owner_desc.hDevice = output->kmt_device;
84 D3DKMTSetVidPnSourceOwner(&set_owner_desc);
85}
NTSTATUS WINAPI D3DKMTSetVidPnSourceOwner(const D3DKMT_SETVIDPNSOURCEOWNER *desc)

Referenced by dxgi_output_ReleaseOwnership().

◆ wined3d_output_set_display_mode()

HRESULT CDECL wined3d_output_set_display_mode ( struct wined3d_output *  output,
const struct wined3d_display_mode *  mode 
)

Definition at line 1693 of file directx.c.

1695{
1696 enum wined3d_format_id new_format_id;
1697 const struct wined3d_format *format;
1698 DEVMODEW new_mode, current_mode;
1699 LONG ret;
1700
1701 TRACE("output %p, mode %p.\n", output, mode);
1702 TRACE("mode %ux%u@%u %s %#x.\n", mode->width, mode->height, mode->refresh_rate,
1703 debug_d3dformat(mode->format_id), mode->scanline_ordering);
1704
1705 memset(&new_mode, 0, sizeof(new_mode));
1706 new_mode.dmSize = sizeof(new_mode);
1707 memset(&current_mode, 0, sizeof(current_mode));
1708 current_mode.dmSize = sizeof(current_mode);
1709
1711
1713 new_mode.dmBitsPerPel = format->byte_count * CHAR_BIT;
1714 new_mode.dmPelsWidth = mode->width;
1715 new_mode.dmPelsHeight = mode->height;
1716 new_mode.dmDisplayFrequency = mode->refresh_rate;
1717 if (mode->refresh_rate)
1718 new_mode.dmFields |= DM_DISPLAYFREQUENCY;
1719 if (mode->scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN)
1720 {
1721 new_mode.dmFields |= DM_DISPLAYFLAGS;
1722 if (mode->scanline_ordering == WINED3D_SCANLINE_ORDERING_INTERLACED)
1723 new_mode.dmDisplayFlags |= DM_INTERLACED;
1724 }
1725 new_format_id = mode->format_id;
1726
1727 /* Only change the mode if necessary. */
1728 if (!EnumDisplaySettingsW(output->device_name, ENUM_CURRENT_SETTINGS, &current_mode))
1729 {
1730 ERR("Failed to get current display mode.\n");
1731 }
1732 else if (equal_display_mode(&current_mode, &new_mode))
1733 {
1734 TRACE("Skipping redundant mode setting call.\n");
1735 output->screen_format = new_format_id;
1736 return WINED3D_OK;
1737 }
1738
1741 {
1742 if (new_mode.dmFields & DM_DISPLAYFREQUENCY)
1743 {
1744 WARN("ChangeDisplaySettingsExW failed, trying without the refresh rate.\n");
1745 new_mode.dmFields &= ~DM_DISPLAYFREQUENCY;
1746 new_mode.dmDisplayFrequency = 0;
1748 }
1751 }
1752
1753 /* Store the new values. */
1754 output->screen_format = new_format_id;
1755
1756 return WINED3D_OK;
1757}
long LONG
Definition: pedump.c:60
#define DISP_CHANGE_SUCCESSFUL
Definition: winuser.h:190
#define CDS_FULLSCREEN
Definition: winuser.h:183
WORD dmSize
Definition: wingdi.h:2066
LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR lpszDeviceName, LPDEVMODEW lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)
Definition: display.c:585
BOOL WINAPI EnumDisplaySettingsW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode)
Definition: display.c:408
static BOOL equal_display_mode(const DEVMODEW *mode1, const DEVMODEW *mode2)
Definition: directx.c:1584
wined3d_format_id
Definition: wined3d.h:126

Referenced by ddraw7_SetDisplayMode(), wined3d_swapchain_activate(), wined3d_swapchain_init(), and wined3d_swapchain_state_set_display_mode().

◆ wined3d_output_set_gamma_ramp()

HRESULT CDECL wined3d_output_set_gamma_ramp ( struct wined3d_output *  output,
const struct wined3d_gamma_ramp *  ramp 
)

Definition at line 1759 of file directx.c.

1760{
1761 HDC dc;
1762
1763 TRACE("output %p, ramp %p.\n", output, ramp);
1764
1765 dc = CreateDCW(output->device_name, NULL, NULL, NULL);
1766 SetDeviceGammaRamp(dc, (void *)ramp);
1767 DeleteDC(dc);
1768
1769 return WINED3D_OK;
1770}
BOOL WINAPI SetDeviceGammaRamp(_In_ HDC hdc, _In_reads_bytes_(3 *256 *2) LPVOID lpRamp)

Referenced by dxgi_output_SetGammaControl(), and wined3d_swapchain_set_gamma_ramp().

◆ wined3d_output_take_ownership()

HRESULT CDECL wined3d_output_take_ownership ( const struct wined3d_output *  output,
BOOL  exclusive 
)

Definition at line 87 of file directx.c.

88{
89 D3DKMT_SETVIDPNSOURCEOWNER set_owner_desc;
92
93 TRACE("output %p, exclusive %#x.\n", output, exclusive);
94
96 set_owner_desc.pType = &owner_type;
97 set_owner_desc.pVidPnSourceId = &output->vidpn_source_id;
98 set_owner_desc.VidPnSourceCount = 1;
99 set_owner_desc.hDevice = output->kmt_device;
100 status = D3DKMTSetVidPnSourceOwner(&set_owner_desc);
101
102 switch (status)
103 {
107 return E_INVALIDARG;
109 return E_NOINTERFACE;
110 case STATUS_SUCCESS:
111 return S_OK;
112 default:
113 FIXME("Unhandled error %#lx.\n", status);
114 return E_FAIL;
115 }
116}
#define S_OK
Definition: intsafe.h:52
#define STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE
Definition: ntstatus.h:2094
#define STATUS_PROCEDURE_NOT_FOUND
Definition: ntstatus.h:452
const D3DKMT_VIDPNSOURCEOWNER_TYPE * pType
Definition: d3dkmthk.h:141
const D3DDDI_VIDEO_PRESENT_SOURCE_ID * pVidPnSourceId
Definition: d3dkmthk.h:142
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
enum _D3DKMT_VIDPNSOURCEOWNER_TYPE D3DKMT_VIDPNSOURCEOWNER_TYPE
@ D3DKMT_VIDPNSOURCEOWNER_EXCLUSIVE
Definition: d3dkmthk.h:29
@ D3DKMT_VIDPNSOURCEOWNER_SHARED
Definition: d3dkmthk.h:28
#define E_NOINTERFACE
Definition: winerror.h:3479
#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
Definition: winerror.h:7140

Referenced by dxgi_output_TakeOwnership().

◆ wined3d_output_update_modes()

static void wined3d_output_update_modes ( struct wined3d_output *  output,
bool  cached 
)
static

Definition at line 1271 of file directx.c.

1272{
1273 struct wined3d_display_mode *wined3d_mode;
1274 DEVMODEW mode = {.dmSize = sizeof(mode)};
1275 unsigned int i;
1276
1277 if (output->modes_valid && cached)
1278 return;
1279
1280 output->mode_count = 0;
1281
1282 for (i = 0; EnumDisplaySettingsExW(output->device_name, i, &mode, 0); ++i)
1283 {
1284 if (!wined3d_array_reserve((void **)&output->modes, &output->modes_size,
1285 output->mode_count + 1, sizeof(*output->modes)))
1286 return;
1287
1288 wined3d_mode = &output->modes[output->mode_count++];
1289 wined3d_mode->width = mode.dmPelsWidth;
1290 wined3d_mode->height = mode.dmPelsHeight;
1291 wined3d_mode->format_id = pixelformat_for_depth(mode.dmBitsPerPel);
1292
1293 if (mode.dmFields & DM_DISPLAYFREQUENCY)
1294 wined3d_mode->refresh_rate = mode.dmDisplayFrequency;
1295 else
1296 wined3d_mode->refresh_rate = DEFAULT_REFRESH_RATE;
1297
1298 if (mode.dmFields & DM_DISPLAYFLAGS)
1299 {
1300 if (mode.dmDisplayFlags & DM_INTERLACED)
1302 else
1304 }
1305 else
1306 {
1308 }
1309 }
1310
1311 output->modes_valid = true;
1312}

Referenced by wined3d_output_get_mode(), and wined3d_output_get_mode_count().

◆ wined3d_register_software_device()

HRESULT CDECL wined3d_register_software_device ( struct wined3d *  wined3d,
void *  init_function 
)

Definition at line 1231 of file directx.c.

1232{
1233 FIXME("wined3d %p, init_function %p stub!\n", wined3d, init_function);
1234
1235 return WINED3D_OK;
1236}

Referenced by d3d8_RegisterSoftwareDevice(), and d3d9_RegisterSoftwareDevice().

◆ wined3d_restore_display_modes()

HRESULT CDECL wined3d_restore_display_modes ( struct wined3d *  wined3d)

Definition at line 1618 of file directx.c.

1619{
1620 unsigned int adapter_idx, output_idx = 0;
1621 DEVMODEW current_mode, registry_mode;
1622 struct wined3d_adapter *adapter;
1623 DISPLAY_DEVICEW display_device;
1624 struct wined3d_output *output;
1625 BOOL do_mode_change = FALSE;
1626 LONG ret;
1627
1628 TRACE("wined3d %p.\n", wined3d);
1629
1630 memset(&current_mode, 0, sizeof(current_mode));
1631 memset(&registry_mode, 0, sizeof(registry_mode));
1632 current_mode.dmSize = sizeof(current_mode);
1633 registry_mode.dmSize = sizeof(registry_mode);
1634 display_device.cb = sizeof(display_device);
1635 while (EnumDisplayDevicesW(NULL, output_idx++, &display_device, 0))
1636 {
1637 if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_CURRENT_SETTINGS, &current_mode, 0))
1638 {
1639 ERR("Failed to read the current display mode for %s.\n",
1640 wine_dbgstr_w(display_device.DeviceName));
1642 }
1643
1644 if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_REGISTRY_SETTINGS, &registry_mode, 0))
1645 {
1646 ERR("Failed to read the registry display mode for %s.\n",
1647 wine_dbgstr_w(display_device.DeviceName));
1649 }
1650
1651 if (!equal_display_mode(&current_mode, &registry_mode))
1652 {
1653 do_mode_change = TRUE;
1654 break;
1655 }
1656 }
1657
1658 if (do_mode_change)
1659 {
1662 {
1663 ERR("Failed to restore all outputs to their registry display settings, error %ld.\n", ret);
1665 }
1666 }
1667 else
1668 {
1669 TRACE("Skipping redundant mode setting call.\n");
1670 }
1671
1672 for (adapter_idx = 0; adapter_idx < wined3d->adapter_count; ++adapter_idx)
1673 {
1674 adapter = wined3d->adapters[adapter_idx];
1675 for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
1676 {
1677 output = &adapter->outputs[output_idx];
1678
1679 if (!EnumDisplaySettingsExW(output->device_name, ENUM_CURRENT_SETTINGS, &current_mode, 0))
1680 {
1681 ERR("Failed to read the current display mode for %s.\n",
1682 wine_dbgstr_w(output->device_name));
1684 }
1685
1686 output->screen_format = pixelformat_for_depth(current_mode.dmBitsPerPel);
1687 }
1688 }
1689
1690 return WINED3D_OK;
1691}
#define ENUM_REGISTRY_SETTINGS
Definition: winuser.h:180

Referenced by ddraw7_RestoreDisplayMode(), wined3d_swapchain_activate(), wined3d_swapchain_cleanup(), wined3d_swapchain_init(), wined3d_swapchain_state_set_display_mode(), and wined3d_swapchain_state_set_fullscreen().

Variable Documentation

◆ adapter_budget_change_notifications

struct list adapter_budget_change_notifications = LIST_INIT( adapter_budget_change_notifications )
static

◆ driver_version_table

const struct driver_version_information driver_version_table[]
static

Definition at line 279 of file directx.c.

Referenced by get_driver_version_info().

◆ gpu_description_table

const struct wined3d_gpu_description gpu_description_table[]
static

Definition at line 335 of file directx.c.

Referenced by wined3d_get_gpu_description().

◆ IID_D3DDEVICE_D3DUID

const GUID IID_D3DDEVICE_D3DUID = { 0xaeb2cdd4, 0x6e41, 0x43ea, { 0x94,0x1c,0x83,0x61,0xcc,0x76,0x07,0x81 } }
static

Definition at line 57 of file directx.c.

Referenced by wined3d_adapter_get_identifier().

◆ magLookup

const GLenum magLookup[]
Initial value:
=
{
}
#define GL_LINEAR
Definition: gl.h:421
#define GL_NEAREST
Definition: gl.h:678

Definition at line 71 of file directx.c.

Referenced by wined3d_gl_mag_filter().

◆ minMipLookup

const struct min_lookup minMipLookup[]
Initial value:
=
{
}
#define GL_NEAREST_MIPMAP_NEAREST
Definition: gl.h:667
#define GL_NEAREST_MIPMAP_LINEAR
Definition: gl.h:668
#define GL_LINEAR_MIPMAP_LINEAR
Definition: gl.h:670
#define GL_LINEAR_MIPMAP_NEAREST
Definition: gl.h:669

Definition at line 63 of file directx.c.

Referenced by wined3d_gl_min_mip_filter().

◆ misc_state_template_no3d

const struct wined3d_state_entry_template misc_state_template_no3d[]
static

Definition at line 2803 of file directx.c.

Referenced by wined3d_adapter_no3d_create().

◆ notification_thread

◆ notification_thread_stop_event

HANDLE notification_thread_stop_event
static

◆ wined3d_adapter_no3d_ops

const struct wined3d_adapter_ops wined3d_adapter_no3d_ops
static

Definition at line 3263 of file directx.c.

Referenced by wined3d_adapter_no3d_create().

◆ wined3d_null_parent_ops