2003-11-14 04:50:35 +01:00
|
|
|
/*
|
|
|
|
* Direct3D wine internal private include file
|
|
|
|
*
|
|
|
|
* Copyright 2002-2003 The wine-d3d team
|
|
|
|
* Copyright 2002-2003 Raphael Junqueira
|
2009-05-01 09:13:54 +02:00
|
|
|
* Copyright 2002-2003, 2004 Jason Edmeades
|
2005-06-23 13:05:24 +02:00
|
|
|
* Copyright 2005 Oliver Stieber
|
2013-05-14 17:38:17 +02:00
|
|
|
* Copyright 2006-2011, 2013 Stefan Dösinger for CodeWeavers
|
2003-11-14 04:50:35 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
2003-11-14 04:50:35 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __WINE_WINED3D_PRIVATE_H
|
|
|
|
#define __WINE_WINED3D_PRIVATE_H
|
|
|
|
|
2022-03-03 09:51:34 +01:00
|
|
|
#define USE_WIN32_VULKAN
|
|
|
|
#define USE_WIN32_OPENGL
|
|
|
|
|
2012-07-24 11:32:23 +02:00
|
|
|
#ifdef USE_WIN32_OPENGL
|
|
|
|
#define WINE_GLAPI __stdcall
|
|
|
|
#else
|
|
|
|
#define WINE_GLAPI
|
|
|
|
#endif
|
|
|
|
|
2017-04-13 00:11:01 +02:00
|
|
|
#include <assert.h>
|
2003-11-14 04:50:35 +01:00
|
|
|
#include <stdarg.h>
|
2020-04-17 17:51:10 +02:00
|
|
|
#include <stdbool.h>
|
2021-12-01 15:56:55 +01:00
|
|
|
#include <sys/types.h>
|
2004-11-29 18:53:42 +01:00
|
|
|
#include <math.h>
|
2009-12-09 20:32:09 +01:00
|
|
|
#include <limits.h>
|
2022-03-03 09:51:34 +01:00
|
|
|
#include <float.h>
|
2016-04-14 19:32:46 +02:00
|
|
|
#include "ntstatus.h"
|
|
|
|
#define WIN32_NO_STATUS
|
2004-09-23 06:34:27 +02:00
|
|
|
#define NONAMELESSUNION
|
|
|
|
#define NONAMELESSSTRUCT
|
2004-11-23 14:52:46 +01:00
|
|
|
#define COBJMACROS
|
2003-11-14 04:50:35 +01:00
|
|
|
#include "windef.h"
|
|
|
|
#include "winbase.h"
|
2004-09-23 06:34:27 +02:00
|
|
|
#include "winreg.h"
|
2003-11-14 04:50:35 +01:00
|
|
|
#include "wingdi.h"
|
|
|
|
#include "winuser.h"
|
2016-04-14 19:32:46 +02:00
|
|
|
#include "winternl.h"
|
|
|
|
#include "ddk/d3dkmthk.h"
|
2003-11-14 04:50:35 +01:00
|
|
|
#include "wine/debug.h"
|
2018-02-14 07:39:59 +01:00
|
|
|
#include "wine/heap.h"
|
2003-11-14 04:50:35 +01:00
|
|
|
|
2008-11-25 11:57:39 +01:00
|
|
|
#include "objbase.h"
|
|
|
|
#include "wine/wined3d.h"
|
2008-11-20 13:32:00 +01:00
|
|
|
#include "wined3d_gl.h"
|
2019-04-03 11:11:32 +02:00
|
|
|
#include "wined3d_vk.h"
|
2006-06-09 09:33:01 +02:00
|
|
|
#include "wine/list.h"
|
2009-06-03 10:47:26 +02:00
|
|
|
#include "wine/rbtree.h"
|
2012-07-24 11:32:23 +02:00
|
|
|
#include "wine/wgl_driver.h"
|
2003-11-14 04:50:35 +01:00
|
|
|
|
2021-07-01 00:38:31 +02:00
|
|
|
static inline size_t align(size_t addr, size_t alignment)
|
|
|
|
{
|
|
|
|
return (addr + (alignment - 1)) & ~(alignment - 1);
|
|
|
|
}
|
|
|
|
|
2017-10-18 00:25:08 +02:00
|
|
|
#define MAKEDWORD_VERSION(maj, min) (((maj & 0xffffu) << 16) | (min & 0xffffu))
|
|
|
|
|
2009-07-01 09:46:19 +02:00
|
|
|
/* Driver quirks */
|
|
|
|
#define WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT 0x00000001
|
|
|
|
#define WINED3D_QUIRK_GLSL_CLIP_VARYING 0x00000004
|
2009-07-10 11:28:49 +02:00
|
|
|
#define WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA 0x00000008
|
2009-09-28 12:30:48 +02:00
|
|
|
#define WINED3D_QUIRK_NV_CLIP_BROKEN 0x00000010
|
2010-03-17 21:59:51 +01:00
|
|
|
#define WINED3D_QUIRK_FBO_TEX_UPDATE 0x00000020
|
2011-07-08 21:11:29 +02:00
|
|
|
#define WINED3D_QUIRK_BROKEN_RGBA16 0x00000040
|
2011-09-04 22:43:49 +02:00
|
|
|
#define WINED3D_QUIRK_INFO_LOG_SPAM 0x00000080
|
2011-11-03 15:26:35 +01:00
|
|
|
#define WINED3D_QUIRK_LIMITED_TEX_FILTERING 0x00000100
|
2013-06-18 16:17:19 +02:00
|
|
|
#define WINED3D_QUIRK_BROKEN_ARB_FOG 0x00000200
|
2019-05-20 18:49:53 +02:00
|
|
|
#define WINED3D_QUIRK_NO_INDEPENDENT_BIT_DEPTHS 0x00000400
|
2009-07-01 09:46:19 +02:00
|
|
|
|
2019-12-10 18:56:15 +01:00
|
|
|
#define WINED3D_MAX_DIRTY_REGION_COUNT 7
|
|
|
|
|
2020-02-18 17:52:04 +01:00
|
|
|
#define WINED3D_ALPHA_TO_COVERAGE_ENABLE MAKEFOURCC('A','2','M','1')
|
|
|
|
#define WINED3D_ALPHA_TO_COVERAGE_DISABLE MAKEFOURCC('A','2','M','0')
|
|
|
|
|
2020-05-12 22:42:55 +02:00
|
|
|
#define WINED3D_BITMAP_SIZE(x) (((x) + 31) >> 5)
|
|
|
|
|
2019-07-31 22:18:06 +02:00
|
|
|
struct wined3d_fragment_pipe_ops;
|
2019-03-17 18:51:05 +01:00
|
|
|
struct wined3d_adapter;
|
2020-05-12 22:42:58 +02:00
|
|
|
struct wined3d_buffer_vk;
|
2018-10-30 10:48:43 +01:00
|
|
|
struct wined3d_context;
|
2020-05-26 18:10:11 +02:00
|
|
|
struct wined3d_context_vk;
|
2020-01-24 17:02:05 +01:00
|
|
|
struct wined3d_gl_info;
|
2018-10-30 10:48:43 +01:00
|
|
|
struct wined3d_state;
|
2019-08-13 10:31:39 +02:00
|
|
|
struct wined3d_swapchain_gl;
|
2018-10-30 10:48:43 +01:00
|
|
|
struct wined3d_texture_gl;
|
|
|
|
struct wined3d_vertex_pipe_ops;
|
|
|
|
|
2017-03-06 10:45:23 +01:00
|
|
|
enum wined3d_ffp_idx
|
|
|
|
{
|
|
|
|
WINED3D_FFP_POSITION = 0,
|
|
|
|
WINED3D_FFP_BLENDWEIGHT = 1,
|
|
|
|
WINED3D_FFP_BLENDINDICES = 2,
|
|
|
|
WINED3D_FFP_NORMAL = 3,
|
|
|
|
WINED3D_FFP_PSIZE = 4,
|
|
|
|
WINED3D_FFP_DIFFUSE = 5,
|
|
|
|
WINED3D_FFP_SPECULAR = 6,
|
|
|
|
WINED3D_FFP_TEXCOORD0 = 7,
|
|
|
|
WINED3D_FFP_TEXCOORD1 = 8,
|
|
|
|
WINED3D_FFP_TEXCOORD2 = 9,
|
|
|
|
WINED3D_FFP_TEXCOORD3 = 10,
|
|
|
|
WINED3D_FFP_TEXCOORD4 = 11,
|
|
|
|
WINED3D_FFP_TEXCOORD5 = 12,
|
|
|
|
WINED3D_FFP_TEXCOORD6 = 13,
|
|
|
|
WINED3D_FFP_TEXCOORD7 = 14,
|
|
|
|
WINED3D_FFP_ATTRIBS_COUNT = 15,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum wined3d_ffp_emit_idx
|
|
|
|
{
|
|
|
|
WINED3D_FFP_EMIT_FLOAT1,
|
|
|
|
WINED3D_FFP_EMIT_FLOAT2,
|
|
|
|
WINED3D_FFP_EMIT_FLOAT3,
|
|
|
|
WINED3D_FFP_EMIT_FLOAT4,
|
|
|
|
WINED3D_FFP_EMIT_D3DCOLOR,
|
|
|
|
WINED3D_FFP_EMIT_UBYTE4,
|
|
|
|
WINED3D_FFP_EMIT_SHORT2,
|
|
|
|
WINED3D_FFP_EMIT_SHORT4,
|
|
|
|
WINED3D_FFP_EMIT_UBYTE4N,
|
|
|
|
WINED3D_FFP_EMIT_SHORT2N,
|
|
|
|
WINED3D_FFP_EMIT_SHORT4N,
|
|
|
|
WINED3D_FFP_EMIT_USHORT2N,
|
|
|
|
WINED3D_FFP_EMIT_USHORT4N,
|
|
|
|
WINED3D_FFP_EMIT_UDEC3,
|
|
|
|
WINED3D_FFP_EMIT_DEC3N,
|
|
|
|
WINED3D_FFP_EMIT_FLOAT16_2,
|
|
|
|
WINED3D_FFP_EMIT_FLOAT16_4,
|
|
|
|
WINED3D_FFP_EMIT_INVALID,
|
|
|
|
WINED3D_FFP_EMIT_COUNT,
|
|
|
|
};
|
|
|
|
|
2008-12-03 14:53:43 +01:00
|
|
|
/* Texture format fixups */
|
|
|
|
|
|
|
|
enum fixup_channel_source
|
|
|
|
{
|
|
|
|
CHANNEL_SOURCE_ZERO = 0,
|
|
|
|
CHANNEL_SOURCE_ONE = 1,
|
|
|
|
CHANNEL_SOURCE_X = 2,
|
|
|
|
CHANNEL_SOURCE_Y = 3,
|
|
|
|
CHANNEL_SOURCE_Z = 4,
|
|
|
|
CHANNEL_SOURCE_W = 5,
|
2010-03-02 16:21:45 +01:00
|
|
|
CHANNEL_SOURCE_COMPLEX0 = 6,
|
|
|
|
CHANNEL_SOURCE_COMPLEX1 = 7,
|
2008-12-03 14:53:43 +01:00
|
|
|
};
|
|
|
|
|
2010-03-02 16:21:45 +01:00
|
|
|
enum complex_fixup
|
2008-12-03 14:53:43 +01:00
|
|
|
{
|
2010-03-19 13:19:53 +01:00
|
|
|
COMPLEX_FIXUP_NONE = 0,
|
|
|
|
COMPLEX_FIXUP_YUY2 = 1,
|
|
|
|
COMPLEX_FIXUP_UYVY = 2,
|
|
|
|
COMPLEX_FIXUP_YV12 = 3,
|
|
|
|
COMPLEX_FIXUP_P8 = 4,
|
2014-02-17 13:46:00 +01:00
|
|
|
COMPLEX_FIXUP_NV12 = 5,
|
2020-04-17 17:51:22 +02:00
|
|
|
COMPLEX_FIXUP_YUV = 6,
|
2008-12-03 14:53:43 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#include <pshpack2.h>
|
|
|
|
struct color_fixup_desc
|
|
|
|
{
|
2015-02-10 20:14:48 +01:00
|
|
|
unsigned short x_sign_fixup : 1;
|
|
|
|
unsigned short x_source : 3;
|
|
|
|
unsigned short y_sign_fixup : 1;
|
|
|
|
unsigned short y_source : 3;
|
|
|
|
unsigned short z_sign_fixup : 1;
|
|
|
|
unsigned short z_source : 3;
|
|
|
|
unsigned short w_sign_fixup : 1;
|
|
|
|
unsigned short w_source : 3;
|
2008-12-03 14:53:43 +01:00
|
|
|
};
|
|
|
|
#include <poppack.h>
|
|
|
|
|
2017-03-06 10:45:23 +01:00
|
|
|
struct wined3d_d3d_limits
|
|
|
|
{
|
|
|
|
unsigned int vs_version, hs_version, ds_version, gs_version, ps_version, cs_version;
|
|
|
|
DWORD vs_uniform_count;
|
|
|
|
DWORD ps_uniform_count;
|
|
|
|
unsigned int varying_count;
|
|
|
|
unsigned int ffp_textures;
|
|
|
|
unsigned int ffp_blend_stages;
|
|
|
|
unsigned int ffp_vertex_blend_matrices;
|
|
|
|
unsigned int active_light_count;
|
2018-08-23 14:34:04 +02:00
|
|
|
|
2018-08-24 15:44:03 +02:00
|
|
|
unsigned int max_rt_count;
|
2018-09-20 09:02:02 +02:00
|
|
|
unsigned int max_clip_distances;
|
2018-09-25 23:14:37 +02:00
|
|
|
unsigned int texture_size;
|
2018-08-23 14:34:04 +02:00
|
|
|
float pointsize_max;
|
2017-03-06 10:45:23 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef void (WINE_GLAPI *wined3d_ffp_attrib_func)(const void *data);
|
|
|
|
typedef void (WINE_GLAPI *wined3d_ffp_texcoord_func)(GLenum unit, const void *data);
|
|
|
|
typedef void (WINE_GLAPI *wined3d_generic_attrib_func)(GLuint idx, const void *data);
|
|
|
|
extern wined3d_ffp_attrib_func specular_func_3ubv DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
struct wined3d_ffp_attrib_ops
|
|
|
|
{
|
|
|
|
wined3d_ffp_attrib_func position[WINED3D_FFP_EMIT_COUNT];
|
|
|
|
wined3d_ffp_attrib_func diffuse[WINED3D_FFP_EMIT_COUNT];
|
|
|
|
wined3d_ffp_attrib_func specular[WINED3D_FFP_EMIT_COUNT];
|
|
|
|
wined3d_ffp_attrib_func normal[WINED3D_FFP_EMIT_COUNT];
|
|
|
|
wined3d_ffp_texcoord_func texcoord[WINED3D_FFP_EMIT_COUNT];
|
|
|
|
wined3d_generic_attrib_func generic[WINED3D_FFP_EMIT_COUNT];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_d3d_info
|
|
|
|
{
|
|
|
|
struct wined3d_d3d_limits limits;
|
|
|
|
struct wined3d_ffp_attrib_ops ffp_attrib_ops;
|
2019-08-05 22:53:15 +02:00
|
|
|
uint32_t wined3d_creation_flags;
|
|
|
|
uint32_t xyzrhw : 1;
|
|
|
|
uint32_t emulated_flatshading : 1;
|
|
|
|
uint32_t ffp_generic_attributes : 1;
|
2019-08-05 22:53:17 +02:00
|
|
|
uint32_t ffp_alpha_test : 1;
|
2019-08-05 22:53:15 +02:00
|
|
|
uint32_t vs_clipping : 1;
|
|
|
|
uint32_t shader_color_key : 1;
|
|
|
|
uint32_t shader_double_precision : 1;
|
|
|
|
uint32_t shader_output_interpolation : 1;
|
2021-05-31 21:12:56 +02:00
|
|
|
uint32_t frag_coord_correction : 1;
|
2019-08-05 22:53:15 +02:00
|
|
|
uint32_t viewport_array_index_any_shader : 1;
|
|
|
|
uint32_t texture_npot : 1;
|
|
|
|
uint32_t texture_npot_conditional : 1;
|
|
|
|
uint32_t draw_base_vertex_offset : 1;
|
|
|
|
uint32_t vertex_bgra : 1;
|
|
|
|
uint32_t texture_swizzle : 1;
|
|
|
|
uint32_t srgb_read_control : 1;
|
|
|
|
uint32_t srgb_write_control : 1;
|
2019-08-05 22:53:16 +02:00
|
|
|
uint32_t clip_control : 1;
|
2019-08-13 22:02:09 +02:00
|
|
|
uint32_t full_ffp_varyings : 1;
|
2020-03-12 10:49:50 +01:00
|
|
|
uint32_t scaled_resolve : 1;
|
2021-09-10 15:58:40 +02:00
|
|
|
uint32_t pbo : 1;
|
2021-11-03 18:15:30 +01:00
|
|
|
uint32_t subpixel_viewport : 1;
|
2018-06-13 12:24:01 +02:00
|
|
|
enum wined3d_feature_level feature_level;
|
2019-03-03 19:55:22 +01:00
|
|
|
|
|
|
|
DWORD multisample_draw_location;
|
2021-11-03 18:15:28 +01:00
|
|
|
|
|
|
|
float filling_convention_offset;
|
2017-03-06 10:45:23 +01:00
|
|
|
};
|
|
|
|
|
2008-12-03 14:53:43 +01:00
|
|
|
static const struct color_fixup_desc COLOR_FIXUP_IDENTITY =
|
|
|
|
{0, CHANNEL_SOURCE_X, 0, CHANNEL_SOURCE_Y, 0, CHANNEL_SOURCE_Z, 0, CHANNEL_SOURCE_W};
|
|
|
|
|
2010-03-02 16:21:45 +01:00
|
|
|
static inline struct color_fixup_desc create_complex_fixup_desc(enum complex_fixup complex_fixup)
|
2008-12-03 14:53:43 +01:00
|
|
|
{
|
|
|
|
struct color_fixup_desc fixup =
|
|
|
|
{
|
2015-08-26 12:46:47 +02:00
|
|
|
0u, complex_fixup & (1u << 0) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
|
|
|
|
0u, complex_fixup & (1u << 1) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
|
|
|
|
0u, complex_fixup & (1u << 2) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
|
|
|
|
0u, complex_fixup & (1u << 3) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
|
2008-12-03 14:53:43 +01:00
|
|
|
};
|
|
|
|
return fixup;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline BOOL is_identity_fixup(struct color_fixup_desc fixup)
|
|
|
|
{
|
|
|
|
return !memcmp(&fixup, &COLOR_FIXUP_IDENTITY, sizeof(fixup));
|
|
|
|
}
|
|
|
|
|
2010-03-02 16:21:45 +01:00
|
|
|
static inline BOOL is_complex_fixup(struct color_fixup_desc fixup)
|
2008-12-03 14:53:43 +01:00
|
|
|
{
|
2010-03-02 16:21:45 +01:00
|
|
|
return fixup.x_source == CHANNEL_SOURCE_COMPLEX0 || fixup.x_source == CHANNEL_SOURCE_COMPLEX1;
|
2008-12-03 14:53:43 +01:00
|
|
|
}
|
|
|
|
|
2015-10-22 00:20:56 +02:00
|
|
|
static inline BOOL is_scaling_fixup(struct color_fixup_desc fixup)
|
|
|
|
{
|
|
|
|
return fixup.x_sign_fixup || fixup.y_sign_fixup || fixup.z_sign_fixup || fixup.w_sign_fixup;
|
|
|
|
}
|
|
|
|
|
2014-11-03 22:38:27 +01:00
|
|
|
static inline BOOL is_same_fixup(struct color_fixup_desc f1, struct color_fixup_desc f2)
|
|
|
|
{
|
|
|
|
return f1.x_sign_fixup == f2.x_sign_fixup && f1.x_source == f2.x_source
|
|
|
|
&& f1.y_sign_fixup == f2.y_sign_fixup && f1.y_source == f2.y_source
|
|
|
|
&& f1.z_sign_fixup == f2.z_sign_fixup && f1.z_source == f2.z_source
|
|
|
|
&& f1.w_sign_fixup == f2.w_sign_fixup && f1.w_source == f2.w_source;
|
|
|
|
}
|
|
|
|
|
2010-03-02 16:21:45 +01:00
|
|
|
static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup)
|
2008-12-03 14:53:43 +01:00
|
|
|
{
|
2010-03-02 16:21:45 +01:00
|
|
|
enum complex_fixup complex_fixup = 0;
|
2015-08-26 12:46:47 +02:00
|
|
|
if (fixup.x_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1u << 0);
|
|
|
|
if (fixup.y_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1u << 1);
|
|
|
|
if (fixup.z_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1u << 2);
|
|
|
|
if (fixup.w_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1u << 3);
|
2010-03-02 16:21:45 +01:00
|
|
|
return complex_fixup;
|
2008-12-03 14:53:43 +01:00
|
|
|
}
|
|
|
|
|
2005-06-24 13:53:07 +02:00
|
|
|
/* Device caps */
|
2019-02-22 01:53:54 +01:00
|
|
|
#define WINED3D_MAX_ACTIVE_LIGHTS 8
|
2019-05-20 22:57:34 +02:00
|
|
|
#define WINED3D_MAX_SOFTWARE_ACTIVE_LIGHTS 32
|
2014-09-16 10:44:16 +02:00
|
|
|
#define MAX_CONSTANT_BUFFERS 15
|
|
|
|
#define MAX_SAMPLER_OBJECTS 16
|
|
|
|
#define MAX_SHADER_RESOURCE_VIEWS 128
|
2016-11-23 14:36:04 +01:00
|
|
|
#define MAX_UNORDERED_ACCESS_VIEWS 8
|
2017-02-28 14:42:37 +01:00
|
|
|
#define MAX_TGSM_REGISTERS 8192
|
2015-07-03 01:04:13 +02:00
|
|
|
#define MAX_VERTEX_BLENDS 4
|
2005-06-24 13:53:07 +02:00
|
|
|
|
2008-11-26 16:14:40 +01:00
|
|
|
struct min_lookup
|
|
|
|
{
|
2012-01-12 21:43:12 +01:00
|
|
|
GLenum mip[WINED3D_TEXF_LINEAR + 1];
|
2008-11-26 16:14:40 +01:00
|
|
|
};
|
|
|
|
|
2012-01-12 21:43:12 +01:00
|
|
|
extern const struct min_lookup minMipLookup[WINED3D_TEXF_LINEAR + 1] DECLSPEC_HIDDEN;
|
|
|
|
extern const GLenum magLookup[WINED3D_TEXF_LINEAR + 1] DECLSPEC_HIDDEN;
|
2008-04-06 00:31:39 +02:00
|
|
|
|
2021-08-23 17:13:50 +02:00
|
|
|
static const uint32_t WINED3D_READ_ONLY_BIND_MASK = WINED3D_BIND_VERTEX_BUFFER | WINED3D_BIND_INDEX_BUFFER
|
|
|
|
| WINED3D_BIND_CONSTANT_BUFFER | WINED3D_BIND_SHADER_RESOURCE | WINED3D_BIND_INDIRECT_BUFFER;
|
|
|
|
|
2021-09-10 15:58:38 +02:00
|
|
|
static const VkAccessFlags WINED3D_READ_ONLY_ACCESS_FLAGS = VK_ACCESS_INDIRECT_COMMAND_READ_BIT
|
|
|
|
| VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_UNIFORM_READ_BIT
|
|
|
|
| VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT
|
|
|
|
| VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_HOST_READ_BIT
|
|
|
|
| VK_ACCESS_MEMORY_READ_BIT;
|
|
|
|
|
2015-01-15 17:19:05 +01:00
|
|
|
GLenum wined3d_gl_compare_func(enum wined3d_cmp_func f) DECLSPEC_HIDDEN;
|
2020-01-24 17:02:07 +01:00
|
|
|
VkAccessFlags vk_access_mask_from_bind_flags(uint32_t bind_flags) DECLSPEC_HIDDEN;
|
2020-05-01 12:36:20 +02:00
|
|
|
VkCompareOp vk_compare_op_from_wined3d(enum wined3d_cmp_func op) DECLSPEC_HIDDEN;
|
2020-04-27 17:48:47 +02:00
|
|
|
VkImageViewType vk_image_view_type_from_wined3d(enum wined3d_resource_type type, uint32_t flags) DECLSPEC_HIDDEN;
|
2021-01-19 14:34:57 +01:00
|
|
|
VkPipelineStageFlags vk_pipeline_stage_mask_from_bind_flags(uint32_t bind_flags) DECLSPEC_HIDDEN;
|
2020-05-12 22:42:58 +02:00
|
|
|
VkShaderStageFlagBits vk_shader_stage_from_wined3d(enum wined3d_shader_type shader_type) DECLSPEC_HIDDEN;
|
2021-09-10 15:58:38 +02:00
|
|
|
VkAccessFlags vk_access_mask_from_buffer_usage(VkBufferUsageFlags usage) DECLSPEC_HIDDEN;
|
|
|
|
VkPipelineStageFlags vk_pipeline_stage_mask_from_buffer_usage(VkBufferUsageFlags usage) DECLSPEC_HIDDEN;
|
2021-11-09 18:36:07 +01:00
|
|
|
VkBufferUsageFlags vk_buffer_usage_from_bind_flags(uint32_t bind_flags) DECLSPEC_HIDDEN;
|
|
|
|
VkMemoryPropertyFlags vk_memory_type_from_access_flags(uint32_t access, uint32_t usage) DECLSPEC_HIDDEN;
|
2015-01-15 17:19:05 +01:00
|
|
|
|
2016-05-20 19:55:52 +02:00
|
|
|
static inline enum wined3d_cmp_func wined3d_sanitize_cmp_func(enum wined3d_cmp_func func)
|
|
|
|
{
|
|
|
|
if (func < WINED3D_CMP_NEVER || func > WINED3D_CMP_ALWAYS)
|
|
|
|
return WINED3D_CMP_ALWAYS;
|
|
|
|
return func;
|
|
|
|
}
|
|
|
|
|
2015-01-15 17:19:05 +01:00
|
|
|
static inline GLenum wined3d_gl_mag_filter(enum wined3d_texture_filter_type mag_filter)
|
2009-08-05 09:00:59 +02:00
|
|
|
{
|
2015-01-15 17:19:05 +01:00
|
|
|
return magLookup[mag_filter];
|
2009-08-05 09:00:59 +02:00
|
|
|
}
|
|
|
|
|
2015-01-15 17:19:05 +01:00
|
|
|
static inline GLenum wined3d_gl_min_mip_filter(enum wined3d_texture_filter_type min_filter,
|
|
|
|
enum wined3d_texture_filter_type mip_filter)
|
2009-08-05 09:00:59 +02:00
|
|
|
{
|
2015-01-15 17:19:05 +01:00
|
|
|
return minMipLookup[min_filter].mip[mip_filter];
|
2009-08-05 09:00:59 +02:00
|
|
|
}
|
|
|
|
|
2008-07-10 00:23:07 +02:00
|
|
|
/* float_16_to_32() and float_32_to_16() (see implementation in
|
|
|
|
* surface_base.c) convert 16 bit floats in the FLOAT16 data type
|
2008-02-25 11:18:03 +01:00
|
|
|
* to standard C floats and vice versa. They do not depend on the encoding
|
|
|
|
* of the C float, so they are platform independent, but slow. On x86 and
|
2008-04-22 08:18:14 +02:00
|
|
|
* other IEEE 754 compliant platforms the conversion can be accelerated by
|
|
|
|
* bit shifting the exponent and mantissa. There are also some SSE-based
|
|
|
|
* assembly routines out there.
|
2008-02-25 11:18:03 +01:00
|
|
|
*
|
|
|
|
* See GL_NV_half_float for a reference of the FLOAT16 / GL_HALF format
|
|
|
|
*/
|
2012-07-20 00:24:27 +02:00
|
|
|
static inline float float_16_to_32(const unsigned short *in)
|
|
|
|
{
|
2015-08-26 12:46:47 +02:00
|
|
|
const unsigned short s = ((*in) & 0x8000u);
|
|
|
|
const unsigned short e = ((*in) & 0x7c00u) >> 10;
|
|
|
|
const unsigned short m = (*in) & 0x3ffu;
|
2009-07-07 11:08:01 +02:00
|
|
|
const float sgn = (s ? -1.0f : 1.0f);
|
2007-12-19 17:18:39 +01:00
|
|
|
|
|
|
|
if(e == 0) {
|
2009-07-07 11:08:01 +02:00
|
|
|
if(m == 0) return sgn * 0.0f; /* +0.0 or -0.0 */
|
2010-07-28 15:05:37 +02:00
|
|
|
else return sgn * powf(2, -14.0f) * ((float)m / 1024.0f);
|
2007-12-19 17:18:39 +01:00
|
|
|
} else if(e < 31) {
|
2010-07-28 15:05:37 +02:00
|
|
|
return sgn * powf(2, (float)e - 15.0f) * (1.0f + ((float)m / 1024.0f));
|
2007-12-19 17:18:39 +01:00
|
|
|
} else {
|
2012-06-17 16:07:30 +02:00
|
|
|
if(m == 0) return sgn * INFINITY;
|
2012-05-30 16:14:56 +02:00
|
|
|
else return NAN;
|
2007-12-19 17:18:39 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-06-16 09:38:25 +02:00
|
|
|
static inline float float_24_to_32(DWORD in)
|
|
|
|
{
|
2015-08-26 12:46:47 +02:00
|
|
|
const float sgn = in & 0x800000u ? -1.0f : 1.0f;
|
|
|
|
const unsigned short e = (in & 0x780000u) >> 19;
|
|
|
|
const unsigned int m = in & 0x7ffffu;
|
2009-06-16 09:38:25 +02:00
|
|
|
|
|
|
|
if (e == 0)
|
|
|
|
{
|
|
|
|
if (m == 0) return sgn * 0.0f; /* +0.0 or -0.0 */
|
2010-07-28 15:05:37 +02:00
|
|
|
else return sgn * powf(2, -6.0f) * ((float)m / 524288.0f);
|
2009-06-16 09:38:25 +02:00
|
|
|
}
|
|
|
|
else if (e < 15)
|
|
|
|
{
|
2010-07-28 15:05:37 +02:00
|
|
|
return sgn * powf(2, (float)e - 7.0f) * (1.0f + ((float)m / 524288.0f));
|
2009-06-16 09:38:25 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-06-17 16:07:30 +02:00
|
|
|
if (m == 0) return sgn * INFINITY;
|
2012-05-30 16:14:56 +02:00
|
|
|
else return NAN;
|
2009-06-16 09:38:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-26 22:51:28 +01:00
|
|
|
static inline unsigned int wined3d_popcount(unsigned int x)
|
|
|
|
{
|
2022-03-14 11:22:40 +01:00
|
|
|
#if defined(__MINGW32__)
|
2016-01-26 22:51:28 +01:00
|
|
|
return __builtin_popcount(x);
|
|
|
|
#else
|
|
|
|
x -= x >> 1 & 0x55555555;
|
|
|
|
x = (x & 0x33333333) + (x >> 2 & 0x33333333);
|
|
|
|
return ((x + (x >> 4)) & 0x0f0f0f0f) * 0x01010101 >> 24;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2022-01-20 17:30:56 +01:00
|
|
|
static inline int wined3d_uint32_compare(uint32_t x, uint32_t y)
|
|
|
|
{
|
|
|
|
return (x > y) - (x < y);
|
|
|
|
}
|
|
|
|
|
2022-01-24 13:59:03 +01:00
|
|
|
static inline int wined3d_uint64_compare(uint64_t x, uint64_t y)
|
|
|
|
{
|
|
|
|
return (x > y) - (x < y);
|
|
|
|
}
|
|
|
|
|
2006-11-17 13:23:53 +01:00
|
|
|
#define ORM_BACKBUFFER 0
|
2010-03-14 21:53:23 +01:00
|
|
|
#define ORM_FBO 1
|
2006-11-17 13:23:53 +01:00
|
|
|
|
2008-11-23 22:51:03 +01:00
|
|
|
#define PCI_VENDOR_NONE 0xffff /* e.g. 0x8086 for Intel and 0x10de for Nvidia */
|
2008-11-23 22:33:29 +01:00
|
|
|
#define PCI_DEVICE_NONE 0xffff /* e.g. 0x14f for a Geforce6200 */
|
|
|
|
|
2019-04-01 14:50:26 +02:00
|
|
|
enum wined3d_renderer
|
|
|
|
{
|
|
|
|
WINED3D_RENDERER_AUTO,
|
|
|
|
WINED3D_RENDERER_VULKAN,
|
|
|
|
WINED3D_RENDERER_OPENGL,
|
|
|
|
WINED3D_RENDERER_NO3D,
|
|
|
|
};
|
|
|
|
|
2019-02-25 13:24:13 +01:00
|
|
|
enum wined3d_shader_backend
|
|
|
|
{
|
|
|
|
WINED3D_SHADER_BACKEND_AUTO,
|
|
|
|
WINED3D_SHADER_BACKEND_GLSL,
|
|
|
|
WINED3D_SHADER_BACKEND_ARB,
|
|
|
|
WINED3D_SHADER_BACKEND_NONE,
|
|
|
|
};
|
|
|
|
|
2020-12-03 17:58:54 +01:00
|
|
|
#define WINED3D_CSMT_ENABLE 0x00000001
|
|
|
|
#define WINED3D_CSMT_SERIALIZE 0x00000002
|
|
|
|
|
2006-09-26 20:31:41 +02:00
|
|
|
/* NOTE: When adding fields to this structure, make sure to update the default
|
|
|
|
* values in wined3d_main.c as well. */
|
2011-05-05 20:56:09 +02:00
|
|
|
struct wined3d_settings
|
|
|
|
{
|
2017-04-13 00:11:01 +02:00
|
|
|
unsigned int cs_multithreaded;
|
2015-07-08 15:47:01 +02:00
|
|
|
DWORD max_gl_version;
|
2011-05-05 20:56:09 +02:00
|
|
|
int offscreen_rendering_mode;
|
|
|
|
unsigned short pci_vendor_id;
|
|
|
|
unsigned short pci_device_id;
|
|
|
|
/* Memory tracking and object counting. */
|
2014-09-02 13:35:00 +02:00
|
|
|
UINT64 emulated_textureram;
|
2011-05-05 20:56:09 +02:00
|
|
|
char *logo;
|
2018-02-09 13:03:22 +01:00
|
|
|
unsigned int multisample_textures;
|
2016-03-15 16:55:08 +01:00
|
|
|
unsigned int sample_count;
|
2016-03-02 00:50:00 +01:00
|
|
|
BOOL check_float_constants;
|
2019-02-26 20:09:03 +01:00
|
|
|
unsigned int strict_shader_math;
|
2013-01-25 10:57:19 +01:00
|
|
|
unsigned int max_sm_vs;
|
2016-03-29 12:14:53 +02:00
|
|
|
unsigned int max_sm_hs;
|
2016-04-01 11:21:41 +02:00
|
|
|
unsigned int max_sm_ds;
|
2013-01-25 10:57:19 +01:00
|
|
|
unsigned int max_sm_gs;
|
|
|
|
unsigned int max_sm_ps;
|
2016-06-21 13:09:56 +02:00
|
|
|
unsigned int max_sm_cs;
|
2019-04-01 14:50:26 +02:00
|
|
|
enum wined3d_renderer renderer;
|
2019-02-25 13:24:13 +01:00
|
|
|
enum wined3d_shader_backend shader_backend;
|
2021-09-10 09:49:03 +02:00
|
|
|
BOOL cb_access_map_w;
|
2011-05-05 20:56:09 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;
|
2005-07-24 19:11:33 +02:00
|
|
|
|
2018-10-05 14:10:19 +02:00
|
|
|
enum wined3d_shader_byte_code_format
|
|
|
|
{
|
|
|
|
WINED3D_SHADER_BYTE_CODE_FORMAT_SM1,
|
|
|
|
WINED3D_SHADER_BYTE_CODE_FORMAT_SM4,
|
|
|
|
};
|
|
|
|
|
2014-12-03 10:28:09 +01:00
|
|
|
enum wined3d_shader_resource_type
|
2009-05-01 09:13:54 +02:00
|
|
|
{
|
2014-12-03 10:28:09 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_NONE,
|
2014-12-03 10:28:10 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_BUFFER,
|
2014-12-03 10:28:09 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_1D,
|
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_2D,
|
2014-12-03 10:28:10 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_2DMS,
|
2014-12-03 10:28:09 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_3D,
|
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_CUBE,
|
2014-12-03 10:28:10 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY,
|
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY,
|
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY,
|
2017-02-10 12:26:53 +01:00
|
|
|
WINED3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY,
|
2011-11-08 20:48:58 +01:00
|
|
|
};
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2015-07-03 01:04:13 +02:00
|
|
|
#define WINED3D_SHADER_CONST_VS_F 0x00000001
|
|
|
|
#define WINED3D_SHADER_CONST_VS_I 0x00000002
|
|
|
|
#define WINED3D_SHADER_CONST_VS_B 0x00000004
|
2016-06-01 23:16:56 +02:00
|
|
|
#define WINED3D_SHADER_CONST_VS_CLIP_PLANES 0x00000008
|
|
|
|
#define WINED3D_SHADER_CONST_VS_POINTSIZE 0x00000010
|
|
|
|
#define WINED3D_SHADER_CONST_POS_FIXUP 0x00000020
|
|
|
|
#define WINED3D_SHADER_CONST_PS_F 0x00000040
|
|
|
|
#define WINED3D_SHADER_CONST_PS_I 0x00000080
|
|
|
|
#define WINED3D_SHADER_CONST_PS_B 0x00000100
|
|
|
|
#define WINED3D_SHADER_CONST_PS_BUMP_ENV 0x00000200
|
|
|
|
#define WINED3D_SHADER_CONST_PS_FOG 0x00000400
|
|
|
|
#define WINED3D_SHADER_CONST_PS_ALPHA_TEST 0x00000800
|
|
|
|
#define WINED3D_SHADER_CONST_PS_Y_CORR 0x00001000
|
|
|
|
#define WINED3D_SHADER_CONST_PS_NP2_FIXUP 0x00002000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_MODELVIEW 0x00004000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_VERTEXBLEND 0x00008000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_PROJ 0x00010000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_TEXMATRIX 0x00020000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_MATERIAL 0x00040000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_LIGHTS 0x00080000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_PS 0x00100000
|
|
|
|
#define WINED3D_SHADER_CONST_FFP_COLOR_KEY 0x00200000
|
2018-11-22 17:49:04 +01:00
|
|
|
#define WINED3D_SHADER_CONST_BASE_VERTEX_ID 0x00400000
|
2013-08-16 09:12:30 +02:00
|
|
|
|
2011-11-13 19:52:27 +01:00
|
|
|
enum wined3d_shader_register_type
|
2009-05-01 09:13:54 +02:00
|
|
|
{
|
|
|
|
WINED3DSPR_TEMP = 0,
|
|
|
|
WINED3DSPR_INPUT = 1,
|
|
|
|
WINED3DSPR_CONST = 2,
|
|
|
|
WINED3DSPR_ADDR = 3,
|
|
|
|
WINED3DSPR_TEXTURE = 3,
|
|
|
|
WINED3DSPR_RASTOUT = 4,
|
|
|
|
WINED3DSPR_ATTROUT = 5,
|
|
|
|
WINED3DSPR_TEXCRDOUT = 6,
|
|
|
|
WINED3DSPR_OUTPUT = 6,
|
|
|
|
WINED3DSPR_CONSTINT = 7,
|
|
|
|
WINED3DSPR_COLOROUT = 8,
|
|
|
|
WINED3DSPR_DEPTHOUT = 9,
|
|
|
|
WINED3DSPR_SAMPLER = 10,
|
|
|
|
WINED3DSPR_CONST2 = 11,
|
|
|
|
WINED3DSPR_CONST3 = 12,
|
|
|
|
WINED3DSPR_CONST4 = 13,
|
|
|
|
WINED3DSPR_CONSTBOOL = 14,
|
|
|
|
WINED3DSPR_LOOP = 15,
|
|
|
|
WINED3DSPR_TEMPFLOAT16 = 16,
|
|
|
|
WINED3DSPR_MISCTYPE = 17,
|
|
|
|
WINED3DSPR_LABEL = 18,
|
|
|
|
WINED3DSPR_PREDICATE = 19,
|
2009-05-06 10:05:46 +02:00
|
|
|
WINED3DSPR_IMMCONST,
|
2009-07-16 13:08:22 +02:00
|
|
|
WINED3DSPR_CONSTBUFFER,
|
2016-01-29 09:44:44 +01:00
|
|
|
WINED3DSPR_IMMCONSTBUFFER,
|
2012-10-15 22:26:19 +02:00
|
|
|
WINED3DSPR_PRIMID,
|
2010-10-08 13:12:15 +02:00
|
|
|
WINED3DSPR_NULL,
|
2010-10-12 13:40:03 +02:00
|
|
|
WINED3DSPR_RESOURCE,
|
2016-03-25 19:53:38 +01:00
|
|
|
WINED3DSPR_UAV,
|
2016-04-04 11:26:32 +02:00
|
|
|
WINED3DSPR_OUTPOINTID,
|
2016-03-31 10:54:43 +02:00
|
|
|
WINED3DSPR_FORKINSTID,
|
2017-03-02 15:11:48 +01:00
|
|
|
WINED3DSPR_JOININSTID,
|
2016-04-04 11:26:31 +02:00
|
|
|
WINED3DSPR_INCONTROLPOINT,
|
2016-07-15 11:16:18 +02:00
|
|
|
WINED3DSPR_OUTCONTROLPOINT,
|
2016-04-04 11:26:33 +02:00
|
|
|
WINED3DSPR_PATCHCONST,
|
2016-04-04 11:26:30 +02:00
|
|
|
WINED3DSPR_TESSCOORD,
|
2016-06-13 10:39:30 +02:00
|
|
|
WINED3DSPR_GROUPSHAREDMEM,
|
2016-06-22 11:37:29 +02:00
|
|
|
WINED3DSPR_THREADID,
|
2016-06-21 13:10:00 +02:00
|
|
|
WINED3DSPR_THREADGROUPID,
|
2016-06-21 13:10:01 +02:00
|
|
|
WINED3DSPR_LOCALTHREADID,
|
2016-06-21 13:09:59 +02:00
|
|
|
WINED3DSPR_LOCALTHREADINDEX,
|
2016-06-23 12:07:59 +02:00
|
|
|
WINED3DSPR_IDXTEMP,
|
2016-07-04 12:26:28 +02:00
|
|
|
WINED3DSPR_STREAM,
|
2016-12-07 12:43:03 +01:00
|
|
|
WINED3DSPR_FUNCTIONBODY,
|
|
|
|
WINED3DSPR_FUNCTIONPOINTER,
|
2016-12-09 11:30:50 +01:00
|
|
|
WINED3DSPR_COVERAGE,
|
2016-12-09 11:30:51 +01:00
|
|
|
WINED3DSPR_SAMPLEMASK,
|
2017-04-21 10:59:51 +02:00
|
|
|
WINED3DSPR_GSINSTID,
|
2017-09-10 14:25:39 +02:00
|
|
|
WINED3DSPR_DEPTHOUTGE,
|
|
|
|
WINED3DSPR_DEPTHOUTLE,
|
2018-05-15 10:51:48 +02:00
|
|
|
WINED3DSPR_RASTERIZER,
|
2011-11-13 19:52:27 +01:00
|
|
|
};
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2012-09-04 20:15:09 +02:00
|
|
|
enum wined3d_data_type
|
|
|
|
{
|
|
|
|
WINED3D_DATA_FLOAT,
|
|
|
|
WINED3D_DATA_INT,
|
|
|
|
WINED3D_DATA_RESOURCE,
|
|
|
|
WINED3D_DATA_SAMPLER,
|
2016-03-25 19:53:38 +01:00
|
|
|
WINED3D_DATA_UAV,
|
2012-09-04 20:15:09 +02:00
|
|
|
WINED3D_DATA_UINT,
|
2014-12-03 10:28:11 +01:00
|
|
|
WINED3D_DATA_UNORM,
|
|
|
|
WINED3D_DATA_SNORM,
|
2016-12-07 12:43:03 +01:00
|
|
|
WINED3D_DATA_OPAQUE,
|
2012-09-04 20:15:09 +02:00
|
|
|
};
|
|
|
|
|
2009-05-06 10:05:46 +02:00
|
|
|
enum wined3d_immconst_type
|
|
|
|
{
|
2010-10-08 13:12:18 +02:00
|
|
|
WINED3D_IMMCONST_SCALAR,
|
|
|
|
WINED3D_IMMCONST_VEC4,
|
2009-05-06 10:05:46 +02:00
|
|
|
};
|
|
|
|
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3DSP_NOSWIZZLE (0u | (1u << 2) | (2u << 4) | (3u << 6))
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2011-11-14 21:11:42 +01:00
|
|
|
enum wined3d_shader_src_modifier
|
2009-05-01 09:13:54 +02:00
|
|
|
{
|
|
|
|
WINED3DSPSM_NONE = 0,
|
|
|
|
WINED3DSPSM_NEG = 1,
|
|
|
|
WINED3DSPSM_BIAS = 2,
|
|
|
|
WINED3DSPSM_BIASNEG = 3,
|
|
|
|
WINED3DSPSM_SIGN = 4,
|
|
|
|
WINED3DSPSM_SIGNNEG = 5,
|
|
|
|
WINED3DSPSM_COMP = 6,
|
|
|
|
WINED3DSPSM_X2 = 7,
|
|
|
|
WINED3DSPSM_X2NEG = 8,
|
|
|
|
WINED3DSPSM_DZ = 9,
|
|
|
|
WINED3DSPSM_DW = 10,
|
|
|
|
WINED3DSPSM_ABS = 11,
|
|
|
|
WINED3DSPSM_ABSNEG = 12,
|
|
|
|
WINED3DSPSM_NOT = 13,
|
2011-11-14 21:11:42 +01:00
|
|
|
};
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3DSP_WRITEMASK_0 0x1u /* .x r */
|
|
|
|
#define WINED3DSP_WRITEMASK_1 0x2u /* .y g */
|
|
|
|
#define WINED3DSP_WRITEMASK_2 0x4u /* .z b */
|
|
|
|
#define WINED3DSP_WRITEMASK_3 0x8u /* .w a */
|
|
|
|
#define WINED3DSP_WRITEMASK_ALL 0xfu /* all */
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2011-11-14 21:11:43 +01:00
|
|
|
enum wined3d_shader_dst_modifier
|
2009-05-01 09:13:54 +02:00
|
|
|
{
|
|
|
|
WINED3DSPDM_NONE = 0,
|
|
|
|
WINED3DSPDM_SATURATE = 1,
|
|
|
|
WINED3DSPDM_PARTIALPRECISION = 2,
|
|
|
|
WINED3DSPDM_MSAMPCENTROID = 4,
|
2011-11-14 21:11:43 +01:00
|
|
|
};
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2016-02-02 11:32:27 +01:00
|
|
|
enum wined3d_shader_interpolation_mode
|
|
|
|
{
|
2017-10-18 00:25:07 +02:00
|
|
|
WINED3DSIM_NONE = 0,
|
2016-02-02 11:32:27 +01:00
|
|
|
WINED3DSIM_CONSTANT = 1,
|
|
|
|
WINED3DSIM_LINEAR = 2,
|
|
|
|
WINED3DSIM_LINEAR_CENTROID = 3,
|
|
|
|
WINED3DSIM_LINEAR_NOPERSPECTIVE = 4,
|
|
|
|
WINED3DSIM_LINEAR_NOPERSPECTIVE_CENTROID = 5,
|
|
|
|
WINED3DSIM_LINEAR_SAMPLE = 6,
|
|
|
|
WINED3DSIM_LINEAR_NOPERSPECTIVE_SAMPLE = 7,
|
|
|
|
};
|
|
|
|
|
2017-10-18 00:25:09 +02:00
|
|
|
#define WINED3D_PACKED_INTERPOLATION_SIZE 3
|
|
|
|
#define WINED3D_PACKED_INTERPOLATION_BIT_COUNT 3
|
|
|
|
|
2016-02-02 11:32:34 +01:00
|
|
|
enum wined3d_shader_global_flags
|
|
|
|
{
|
|
|
|
WINED3DSGF_REFACTORING_ALLOWED = 0x1,
|
2017-07-24 00:15:55 +02:00
|
|
|
WINED3DSGF_FORCE_EARLY_DEPTH_STENCIL = 0x4,
|
2016-02-02 11:32:34 +01:00
|
|
|
WINED3DSGF_ENABLE_RAW_AND_STRUCTURED_BUFFERS = 0x8,
|
|
|
|
};
|
|
|
|
|
2016-11-30 12:47:30 +01:00
|
|
|
enum wined3d_shader_sync_flags
|
|
|
|
{
|
|
|
|
WINED3DSSF_THREAD_GROUP = 0x1,
|
|
|
|
WINED3DSSF_GROUP_SHARED_MEMORY = 0x2,
|
2021-01-25 21:58:18 +01:00
|
|
|
WINED3DSSF_GLOBAL_UAV = 0x8,
|
2016-11-30 12:47:30 +01:00
|
|
|
};
|
|
|
|
|
2016-11-30 12:47:31 +01:00
|
|
|
enum wined3d_shader_uav_flags
|
|
|
|
{
|
2017-03-08 12:07:19 +01:00
|
|
|
WINED3DSUF_GLOBALLY_COHERENT = 0x2,
|
|
|
|
WINED3DSUF_ORDER_PRESERVING_COUNTER = 0x100,
|
2016-11-30 12:47:31 +01:00
|
|
|
};
|
|
|
|
|
2016-04-01 11:21:37 +02:00
|
|
|
enum wined3d_tessellator_domain
|
|
|
|
{
|
|
|
|
WINED3D_TESSELLATOR_DOMAIN_LINE = 1,
|
|
|
|
WINED3D_TESSELLATOR_DOMAIN_TRIANGLE = 2,
|
|
|
|
WINED3D_TESSELLATOR_DOMAIN_QUAD = 3,
|
|
|
|
};
|
|
|
|
|
2016-04-01 11:21:38 +02:00
|
|
|
enum wined3d_tessellator_output_primitive
|
|
|
|
{
|
|
|
|
WINED3D_TESSELLATOR_OUTPUT_POINT = 1,
|
|
|
|
WINED3D_TESSELLATOR_OUTPUT_LINE = 2,
|
|
|
|
WINED3D_TESSELLATOR_OUTPUT_TRIANGLE_CW = 3,
|
|
|
|
WINED3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4,
|
|
|
|
};
|
|
|
|
|
2016-04-01 11:21:39 +02:00
|
|
|
enum wined3d_tessellator_partitioning
|
|
|
|
{
|
|
|
|
WINED3D_TESSELLATOR_PARTITIONING_INTEGER = 1,
|
|
|
|
WINED3D_TESSELLATOR_PARTITIONING_POW2 = 2,
|
|
|
|
WINED3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3,
|
|
|
|
WINED3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4,
|
|
|
|
};
|
|
|
|
|
2009-05-01 09:13:54 +02:00
|
|
|
/* Undocumented opcode control to identify projective texture lookups in ps 2.0 and later */
|
2012-10-01 22:48:13 +02:00
|
|
|
#define WINED3DSI_TEXLD_PROJECT 0x1
|
|
|
|
#define WINED3DSI_TEXLD_BIAS 0x2
|
|
|
|
#define WINED3DSI_INDEXED_DYNAMIC 0x4
|
2016-01-17 22:48:48 +01:00
|
|
|
#define WINED3DSI_RESINFO_RCP_FLOAT 0x1
|
|
|
|
#define WINED3DSI_RESINFO_UINT 0x2
|
2016-07-15 11:16:22 +02:00
|
|
|
#define WINED3DSI_SAMPLE_INFO_UINT 0x1
|
2016-02-01 00:14:38 +01:00
|
|
|
#define WINED3DSI_SAMPLER_COMPARISON_MODE 0x1
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2018-04-26 14:53:20 +02:00
|
|
|
#define WINED3DSI_PRECISE_X 0x100
|
|
|
|
#define WINED3DSI_PRECISE_Y 0x200
|
|
|
|
#define WINED3DSI_PRECISE_Z 0x400
|
|
|
|
#define WINED3DSI_PRECISE_W 0x800
|
|
|
|
#define WINED3DSI_PRECISE_XYZW (WINED3DSI_PRECISE_X | WINED3DSI_PRECISE_Y \
|
|
|
|
| WINED3DSI_PRECISE_Z | WINED3DSI_PRECISE_W)
|
|
|
|
#define WINED3DSI_PRECISE_SHIFT 8
|
|
|
|
|
2011-11-08 20:48:59 +01:00
|
|
|
enum wined3d_shader_rel_op
|
2009-05-01 09:13:54 +02:00
|
|
|
{
|
2011-11-08 20:48:59 +01:00
|
|
|
WINED3D_SHADER_REL_OP_GT = 1,
|
|
|
|
WINED3D_SHADER_REL_OP_EQ = 2,
|
|
|
|
WINED3D_SHADER_REL_OP_GE = 3,
|
|
|
|
WINED3D_SHADER_REL_OP_LT = 4,
|
|
|
|
WINED3D_SHADER_REL_OP_NE = 5,
|
|
|
|
WINED3D_SHADER_REL_OP_LE = 6,
|
|
|
|
};
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2016-05-25 10:51:20 +02:00
|
|
|
enum wined3d_shader_conditional_op
|
|
|
|
{
|
|
|
|
WINED3D_SHADER_CONDITIONAL_OP_NZ = 0,
|
|
|
|
WINED3D_SHADER_CONDITIONAL_OP_Z = 1
|
|
|
|
};
|
|
|
|
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3D_SM1_VS 0xfffeu
|
|
|
|
#define WINED3D_SM1_PS 0xffffu
|
|
|
|
#define WINED3D_SM4_PS 0x0000u
|
|
|
|
#define WINED3D_SM4_VS 0x0001u
|
|
|
|
#define WINED3D_SM4_GS 0x0002u
|
2016-03-29 12:14:54 +02:00
|
|
|
#define WINED3D_SM5_HS 0x0003u
|
2016-04-01 11:21:41 +02:00
|
|
|
#define WINED3D_SM5_DS 0x0004u
|
2016-06-21 13:09:57 +02:00
|
|
|
#define WINED3D_SM5_CS 0x0005u
|
2009-05-05 09:38:03 +02:00
|
|
|
|
2009-05-01 09:13:54 +02:00
|
|
|
/* Shader version tokens, and shader end tokens */
|
2009-05-05 09:38:03 +02:00
|
|
|
#define WINED3DPS_VERSION(major, minor) ((WINED3D_SM1_PS << 16) | ((major) << 8) | (minor))
|
|
|
|
#define WINED3DVS_VERSION(major, minor) ((WINED3D_SM1_VS << 16) | ((major) << 8) | (minor))
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2006-11-27 20:50:37 +01:00
|
|
|
/* Shader backends */
|
2009-04-01 12:23:01 +02:00
|
|
|
|
|
|
|
/* TODO: Make this dynamic, based on shader limits ? */
|
|
|
|
#define MAX_ATTRIBS 16
|
|
|
|
#define MAX_REG_ADDR 1
|
|
|
|
#define MAX_REG_TEXCRD 8
|
2012-09-28 01:06:56 +02:00
|
|
|
#define MAX_REG_INPUT 32
|
|
|
|
#define MAX_REG_OUTPUT 32
|
2012-10-02 22:15:40 +02:00
|
|
|
#define WINED3D_MAX_CBS 15
|
2009-04-01 12:23:01 +02:00
|
|
|
|
|
|
|
/* FIXME: This needs to go up to 2048 for
|
|
|
|
* Shader model 3 according to msdn (and for software shaders) */
|
|
|
|
#define MAX_LABELS 16
|
2006-11-27 20:50:37 +01:00
|
|
|
|
2016-02-01 00:14:36 +01:00
|
|
|
#define MAX_IMMEDIATE_CONSTANT_BUFFER_SIZE 4096
|
|
|
|
|
2015-04-24 22:25:41 +02:00
|
|
|
struct wined3d_string_buffer
|
2009-07-09 09:56:08 +02:00
|
|
|
{
|
2015-04-24 22:25:43 +02:00
|
|
|
struct list entry;
|
2009-07-09 09:56:08 +02:00
|
|
|
char *buffer;
|
2013-02-25 21:49:38 +01:00
|
|
|
unsigned int buffer_size;
|
2013-02-25 21:49:29 +01:00
|
|
|
unsigned int content_size;
|
2009-07-09 09:56:08 +02:00
|
|
|
};
|
2008-03-18 19:19:16 +01:00
|
|
|
|
2008-09-23 17:39:34 +02:00
|
|
|
enum WINED3D_SHADER_INSTRUCTION_HANDLER
|
|
|
|
{
|
|
|
|
WINED3DSIH_ABS,
|
|
|
|
WINED3DSIH_ADD,
|
2010-10-07 12:17:57 +02:00
|
|
|
WINED3DSIH_AND,
|
2016-12-05 12:04:32 +01:00
|
|
|
WINED3DSIH_ATOMIC_AND,
|
2016-12-05 12:04:36 +01:00
|
|
|
WINED3DSIH_ATOMIC_CMP_STORE,
|
2016-11-23 14:36:08 +01:00
|
|
|
WINED3DSIH_ATOMIC_IADD,
|
2016-12-09 11:30:52 +01:00
|
|
|
WINED3DSIH_ATOMIC_IMAX,
|
2016-12-09 11:30:53 +01:00
|
|
|
WINED3DSIH_ATOMIC_IMIN,
|
2016-12-05 12:04:30 +01:00
|
|
|
WINED3DSIH_ATOMIC_OR,
|
2016-12-05 12:04:37 +01:00
|
|
|
WINED3DSIH_ATOMIC_UMAX,
|
2016-12-05 12:04:38 +01:00
|
|
|
WINED3DSIH_ATOMIC_UMIN,
|
2016-12-05 12:04:28 +01:00
|
|
|
WINED3DSIH_ATOMIC_XOR,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_BEM,
|
2016-06-13 10:39:34 +02:00
|
|
|
WINED3DSIH_BFI,
|
2016-07-07 12:22:33 +02:00
|
|
|
WINED3DSIH_BFREV,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_BREAK,
|
|
|
|
WINED3DSIH_BREAKC,
|
|
|
|
WINED3DSIH_BREAKP,
|
2016-06-13 10:39:36 +02:00
|
|
|
WINED3DSIH_BUFINFO,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_CALL,
|
|
|
|
WINED3DSIH_CALLNZ,
|
2016-06-03 11:33:04 +02:00
|
|
|
WINED3DSIH_CASE,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_CMP,
|
|
|
|
WINED3DSIH_CND,
|
2016-07-05 11:46:53 +02:00
|
|
|
WINED3DSIH_CONTINUE,
|
2017-05-14 18:54:34 +02:00
|
|
|
WINED3DSIH_CONTINUEP,
|
2017-01-28 17:14:10 +01:00
|
|
|
WINED3DSIH_COUNTBITS,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_CRS,
|
2010-01-06 23:22:17 +01:00
|
|
|
WINED3DSIH_CUT,
|
2016-07-05 11:46:51 +02:00
|
|
|
WINED3DSIH_CUT_STREAM,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_DCL,
|
2012-10-01 22:48:13 +02:00
|
|
|
WINED3DSIH_DCL_CONSTANT_BUFFER,
|
2016-12-07 12:43:03 +01:00
|
|
|
WINED3DSIH_DCL_FUNCTION_BODY,
|
|
|
|
WINED3DSIH_DCL_FUNCTION_TABLE,
|
2016-02-02 11:32:34 +01:00
|
|
|
WINED3DSIH_DCL_GLOBAL_FLAGS,
|
2017-04-21 10:59:52 +02:00
|
|
|
WINED3DSIH_DCL_GS_INSTANCES,
|
2016-03-31 10:54:40 +02:00
|
|
|
WINED3DSIH_DCL_HS_FORK_PHASE_INSTANCE_COUNT,
|
2017-03-02 15:11:47 +01:00
|
|
|
WINED3DSIH_DCL_HS_JOIN_PHASE_INSTANCE_COUNT,
|
2016-03-31 10:54:42 +02:00
|
|
|
WINED3DSIH_DCL_HS_MAX_TESSFACTOR,
|
2016-02-01 00:14:36 +01:00
|
|
|
WINED3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER,
|
2017-03-10 09:10:57 +01:00
|
|
|
WINED3DSIH_DCL_INDEX_RANGE,
|
2016-06-23 12:08:00 +02:00
|
|
|
WINED3DSIH_DCL_INDEXABLE_TEMP,
|
2016-02-02 11:32:28 +01:00
|
|
|
WINED3DSIH_DCL_INPUT,
|
2016-03-29 12:14:57 +02:00
|
|
|
WINED3DSIH_DCL_INPUT_CONTROL_POINT_COUNT,
|
2012-09-17 12:22:24 +02:00
|
|
|
WINED3DSIH_DCL_INPUT_PRIMITIVE,
|
2016-02-02 11:32:27 +01:00
|
|
|
WINED3DSIH_DCL_INPUT_PS,
|
2016-02-02 11:32:29 +01:00
|
|
|
WINED3DSIH_DCL_INPUT_PS_SGV,
|
2016-02-02 11:32:30 +01:00
|
|
|
WINED3DSIH_DCL_INPUT_PS_SIV,
|
2016-02-02 11:32:31 +01:00
|
|
|
WINED3DSIH_DCL_INPUT_SGV,
|
2016-02-02 11:32:33 +01:00
|
|
|
WINED3DSIH_DCL_INPUT_SIV,
|
2016-12-07 12:43:03 +01:00
|
|
|
WINED3DSIH_DCL_INTERFACE,
|
2016-02-01 00:14:37 +01:00
|
|
|
WINED3DSIH_DCL_OUTPUT,
|
2016-03-29 12:14:58 +02:00
|
|
|
WINED3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT,
|
2016-02-02 11:32:32 +01:00
|
|
|
WINED3DSIH_DCL_OUTPUT_SIV,
|
2012-09-17 12:22:25 +02:00
|
|
|
WINED3DSIH_DCL_OUTPUT_TOPOLOGY,
|
2017-01-29 13:37:23 +01:00
|
|
|
WINED3DSIH_DCL_RESOURCE_RAW,
|
2016-03-25 19:53:36 +01:00
|
|
|
WINED3DSIH_DCL_RESOURCE_STRUCTURED,
|
2016-02-01 00:14:38 +01:00
|
|
|
WINED3DSIH_DCL_SAMPLER,
|
2016-07-04 12:26:29 +02:00
|
|
|
WINED3DSIH_DCL_STREAM,
|
2016-01-26 00:34:04 +01:00
|
|
|
WINED3DSIH_DCL_TEMPS,
|
2016-04-01 11:21:37 +02:00
|
|
|
WINED3DSIH_DCL_TESSELLATOR_DOMAIN,
|
2016-04-01 11:21:38 +02:00
|
|
|
WINED3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE,
|
2016-04-01 11:21:39 +02:00
|
|
|
WINED3DSIH_DCL_TESSELLATOR_PARTITIONING,
|
2016-06-22 11:37:30 +02:00
|
|
|
WINED3DSIH_DCL_TGSM_RAW,
|
2016-06-22 11:37:31 +02:00
|
|
|
WINED3DSIH_DCL_TGSM_STRUCTURED,
|
2016-06-21 13:10:02 +02:00
|
|
|
WINED3DSIH_DCL_THREAD_GROUP,
|
2016-11-30 12:47:31 +01:00
|
|
|
WINED3DSIH_DCL_UAV_RAW,
|
2016-11-30 12:47:32 +01:00
|
|
|
WINED3DSIH_DCL_UAV_STRUCTURED,
|
2016-03-25 19:53:38 +01:00
|
|
|
WINED3DSIH_DCL_UAV_TYPED,
|
2012-09-17 12:22:23 +02:00
|
|
|
WINED3DSIH_DCL_VERTICES_OUT,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_DEF,
|
2016-06-03 11:33:05 +02:00
|
|
|
WINED3DSIH_DEFAULT,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_DEFB,
|
|
|
|
WINED3DSIH_DEFI,
|
2010-10-13 12:26:29 +02:00
|
|
|
WINED3DSIH_DIV,
|
2014-05-20 07:38:46 +02:00
|
|
|
WINED3DSIH_DP2,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_DP2ADD,
|
|
|
|
WINED3DSIH_DP3,
|
|
|
|
WINED3DSIH_DP4,
|
|
|
|
WINED3DSIH_DST,
|
|
|
|
WINED3DSIH_DSX,
|
2016-03-17 11:47:11 +01:00
|
|
|
WINED3DSIH_DSX_COARSE,
|
2016-03-17 11:47:13 +01:00
|
|
|
WINED3DSIH_DSX_FINE,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_DSY,
|
2016-03-17 11:47:12 +01:00
|
|
|
WINED3DSIH_DSY_COARSE,
|
2016-03-17 11:47:14 +01:00
|
|
|
WINED3DSIH_DSY_FINE,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_ELSE,
|
2010-01-06 23:22:10 +01:00
|
|
|
WINED3DSIH_EMIT,
|
2016-07-04 12:26:28 +02:00
|
|
|
WINED3DSIH_EMIT_STREAM,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_ENDIF,
|
|
|
|
WINED3DSIH_ENDLOOP,
|
|
|
|
WINED3DSIH_ENDREP,
|
2016-06-03 11:33:06 +02:00
|
|
|
WINED3DSIH_ENDSWITCH,
|
2011-11-20 20:27:09 +01:00
|
|
|
WINED3DSIH_EQ,
|
2018-05-29 12:22:32 +02:00
|
|
|
WINED3DSIH_EVAL_SAMPLE_INDEX,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_EXP,
|
|
|
|
WINED3DSIH_EXPP,
|
2017-01-28 17:14:01 +01:00
|
|
|
WINED3DSIH_F16TOF32,
|
2017-01-28 17:14:02 +01:00
|
|
|
WINED3DSIH_F32TOF16,
|
2016-12-07 12:43:03 +01:00
|
|
|
WINED3DSIH_FCALL,
|
2017-01-28 17:14:11 +01:00
|
|
|
WINED3DSIH_FIRSTBIT_HI,
|
|
|
|
WINED3DSIH_FIRSTBIT_LO,
|
|
|
|
WINED3DSIH_FIRSTBIT_SHI,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_FRC,
|
2010-10-13 12:26:30 +02:00
|
|
|
WINED3DSIH_FTOI,
|
2016-01-11 11:53:20 +01:00
|
|
|
WINED3DSIH_FTOU,
|
2016-06-10 12:07:04 +02:00
|
|
|
WINED3DSIH_GATHER4,
|
2016-06-10 12:07:05 +02:00
|
|
|
WINED3DSIH_GATHER4_C,
|
2017-04-11 13:30:34 +02:00
|
|
|
WINED3DSIH_GATHER4_PO,
|
2017-05-22 19:15:02 +02:00
|
|
|
WINED3DSIH_GATHER4_PO_C,
|
2011-11-20 20:27:10 +01:00
|
|
|
WINED3DSIH_GE,
|
2016-04-04 11:26:34 +02:00
|
|
|
WINED3DSIH_HS_CONTROL_POINT_PHASE,
|
2016-03-29 12:14:55 +02:00
|
|
|
WINED3DSIH_HS_DECLS,
|
2016-03-29 12:14:56 +02:00
|
|
|
WINED3DSIH_HS_FORK_PHASE,
|
2016-04-04 11:26:35 +02:00
|
|
|
WINED3DSIH_HS_JOIN_PHASE,
|
2010-01-06 23:22:11 +01:00
|
|
|
WINED3DSIH_IADD,
|
2017-04-04 12:35:53 +02:00
|
|
|
WINED3DSIH_IBFE,
|
2010-10-13 12:26:31 +02:00
|
|
|
WINED3DSIH_IEQ,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_IF,
|
|
|
|
WINED3DSIH_IFC,
|
2010-01-06 23:22:08 +01:00
|
|
|
WINED3DSIH_IGE,
|
2016-01-11 11:53:21 +01:00
|
|
|
WINED3DSIH_ILT,
|
2016-01-11 11:53:22 +01:00
|
|
|
WINED3DSIH_IMAD,
|
2016-01-01 18:08:03 +01:00
|
|
|
WINED3DSIH_IMAX,
|
2016-01-01 18:08:04 +01:00
|
|
|
WINED3DSIH_IMIN,
|
2016-06-17 10:41:48 +02:00
|
|
|
WINED3DSIH_IMM_ATOMIC_ALLOC,
|
2016-12-05 12:04:33 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_AND,
|
2016-12-05 12:04:35 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_CMP_EXCH,
|
2016-06-13 10:39:33 +02:00
|
|
|
WINED3DSIH_IMM_ATOMIC_CONSUME,
|
2016-12-05 12:04:34 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_EXCH,
|
2017-02-06 14:12:13 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_IADD,
|
2017-02-16 13:02:19 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_IMAX,
|
2017-02-16 13:02:20 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_IMIN,
|
2016-12-05 12:04:31 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_OR,
|
2016-12-05 12:04:39 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_UMAX,
|
2016-12-05 12:04:40 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_UMIN,
|
2016-12-05 12:04:29 +01:00
|
|
|
WINED3DSIH_IMM_ATOMIC_XOR,
|
2010-10-08 13:12:16 +02:00
|
|
|
WINED3DSIH_IMUL,
|
2016-01-11 11:53:23 +01:00
|
|
|
WINED3DSIH_INE,
|
2016-01-11 11:53:24 +01:00
|
|
|
WINED3DSIH_INEG,
|
2014-05-20 07:38:47 +02:00
|
|
|
WINED3DSIH_ISHL,
|
2016-06-02 12:46:54 +02:00
|
|
|
WINED3DSIH_ISHR,
|
2010-10-11 13:06:16 +02:00
|
|
|
WINED3DSIH_ITOF,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_LABEL,
|
2010-10-13 12:26:32 +02:00
|
|
|
WINED3DSIH_LD,
|
2016-03-25 19:53:35 +01:00
|
|
|
WINED3DSIH_LD2DMS,
|
2016-06-13 10:39:32 +02:00
|
|
|
WINED3DSIH_LD_RAW,
|
2016-03-17 11:47:10 +01:00
|
|
|
WINED3DSIH_LD_STRUCTURED,
|
2016-06-17 10:41:49 +02:00
|
|
|
WINED3DSIH_LD_UAV_TYPED,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_LIT,
|
2016-07-15 11:16:20 +02:00
|
|
|
WINED3DSIH_LOD,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_LOG,
|
|
|
|
WINED3DSIH_LOGP,
|
|
|
|
WINED3DSIH_LOOP,
|
|
|
|
WINED3DSIH_LRP,
|
2010-01-06 23:22:12 +01:00
|
|
|
WINED3DSIH_LT,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_M3x2,
|
|
|
|
WINED3DSIH_M3x3,
|
|
|
|
WINED3DSIH_M3x4,
|
|
|
|
WINED3DSIH_M4x3,
|
|
|
|
WINED3DSIH_M4x4,
|
|
|
|
WINED3DSIH_MAD,
|
|
|
|
WINED3DSIH_MAX,
|
|
|
|
WINED3DSIH_MIN,
|
|
|
|
WINED3DSIH_MOV,
|
|
|
|
WINED3DSIH_MOVA,
|
2010-10-07 12:18:00 +02:00
|
|
|
WINED3DSIH_MOVC,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_MUL,
|
2015-02-11 14:10:17 +01:00
|
|
|
WINED3DSIH_NE,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_NOP,
|
2016-01-26 17:49:14 +01:00
|
|
|
WINED3DSIH_NOT,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_NRM,
|
2015-02-11 14:10:18 +01:00
|
|
|
WINED3DSIH_OR,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_PHASE,
|
|
|
|
WINED3DSIH_POW,
|
|
|
|
WINED3DSIH_RCP,
|
|
|
|
WINED3DSIH_REP,
|
2016-01-17 22:48:48 +01:00
|
|
|
WINED3DSIH_RESINFO,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_RET,
|
2017-04-11 13:30:35 +02:00
|
|
|
WINED3DSIH_RETP,
|
2016-05-13 13:55:30 +02:00
|
|
|
WINED3DSIH_ROUND_NE,
|
2011-11-20 20:27:11 +01:00
|
|
|
WINED3DSIH_ROUND_NI,
|
2016-01-27 23:43:41 +01:00
|
|
|
WINED3DSIH_ROUND_PI,
|
2016-01-27 23:43:42 +01:00
|
|
|
WINED3DSIH_ROUND_Z,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_RSQ,
|
2010-10-11 13:06:17 +02:00
|
|
|
WINED3DSIH_SAMPLE,
|
2016-01-27 23:43:46 +01:00
|
|
|
WINED3DSIH_SAMPLE_B,
|
2016-02-03 11:49:08 +01:00
|
|
|
WINED3DSIH_SAMPLE_C,
|
2016-01-27 23:43:45 +01:00
|
|
|
WINED3DSIH_SAMPLE_C_LZ,
|
2010-10-14 13:03:58 +02:00
|
|
|
WINED3DSIH_SAMPLE_GRAD,
|
2016-07-15 11:16:22 +02:00
|
|
|
WINED3DSIH_SAMPLE_INFO,
|
2010-10-11 13:06:18 +02:00
|
|
|
WINED3DSIH_SAMPLE_LOD,
|
2016-07-15 11:16:21 +02:00
|
|
|
WINED3DSIH_SAMPLE_POS,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_SETP,
|
|
|
|
WINED3DSIH_SGE,
|
|
|
|
WINED3DSIH_SGN,
|
|
|
|
WINED3DSIH_SINCOS,
|
|
|
|
WINED3DSIH_SLT,
|
2010-10-20 12:12:27 +02:00
|
|
|
WINED3DSIH_SQRT,
|
2016-06-13 10:39:31 +02:00
|
|
|
WINED3DSIH_STORE_RAW,
|
2016-06-13 10:39:35 +02:00
|
|
|
WINED3DSIH_STORE_STRUCTURED,
|
2016-03-25 19:53:39 +01:00
|
|
|
WINED3DSIH_STORE_UAV_TYPED,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_SUB,
|
2016-07-05 11:46:52 +02:00
|
|
|
WINED3DSIH_SWAPC,
|
2016-06-03 11:33:03 +02:00
|
|
|
WINED3DSIH_SWITCH,
|
2016-11-30 12:47:30 +01:00
|
|
|
WINED3DSIH_SYNC,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_TEX,
|
|
|
|
WINED3DSIH_TEXBEM,
|
|
|
|
WINED3DSIH_TEXBEML,
|
|
|
|
WINED3DSIH_TEXCOORD,
|
|
|
|
WINED3DSIH_TEXDEPTH,
|
|
|
|
WINED3DSIH_TEXDP3,
|
|
|
|
WINED3DSIH_TEXDP3TEX,
|
|
|
|
WINED3DSIH_TEXKILL,
|
|
|
|
WINED3DSIH_TEXLDD,
|
|
|
|
WINED3DSIH_TEXLDL,
|
|
|
|
WINED3DSIH_TEXM3x2DEPTH,
|
|
|
|
WINED3DSIH_TEXM3x2PAD,
|
|
|
|
WINED3DSIH_TEXM3x2TEX,
|
|
|
|
WINED3DSIH_TEXM3x3,
|
|
|
|
WINED3DSIH_TEXM3x3DIFF,
|
|
|
|
WINED3DSIH_TEXM3x3PAD,
|
|
|
|
WINED3DSIH_TEXM3x3SPEC,
|
|
|
|
WINED3DSIH_TEXM3x3TEX,
|
|
|
|
WINED3DSIH_TEXM3x3VSPEC,
|
|
|
|
WINED3DSIH_TEXREG2AR,
|
|
|
|
WINED3DSIH_TEXREG2GB,
|
|
|
|
WINED3DSIH_TEXREG2RGB,
|
2016-07-15 11:16:23 +02:00
|
|
|
WINED3DSIH_UBFE,
|
2011-11-21 18:48:37 +01:00
|
|
|
WINED3DSIH_UDIV,
|
2014-11-17 11:29:24 +01:00
|
|
|
WINED3DSIH_UGE,
|
2016-04-04 11:26:36 +02:00
|
|
|
WINED3DSIH_ULT,
|
2016-06-03 11:33:02 +02:00
|
|
|
WINED3DSIH_UMAX,
|
2016-07-15 11:16:19 +02:00
|
|
|
WINED3DSIH_UMIN,
|
2017-03-10 09:10:55 +01:00
|
|
|
WINED3DSIH_UMUL,
|
2011-11-21 18:48:38 +01:00
|
|
|
WINED3DSIH_USHR,
|
2010-10-11 13:06:19 +02:00
|
|
|
WINED3DSIH_UTOF,
|
2011-11-21 18:48:39 +01:00
|
|
|
WINED3DSIH_XOR,
|
2008-09-23 17:39:34 +02:00
|
|
|
WINED3DSIH_TABLE_SIZE
|
|
|
|
};
|
|
|
|
|
2009-05-06 17:59:21 +02:00
|
|
|
struct wined3d_shader_version
|
|
|
|
{
|
|
|
|
enum wined3d_shader_type type;
|
|
|
|
BYTE major;
|
|
|
|
BYTE minor;
|
|
|
|
};
|
|
|
|
|
2014-12-03 10:28:11 +01:00
|
|
|
struct wined3d_shader_resource_info
|
|
|
|
{
|
|
|
|
enum wined3d_shader_resource_type type;
|
|
|
|
enum wined3d_data_type data_type;
|
2017-02-14 13:15:09 +01:00
|
|
|
unsigned int flags;
|
2017-02-23 15:00:54 +01:00
|
|
|
unsigned int stride;
|
2014-12-03 10:28:11 +01:00
|
|
|
};
|
|
|
|
|
2016-01-05 21:52:31 +01:00
|
|
|
#define WINED3D_SAMPLER_DEFAULT ~0x0u
|
|
|
|
|
2015-01-19 13:44:08 +01:00
|
|
|
struct wined3d_shader_sampler_map_entry
|
|
|
|
{
|
|
|
|
unsigned int resource_idx;
|
|
|
|
unsigned int sampler_idx;
|
|
|
|
unsigned int bind_idx;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_shader_sampler_map
|
|
|
|
{
|
|
|
|
struct wined3d_shader_sampler_map_entry *entries;
|
|
|
|
size_t size;
|
|
|
|
size_t count;
|
|
|
|
};
|
|
|
|
|
2016-02-01 00:14:36 +01:00
|
|
|
struct wined3d_shader_immediate_constant_buffer
|
|
|
|
{
|
2016-07-08 12:12:32 +02:00
|
|
|
unsigned int vec4_count;
|
2016-02-01 00:14:36 +01:00
|
|
|
DWORD data[MAX_IMMEDIATE_CONSTANT_BUFFER_SIZE];
|
|
|
|
};
|
|
|
|
|
2016-07-04 12:26:30 +02:00
|
|
|
struct wined3d_shader_indexable_temp
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
unsigned int register_idx;
|
|
|
|
unsigned int register_size;
|
|
|
|
unsigned int component_count;
|
|
|
|
};
|
|
|
|
|
2009-05-06 17:59:21 +02:00
|
|
|
#define WINED3D_SHADER_VERSION(major, minor) (((major) << 8) | (minor))
|
|
|
|
|
2010-12-06 20:33:02 +01:00
|
|
|
struct wined3d_shader_reg_maps
|
2009-04-01 12:23:01 +02:00
|
|
|
{
|
2009-05-06 17:59:21 +02:00
|
|
|
struct wined3d_shader_version shader_version;
|
2015-10-12 23:17:04 +02:00
|
|
|
BYTE texcoord; /* MAX_REG_TEXCRD, 8 */
|
|
|
|
BYTE address; /* MAX_REG_ADDR, 1 */
|
|
|
|
WORD labels; /* MAX_LABELS, 16 */
|
2016-07-05 11:46:54 +02:00
|
|
|
DWORD temporary; /* 32 */
|
|
|
|
unsigned int temporary_count;
|
2015-10-12 23:17:04 +02:00
|
|
|
DWORD *constf; /* pixel, vertex */
|
2016-07-04 12:26:30 +02:00
|
|
|
struct list indexable_temps;
|
2016-02-04 21:56:35 +01:00
|
|
|
const struct wined3d_shader_immediate_constant_buffer *icb;
|
2015-10-12 23:17:04 +02:00
|
|
|
union
|
|
|
|
{
|
|
|
|
DWORD texcoord_mask[MAX_REG_TEXCRD]; /* vertex < 3.0 */
|
|
|
|
BYTE output_registers_mask[MAX_REG_OUTPUT]; /* vertex >= 3.0 */
|
|
|
|
} u;
|
|
|
|
DWORD input_registers; /* max(MAX_REG_INPUT, MAX_ATTRIBS), 32 */
|
|
|
|
DWORD output_registers; /* MAX_REG_OUTPUT, 32 */
|
2016-05-17 14:01:47 +02:00
|
|
|
WORD integer_constants; /* WINED3D_MAX_CONSTS_I, 16 */
|
2016-05-17 19:41:56 +02:00
|
|
|
WORD boolean_constants; /* WINED3D_MAX_CONSTS_B, 16 */
|
2016-05-17 14:01:47 +02:00
|
|
|
WORD local_int_consts; /* WINED3D_MAX_CONSTS_I, 16 */
|
2016-05-17 19:41:56 +02:00
|
|
|
WORD local_bool_consts; /* WINED3D_MAX_CONSTS_B, 16 */
|
2012-10-02 22:15:40 +02:00
|
|
|
UINT cb_sizes[WINED3D_MAX_CBS];
|
2020-05-12 22:42:58 +02:00
|
|
|
uint32_t cb_map; /* WINED3D_MAX_CBS, 15 */
|
2009-04-01 12:23:01 +02:00
|
|
|
|
2016-11-25 12:17:54 +01:00
|
|
|
struct wined3d_shader_resource_info resource_info[MAX_SHADER_RESOURCE_VIEWS];
|
2020-05-12 22:42:58 +02:00
|
|
|
uint32_t resource_map[WINED3D_BITMAP_SIZE(MAX_SHADER_RESOURCE_VIEWS)];
|
2015-01-19 13:44:08 +01:00
|
|
|
struct wined3d_shader_sampler_map sampler_map;
|
2016-03-23 13:42:53 +01:00
|
|
|
DWORD sampler_comparison_mode;
|
2019-02-20 21:53:57 +01:00
|
|
|
BYTE bumpmat; /* WINED3D_MAX_TEXTURES, 8 */
|
|
|
|
BYTE luminanceparams; /* WINED3D_MAX_TEXTURES, 8 */
|
2016-11-23 14:36:04 +01:00
|
|
|
struct wined3d_shader_resource_info uav_resource_info[MAX_UNORDERED_ACCESS_VIEWS];
|
2017-12-05 00:26:29 +01:00
|
|
|
DWORD uav_read_mask : 8; /* MAX_UNORDERED_ACCESS_VIEWS, 8 */
|
|
|
|
DWORD uav_counter_mask : 8; /* MAX_UNORDERED_ACCESS_VIEWS, 8 */
|
|
|
|
|
2019-02-22 01:53:55 +01:00
|
|
|
DWORD clip_distance_mask : 8; /* WINED3D_MAX_CLIP_DISTANCES, 8 */
|
|
|
|
DWORD cull_distance_mask : 8; /* WINED3D_MAX_CLIP_DISTANCES, 8 */
|
2017-12-05 00:26:29 +01:00
|
|
|
DWORD usesnrm : 1;
|
|
|
|
DWORD vpos : 1;
|
|
|
|
DWORD usesdsx : 1;
|
|
|
|
DWORD usesdsy : 1;
|
|
|
|
DWORD usestexldd : 1;
|
|
|
|
DWORD usesmova : 1;
|
|
|
|
DWORD usesfacing : 1;
|
|
|
|
DWORD usesrelconstF : 1;
|
|
|
|
DWORD fog : 1;
|
|
|
|
DWORD usestexldl : 1;
|
|
|
|
DWORD usesifc : 1;
|
|
|
|
DWORD usescall : 1;
|
|
|
|
DWORD usespow : 1;
|
|
|
|
DWORD point_size : 1;
|
|
|
|
DWORD vocp : 1;
|
2017-12-07 12:14:18 +01:00
|
|
|
DWORD input_rel_addressing : 1;
|
2018-04-23 16:20:17 +02:00
|
|
|
DWORD viewport_array : 1;
|
2018-05-17 13:17:37 +02:00
|
|
|
DWORD sample_mask : 1;
|
|
|
|
DWORD padding : 14;
|
2009-04-01 12:23:01 +02:00
|
|
|
|
2011-05-24 22:24:12 +02:00
|
|
|
DWORD rt_mask; /* Used render targets, 32 max. */
|
|
|
|
|
2009-04-01 12:23:01 +02:00
|
|
|
/* Whether or not loops are used in this shader, and nesting depth */
|
2017-12-05 00:26:29 +01:00
|
|
|
unsigned int loop_depth;
|
|
|
|
unsigned int min_rel_offset, max_rel_offset;
|
2017-02-28 14:42:37 +01:00
|
|
|
|
|
|
|
struct wined3d_shader_tgsm *tgsm;
|
|
|
|
SIZE_T tgsm_capacity;
|
|
|
|
unsigned int tgsm_count;
|
2010-12-06 20:33:02 +01:00
|
|
|
};
|
2009-04-01 12:23:01 +02:00
|
|
|
|
2010-10-29 12:25:15 +02:00
|
|
|
/* Keeps track of details for TEX_M#x# instructions which need to maintain
|
|
|
|
* state information between multiple instructions. */
|
|
|
|
struct wined3d_shader_tex_mx
|
|
|
|
{
|
|
|
|
unsigned int current_row;
|
|
|
|
DWORD texcoord_w[2];
|
|
|
|
};
|
|
|
|
|
2016-12-07 12:42:58 +01:00
|
|
|
struct wined3d_shader_parser_state
|
2010-10-29 12:25:16 +02:00
|
|
|
{
|
2016-12-07 12:42:58 +01:00
|
|
|
unsigned int current_loop_depth;
|
|
|
|
unsigned int current_loop_reg;
|
|
|
|
BOOL in_subroutine;
|
2010-10-29 12:25:16 +02:00
|
|
|
};
|
|
|
|
|
2009-04-15 10:06:28 +02:00
|
|
|
struct wined3d_shader_context
|
|
|
|
{
|
2011-06-23 00:02:35 +02:00
|
|
|
const struct wined3d_shader *shader;
|
2010-12-06 20:33:02 +01:00
|
|
|
const struct wined3d_shader_reg_maps *reg_maps;
|
2015-04-24 22:25:41 +02:00
|
|
|
struct wined3d_string_buffer *buffer;
|
2010-10-29 12:25:15 +02:00
|
|
|
struct wined3d_shader_tex_mx *tex_mx;
|
2016-12-07 12:42:58 +01:00
|
|
|
struct wined3d_shader_parser_state *state;
|
2009-05-15 13:56:40 +02:00
|
|
|
void *backend_data;
|
2009-04-15 10:06:28 +02:00
|
|
|
};
|
|
|
|
|
2012-10-14 18:40:36 +02:00
|
|
|
struct wined3d_shader_register_index
|
|
|
|
{
|
|
|
|
const struct wined3d_shader_src_param *rel_addr;
|
|
|
|
unsigned int offset;
|
|
|
|
};
|
|
|
|
|
2009-05-07 16:36:07 +02:00
|
|
|
struct wined3d_shader_register
|
|
|
|
{
|
2011-11-13 19:52:27 +01:00
|
|
|
enum wined3d_shader_register_type type;
|
2012-09-04 20:15:09 +02:00
|
|
|
enum wined3d_data_type data_type;
|
2012-10-14 18:40:36 +02:00
|
|
|
struct wined3d_shader_register_index idx[2];
|
2009-05-07 16:36:07 +02:00
|
|
|
enum wined3d_immconst_type immconst_type;
|
2016-12-07 12:43:03 +01:00
|
|
|
union
|
|
|
|
{
|
|
|
|
DWORD immconst_data[4];
|
|
|
|
unsigned fp_body_idx;
|
|
|
|
} u;
|
2009-05-07 16:36:07 +02:00
|
|
|
};
|
|
|
|
|
2009-04-03 10:36:38 +02:00
|
|
|
struct wined3d_shader_dst_param
|
|
|
|
{
|
2009-05-07 16:36:07 +02:00
|
|
|
struct wined3d_shader_register reg;
|
2009-04-07 11:09:11 +02:00
|
|
|
DWORD write_mask;
|
2009-04-06 10:10:08 +02:00
|
|
|
DWORD modifiers;
|
2009-04-10 09:15:06 +02:00
|
|
|
DWORD shift;
|
2009-04-03 10:36:38 +02:00
|
|
|
};
|
|
|
|
|
2009-04-15 10:06:28 +02:00
|
|
|
struct wined3d_shader_src_param
|
|
|
|
{
|
2009-05-07 16:36:07 +02:00
|
|
|
struct wined3d_shader_register reg;
|
2009-04-21 09:35:05 +02:00
|
|
|
DWORD swizzle;
|
2011-11-14 21:11:42 +01:00
|
|
|
enum wined3d_shader_src_modifier modifiers;
|
2009-04-15 10:06:28 +02:00
|
|
|
};
|
|
|
|
|
2017-03-10 09:10:57 +01:00
|
|
|
struct wined3d_shader_index_range
|
|
|
|
{
|
|
|
|
struct wined3d_shader_dst_param first_register;
|
|
|
|
unsigned int last_register;
|
|
|
|
};
|
|
|
|
|
2012-09-04 20:15:08 +02:00
|
|
|
struct wined3d_shader_semantic
|
|
|
|
{
|
|
|
|
enum wined3d_decl_usage usage;
|
|
|
|
UINT usage_idx;
|
2014-12-03 10:28:09 +01:00
|
|
|
enum wined3d_shader_resource_type resource_type;
|
2014-12-03 10:28:11 +01:00
|
|
|
enum wined3d_data_type resource_data_type;
|
2012-09-04 20:15:08 +02:00
|
|
|
struct wined3d_shader_dst_param reg;
|
|
|
|
};
|
|
|
|
|
2017-05-20 13:46:01 +02:00
|
|
|
enum wined3d_shader_input_sysval_semantic
|
|
|
|
{
|
|
|
|
WINED3D_SIV_POSITION = 1,
|
|
|
|
WINED3D_SIV_CLIP_DISTANCE = 2,
|
|
|
|
WINED3D_SIV_CULL_DISTANCE = 3,
|
|
|
|
WINED3D_SIV_RENDER_TARGET_ARRAY_INDEX = 4,
|
|
|
|
WINED3D_SIV_VIEWPORT_ARRAY_INDEX = 5,
|
|
|
|
WINED3D_SIV_VERTEX_ID = 6,
|
|
|
|
WINED3D_SIV_PRIMITIVE_ID = 7,
|
|
|
|
WINED3D_SIV_INSTANCE_ID = 8,
|
|
|
|
WINED3D_SIV_IS_FRONT_FACE = 9,
|
|
|
|
WINED3D_SIV_SAMPLE_INDEX = 10,
|
|
|
|
WINED3D_SIV_QUAD_U0_TESS_FACTOR = 11,
|
|
|
|
WINED3D_SIV_QUAD_V0_TESS_FACTOR = 12,
|
|
|
|
WINED3D_SIV_QUAD_U1_TESS_FACTOR = 13,
|
|
|
|
WINED3D_SIV_QUAD_V1_TESS_FACTOR = 14,
|
|
|
|
WINED3D_SIV_QUAD_U_INNER_TESS_FACTOR = 15,
|
|
|
|
WINED3D_SIV_QUAD_V_INNER_TESS_FACTOR = 16,
|
|
|
|
WINED3D_SIV_TRIANGLE_U_TESS_FACTOR = 17,
|
|
|
|
WINED3D_SIV_TRIANGLE_V_TESS_FACTOR = 18,
|
|
|
|
WINED3D_SIV_TRIANGLE_W_TESS_FACTOR = 19,
|
|
|
|
WINED3D_SIV_TRIANGLE_INNER_TESS_FACTOR = 20,
|
|
|
|
WINED3D_SIV_LINE_DETAIL_TESS_FACTOR = 21,
|
|
|
|
WINED3D_SIV_LINE_DENSITY_TESS_FACTOR = 22,
|
|
|
|
};
|
|
|
|
|
2016-02-02 11:32:29 +01:00
|
|
|
struct wined3d_shader_register_semantic
|
|
|
|
{
|
|
|
|
struct wined3d_shader_dst_param reg;
|
2017-05-20 13:46:01 +02:00
|
|
|
enum wined3d_shader_input_sysval_semantic sysval_semantic;
|
2016-02-02 11:32:29 +01:00
|
|
|
};
|
|
|
|
|
2016-03-25 19:53:36 +01:00
|
|
|
struct wined3d_shader_structured_resource
|
|
|
|
{
|
|
|
|
struct wined3d_shader_dst_param reg;
|
|
|
|
unsigned int byte_stride;
|
|
|
|
};
|
|
|
|
|
2017-02-28 14:42:37 +01:00
|
|
|
struct wined3d_shader_tgsm
|
|
|
|
{
|
|
|
|
unsigned int size;
|
2017-02-28 14:42:38 +01:00
|
|
|
unsigned int stride;
|
2017-02-28 14:42:37 +01:00
|
|
|
};
|
|
|
|
|
2016-06-22 11:37:30 +02:00
|
|
|
struct wined3d_shader_tgsm_raw
|
|
|
|
{
|
|
|
|
struct wined3d_shader_dst_param reg;
|
|
|
|
unsigned int byte_count;
|
|
|
|
};
|
|
|
|
|
2016-06-22 11:37:31 +02:00
|
|
|
struct wined3d_shader_tgsm_structured
|
|
|
|
{
|
|
|
|
struct wined3d_shader_dst_param reg;
|
|
|
|
unsigned int byte_stride;
|
|
|
|
unsigned int structure_count;
|
|
|
|
};
|
|
|
|
|
2016-06-21 13:10:02 +02:00
|
|
|
struct wined3d_shader_thread_group_size
|
|
|
|
{
|
|
|
|
unsigned int x, y, z;
|
|
|
|
};
|
|
|
|
|
2016-12-07 12:43:03 +01:00
|
|
|
struct wined3d_shader_function_table_pointer
|
|
|
|
{
|
|
|
|
unsigned int index;
|
|
|
|
unsigned int array_size;
|
|
|
|
unsigned int body_count;
|
|
|
|
unsigned int table_count;
|
|
|
|
};
|
|
|
|
|
2016-03-08 17:46:50 +01:00
|
|
|
struct wined3d_shader_texel_offset
|
|
|
|
{
|
|
|
|
signed char u, v, w;
|
|
|
|
};
|
|
|
|
|
2017-05-15 12:05:47 +02:00
|
|
|
struct wined3d_shader_primitive_type
|
|
|
|
{
|
|
|
|
enum wined3d_primitive_type type;
|
|
|
|
unsigned int patch_vertex_count;
|
|
|
|
};
|
|
|
|
|
2009-04-01 12:23:01 +02:00
|
|
|
struct wined3d_shader_instruction
|
2009-04-01 12:23:01 +02:00
|
|
|
{
|
2009-04-15 10:06:28 +02:00
|
|
|
const struct wined3d_shader_context *ctx;
|
2009-04-02 10:41:00 +02:00
|
|
|
enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
|
2009-04-01 12:23:01 +02:00
|
|
|
DWORD flags;
|
2017-04-07 14:45:15 +02:00
|
|
|
unsigned int dst_count;
|
|
|
|
unsigned int src_count;
|
2009-04-03 10:36:38 +02:00
|
|
|
const struct wined3d_shader_dst_param *dst;
|
2009-04-15 10:06:28 +02:00
|
|
|
const struct wined3d_shader_src_param *src;
|
2016-03-08 17:46:50 +01:00
|
|
|
struct wined3d_shader_texel_offset texel_offset;
|
2020-09-03 01:40:35 +02:00
|
|
|
enum wined3d_shader_resource_type resource_type;
|
2020-09-03 01:40:36 +02:00
|
|
|
enum wined3d_data_type resource_data_type;
|
2017-04-07 14:45:15 +02:00
|
|
|
BOOL coissue;
|
|
|
|
const struct wined3d_shader_src_param *predicate;
|
2012-09-17 12:22:22 +02:00
|
|
|
union
|
|
|
|
{
|
|
|
|
struct wined3d_shader_semantic semantic;
|
2016-02-02 11:32:29 +01:00
|
|
|
struct wined3d_shader_register_semantic register_semantic;
|
2017-05-15 12:05:47 +02:00
|
|
|
struct wined3d_shader_primitive_type primitive_type;
|
2016-02-01 00:14:37 +01:00
|
|
|
struct wined3d_shader_dst_param dst;
|
2012-10-01 22:48:13 +02:00
|
|
|
struct wined3d_shader_src_param src;
|
2016-12-07 12:43:03 +01:00
|
|
|
unsigned int count;
|
|
|
|
unsigned int index;
|
2016-02-04 21:56:36 +01:00
|
|
|
const struct wined3d_shader_immediate_constant_buffer *icb;
|
2016-03-25 19:53:36 +01:00
|
|
|
struct wined3d_shader_structured_resource structured_resource;
|
2016-06-22 11:37:30 +02:00
|
|
|
struct wined3d_shader_tgsm_raw tgsm_raw;
|
2016-06-22 11:37:31 +02:00
|
|
|
struct wined3d_shader_tgsm_structured tgsm_structured;
|
2016-06-21 13:10:02 +02:00
|
|
|
struct wined3d_shader_thread_group_size thread_group_size;
|
2016-04-01 11:21:37 +02:00
|
|
|
enum wined3d_tessellator_domain tessellator_domain;
|
2016-04-01 11:21:38 +02:00
|
|
|
enum wined3d_tessellator_output_primitive tessellator_output_primitive;
|
2016-04-01 11:21:39 +02:00
|
|
|
enum wined3d_tessellator_partitioning tessellator_partitioning;
|
2016-03-31 10:54:42 +02:00
|
|
|
float max_tessellation_factor;
|
2017-03-10 09:10:57 +01:00
|
|
|
struct wined3d_shader_index_range index_range;
|
2016-06-23 12:08:00 +02:00
|
|
|
struct wined3d_shader_indexable_temp indexable_temp;
|
2016-12-07 12:43:03 +01:00
|
|
|
struct wined3d_shader_function_table_pointer fp;
|
2012-09-17 12:22:22 +02:00
|
|
|
} declaration;
|
2009-04-08 08:35:06 +02:00
|
|
|
};
|
|
|
|
|
2016-03-08 17:46:50 +01:00
|
|
|
static inline BOOL wined3d_shader_instruction_has_texel_offset(const struct wined3d_shader_instruction *ins)
|
|
|
|
{
|
|
|
|
return ins->texel_offset.u || ins->texel_offset.v || ins->texel_offset.w;
|
|
|
|
}
|
|
|
|
|
2009-05-27 10:24:50 +02:00
|
|
|
struct wined3d_shader_attribute
|
|
|
|
{
|
2012-01-18 21:46:22 +01:00
|
|
|
enum wined3d_decl_usage usage;
|
2009-05-27 10:24:50 +02:00
|
|
|
UINT usage_idx;
|
|
|
|
};
|
|
|
|
|
2009-08-10 09:30:48 +02:00
|
|
|
struct wined3d_shader_loop_control
|
|
|
|
{
|
|
|
|
unsigned int count;
|
|
|
|
unsigned int start;
|
|
|
|
int step;
|
|
|
|
};
|
|
|
|
|
2009-05-04 09:49:27 +02:00
|
|
|
struct wined3d_shader_frontend
|
|
|
|
{
|
2017-02-21 00:40:04 +01:00
|
|
|
void *(*shader_init)(const DWORD *byte_code, size_t byte_code_size,
|
|
|
|
const struct wined3d_shader_signature *output_signature);
|
2009-05-05 09:38:03 +02:00
|
|
|
void (*shader_free)(void *data);
|
2009-05-06 17:59:21 +02:00
|
|
|
void (*shader_read_header)(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version);
|
2012-09-04 20:15:08 +02:00
|
|
|
void (*shader_read_instruction)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins);
|
2009-05-05 09:38:03 +02:00
|
|
|
BOOL (*shader_is_end)(void *data, const DWORD **ptr);
|
2009-05-04 09:49:27 +02:00
|
|
|
};
|
|
|
|
|
2009-09-11 19:01:19 +02:00
|
|
|
extern const struct wined3d_shader_frontend sm1_shader_frontend DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_shader_frontend sm4_shader_frontend DECLSPEC_HIDDEN;
|
2018-04-23 16:20:14 +02:00
|
|
|
|
2018-10-05 14:10:17 +02:00
|
|
|
HRESULT shader_extract_from_dxbc(struct wined3d_shader *shader,
|
2019-02-11 16:32:13 +01:00
|
|
|
unsigned int max_shader_version, enum wined3d_shader_byte_code_format *format) DECLSPEC_HIDDEN;
|
2019-02-11 16:32:14 +01:00
|
|
|
BOOL shader_get_stream_output_register_info(const struct wined3d_shader *shader,
|
|
|
|
const struct wined3d_stream_output_element *so_element, unsigned int *register_idx,
|
|
|
|
unsigned int *component_idx) DECLSPEC_HIDDEN;
|
2018-10-05 14:10:17 +02:00
|
|
|
|
2009-04-01 12:23:01 +02:00
|
|
|
typedef void (*SHADER_HANDLER)(const struct wined3d_shader_instruction *);
|
2008-09-23 17:39:34 +02:00
|
|
|
|
2019-08-05 15:09:58 +02:00
|
|
|
#define WINED3D_SHADER_CAP_VS_CLIPPING 0x00000001u
|
|
|
|
#define WINED3D_SHADER_CAP_SRGB_WRITE 0x00000002u
|
|
|
|
#define WINED3D_SHADER_CAP_DOUBLE_PRECISION 0x00000004u
|
|
|
|
#define WINED3D_SHADER_CAP_OUTPUT_INTERPOLATION 0x00000008u
|
2019-08-13 22:02:09 +02:00
|
|
|
#define WINED3D_SHADER_CAP_FULL_FFP_VARYINGS 0x00000010u
|
2013-01-21 09:08:37 +01:00
|
|
|
|
2012-09-18 22:13:59 +02:00
|
|
|
struct shader_caps
|
|
|
|
{
|
2016-03-29 12:14:53 +02:00
|
|
|
unsigned int vs_version;
|
|
|
|
unsigned int hs_version;
|
2016-04-01 11:21:41 +02:00
|
|
|
unsigned int ds_version;
|
2016-03-29 12:14:53 +02:00
|
|
|
unsigned int gs_version;
|
|
|
|
unsigned int ps_version;
|
2016-06-21 13:09:56 +02:00
|
|
|
unsigned int cs_version;
|
2008-03-18 19:39:26 +01:00
|
|
|
|
2019-08-05 22:53:18 +02:00
|
|
|
unsigned int vs_uniform_count;
|
|
|
|
unsigned int ps_uniform_count;
|
2012-09-18 22:13:59 +02:00
|
|
|
float ps_1x_max_value;
|
2019-08-05 22:53:18 +02:00
|
|
|
unsigned int varying_count;
|
2008-03-18 19:39:26 +01:00
|
|
|
|
2013-01-21 09:08:37 +01:00
|
|
|
DWORD wined3d_caps;
|
2008-03-18 19:39:26 +01:00
|
|
|
};
|
|
|
|
|
2015-04-02 00:30:49 +02:00
|
|
|
enum wined3d_gl_resource_type
|
2008-10-27 18:31:31 +01:00
|
|
|
{
|
2015-04-02 00:30:49 +02:00
|
|
|
WINED3D_GL_RES_TYPE_TEX_1D = 0,
|
|
|
|
WINED3D_GL_RES_TYPE_TEX_2D = 1,
|
|
|
|
WINED3D_GL_RES_TYPE_TEX_3D = 2,
|
|
|
|
WINED3D_GL_RES_TYPE_TEX_CUBE = 3,
|
|
|
|
WINED3D_GL_RES_TYPE_TEX_RECT = 4,
|
2015-04-24 10:33:47 +02:00
|
|
|
WINED3D_GL_RES_TYPE_BUFFER = 5,
|
2015-06-06 17:53:54 +02:00
|
|
|
WINED3D_GL_RES_TYPE_RB = 6,
|
|
|
|
WINED3D_GL_RES_TYPE_COUNT = 7,
|
2008-10-27 18:31:31 +01:00
|
|
|
};
|
|
|
|
|
2018-03-23 11:44:29 +01:00
|
|
|
enum wined3d_vertex_processing_mode
|
|
|
|
{
|
|
|
|
WINED3D_VP_MODE_FF,
|
|
|
|
WINED3D_VP_MODE_SHADER,
|
|
|
|
WINED3D_VP_MODE_NONE,
|
2008-12-14 15:40:07 +01:00
|
|
|
};
|
|
|
|
|
2009-03-09 14:31:28 +01:00
|
|
|
#define WINED3D_CONST_NUM_UNUSED ~0U
|
|
|
|
|
2013-05-30 10:05:34 +02:00
|
|
|
enum wined3d_ffp_ps_fog_mode
|
|
|
|
{
|
|
|
|
WINED3D_FFP_PS_FOG_OFF,
|
|
|
|
WINED3D_FFP_PS_FOG_LINEAR,
|
|
|
|
WINED3D_FFP_PS_FOG_EXP,
|
|
|
|
WINED3D_FFP_PS_FOG_EXP2,
|
2008-12-15 19:35:40 +01:00
|
|
|
};
|
|
|
|
|
2008-12-14 15:40:07 +01:00
|
|
|
/* Stateblock dependent parameters which have to be hardcoded
|
|
|
|
* into the shader code
|
|
|
|
*/
|
2010-09-30 12:16:16 +02:00
|
|
|
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3D_PSARGS_PROJECTED (1u << 3)
|
2010-09-30 12:16:16 +02:00
|
|
|
#define WINED3D_PSARGS_TEXTRANSFORM_SHIFT 4
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3D_PSARGS_TEXTRANSFORM_MASK 0xfu
|
2013-04-13 16:37:16 +02:00
|
|
|
#define WINED3D_PSARGS_TEXTYPE_SHIFT 2
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3D_PSARGS_TEXTYPE_MASK 0x3u
|
2013-04-13 16:37:16 +02:00
|
|
|
|
2015-04-02 00:30:49 +02:00
|
|
|
/* Used for Shader Model 1 pixel shaders to track the bound texture
|
|
|
|
* type. 2D and RECT textures are separated through NP2 fixup. */
|
2013-04-13 16:37:16 +02:00
|
|
|
enum wined3d_shader_tex_types
|
|
|
|
{
|
|
|
|
WINED3D_SHADER_TEX_2D = 0,
|
|
|
|
WINED3D_SHADER_TEX_3D = 1,
|
|
|
|
WINED3D_SHADER_TEX_CUBE = 2,
|
2019-07-03 16:56:41 +02:00
|
|
|
WINED3D_SHADER_TEX_ERR = 3,
|
2013-04-13 16:37:16 +02:00
|
|
|
};
|
2010-09-30 12:16:16 +02:00
|
|
|
|
2017-10-18 00:25:08 +02:00
|
|
|
struct ps_compile_args
|
|
|
|
{
|
2019-02-20 21:53:58 +01:00
|
|
|
struct color_fixup_desc color_fixup[WINED3D_MAX_FRAGMENT_SAMPLERS];
|
2018-03-23 11:44:29 +01:00
|
|
|
enum wined3d_vertex_processing_mode vp_mode;
|
2013-05-30 10:05:34 +02:00
|
|
|
enum wined3d_ffp_ps_fog_mode fog;
|
2019-07-03 16:56:41 +02:00
|
|
|
DWORD tex_types; /* ps 1 - 3, 16 textures */
|
2010-09-30 12:16:16 +02:00
|
|
|
WORD tex_transform; /* ps 1.0-1.3, 4 textures */
|
|
|
|
WORD srgb_correction;
|
2009-04-09 19:14:03 +02:00
|
|
|
/* Bitmap for NP2 texcoord fixups (16 samplers max currently).
|
2009-03-26 03:15:21 +01:00
|
|
|
D3D9 has a limit of 16 samplers and the fixup is superfluous
|
|
|
|
in D3D10 (unconditional NP2 support mandatory). */
|
2015-10-06 14:24:21 +02:00
|
|
|
WORD np2_fixup;
|
2019-02-20 21:53:58 +01:00
|
|
|
WORD shadow; /* WINED3D_MAX_FRAGMENT_SAMPLERS, 16 */
|
2019-02-20 21:53:57 +01:00
|
|
|
WORD texcoords_initialized; /* WINED3D_MAX_TEXTURES, 8 */
|
2019-07-03 16:56:41 +02:00
|
|
|
WORD padding_to_dword;
|
2016-05-20 19:55:52 +02:00
|
|
|
DWORD pointsprite : 1;
|
|
|
|
DWORD flatshading : 1;
|
|
|
|
DWORD alpha_test_func : 3;
|
2021-05-31 21:12:56 +02:00
|
|
|
DWORD y_correction : 1;
|
2020-03-24 17:35:23 +01:00
|
|
|
DWORD rt_alpha_swizzle : 8; /* WINED3D_MAX_RENDER_TARGETS, 8 */
|
2020-03-18 01:30:38 +01:00
|
|
|
DWORD dual_source_blend : 1;
|
|
|
|
DWORD padding : 17;
|
2008-12-14 15:40:07 +01:00
|
|
|
};
|
|
|
|
|
2017-10-18 00:25:08 +02:00
|
|
|
enum fog_src_type
|
|
|
|
{
|
2009-02-05 19:44:32 +01:00
|
|
|
VS_FOG_Z = 0,
|
|
|
|
VS_FOG_COORD = 1
|
|
|
|
};
|
|
|
|
|
2015-06-02 16:39:46 +02:00
|
|
|
struct vs_compile_args
|
|
|
|
{
|
|
|
|
BYTE fog_src;
|
|
|
|
BYTE clip_enabled : 1;
|
|
|
|
BYTE point_size : 1;
|
|
|
|
BYTE per_vertex_point_size : 1;
|
2015-11-12 23:06:50 +01:00
|
|
|
BYTE flatshading : 1;
|
2016-05-20 19:55:56 +02:00
|
|
|
BYTE next_shader_type : 3;
|
|
|
|
BYTE padding : 1;
|
2015-06-02 16:39:46 +02:00
|
|
|
WORD swizzle_map; /* MAX_ATTRIBS, 16 */
|
2016-05-20 19:55:55 +02:00
|
|
|
unsigned int next_shader_input_count;
|
2017-10-18 00:25:09 +02:00
|
|
|
DWORD interpolation_mode[WINED3D_PACKED_INTERPOLATION_SIZE];
|
2009-02-05 19:44:32 +01:00
|
|
|
};
|
|
|
|
|
2017-05-16 15:00:24 +02:00
|
|
|
struct ds_compile_args
|
|
|
|
{
|
|
|
|
enum wined3d_tessellator_output_primitive tessellator_output_primitive;
|
|
|
|
enum wined3d_tessellator_partitioning tessellator_partitioning;
|
|
|
|
unsigned int output_count : 16;
|
|
|
|
unsigned int next_shader_type : 3;
|
|
|
|
unsigned int render_offscreen : 1;
|
2017-05-17 15:42:33 +02:00
|
|
|
unsigned int padding : 12;
|
2017-10-18 00:25:09 +02:00
|
|
|
DWORD interpolation_mode[WINED3D_PACKED_INTERPOLATION_SIZE];
|
2017-05-16 15:00:24 +02:00
|
|
|
};
|
|
|
|
|
2016-05-20 19:55:56 +02:00
|
|
|
struct gs_compile_args
|
|
|
|
{
|
2017-03-23 12:15:47 +01:00
|
|
|
unsigned int output_count;
|
2018-04-23 16:20:16 +02:00
|
|
|
enum wined3d_primitive_type primitive_type;
|
2017-10-18 00:25:09 +02:00
|
|
|
DWORD interpolation_mode[WINED3D_PACKED_INTERPOLATION_SIZE];
|
2016-05-20 19:55:56 +02:00
|
|
|
};
|
|
|
|
|
2011-05-04 22:18:46 +02:00
|
|
|
struct wined3d_shader_backend_ops
|
|
|
|
{
|
2009-05-27 18:23:16 +02:00
|
|
|
void (*shader_handle_instruction)(const struct wined3d_shader_instruction *);
|
2017-04-13 11:21:44 +02:00
|
|
|
void (*shader_precompile)(void *shader_priv, struct wined3d_shader *shader);
|
2013-08-16 09:12:30 +02:00
|
|
|
void (*shader_select)(void *shader_priv, struct wined3d_context *context,
|
2013-05-14 17:38:19 +02:00
|
|
|
const struct wined3d_state *state);
|
2017-02-02 12:43:41 +01:00
|
|
|
void (*shader_select_compute)(void *shader_priv, struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state);
|
2013-08-23 10:18:14 +02:00
|
|
|
void (*shader_disable)(void *shader_priv, struct wined3d_context *context);
|
2011-05-16 23:01:23 +02:00
|
|
|
void (*shader_update_float_vertex_constants)(struct wined3d_device *device, UINT start, UINT count);
|
|
|
|
void (*shader_update_float_pixel_constants)(struct wined3d_device *device, UINT start, UINT count);
|
2013-08-16 09:12:30 +02:00
|
|
|
void (*shader_load_constants)(void *shader_priv, struct wined3d_context *context,
|
2013-05-14 17:38:17 +02:00
|
|
|
const struct wined3d_state *state);
|
2011-03-30 20:49:25 +02:00
|
|
|
void (*shader_destroy)(struct wined3d_shader *shader);
|
2013-04-25 12:16:47 +02:00
|
|
|
HRESULT (*shader_alloc_private)(struct wined3d_device *device, const struct wined3d_vertex_pipe_ops *vertex_pipe,
|
2019-07-31 22:18:06 +02:00
|
|
|
const struct wined3d_fragment_pipe_ops *fragment_pipe);
|
2019-03-26 18:29:46 +01:00
|
|
|
void (*shader_free_private)(struct wined3d_device *device, struct wined3d_context *context);
|
2013-08-23 10:18:14 +02:00
|
|
|
BOOL (*shader_allocate_context_data)(struct wined3d_context *context);
|
|
|
|
void (*shader_free_context_data)(struct wined3d_context *context);
|
2015-06-02 16:39:46 +02:00
|
|
|
void (*shader_init_context_state)(struct wined3d_context *context);
|
2019-03-29 13:00:13 +01:00
|
|
|
void (*shader_get_caps)(const struct wined3d_adapter *adapter, struct shader_caps *caps);
|
2008-12-03 14:53:43 +01:00
|
|
|
BOOL (*shader_color_fixup_supported)(struct color_fixup_desc fixup);
|
2012-10-24 21:23:37 +02:00
|
|
|
BOOL (*shader_has_ffp_proj_control)(void *shader_priv);
|
2021-10-06 10:50:11 +02:00
|
|
|
uint64_t (*shader_compile)(struct wined3d_context *context, const struct wined3d_shader_desc *shader_desc,
|
|
|
|
enum wined3d_shader_type shader_type);
|
2011-05-04 22:18:46 +02:00
|
|
|
};
|
2006-11-27 20:50:37 +01:00
|
|
|
|
2011-05-04 22:18:46 +02:00
|
|
|
extern const struct wined3d_shader_backend_ops glsl_shader_backend DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_shader_backend_ops arb_program_shader_backend DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_shader_backend_ops none_shader_backend DECLSPEC_HIDDEN;
|
2006-11-27 20:50:37 +01:00
|
|
|
|
2020-05-12 22:42:57 +02:00
|
|
|
const struct wined3d_shader_backend_ops *wined3d_spirv_shader_backend_init_vk(void) DECLSPEC_HIDDEN;
|
|
|
|
|
2012-07-24 11:32:23 +02:00
|
|
|
#define GL_EXTCALL(f) (gl_info->gl_ops.ext.p_##f)
|
2004-10-06 02:05:29 +02:00
|
|
|
|
2012-07-20 00:24:27 +02:00
|
|
|
#define D3DCOLOR_B_R(dw) (((dw) >> 16) & 0xff)
|
|
|
|
#define D3DCOLOR_B_G(dw) (((dw) >> 8) & 0xff)
|
|
|
|
#define D3DCOLOR_B_B(dw) (((dw) >> 0) & 0xff)
|
|
|
|
#define D3DCOLOR_B_A(dw) (((dw) >> 24) & 0xff)
|
2005-11-15 13:03:13 +01:00
|
|
|
|
2016-03-08 15:51:13 +01:00
|
|
|
static inline void wined3d_color_from_d3dcolor(struct wined3d_color *wined3d_color, DWORD d3d_color)
|
|
|
|
{
|
|
|
|
wined3d_color->r = D3DCOLOR_B_R(d3d_color) / 255.0f;
|
|
|
|
wined3d_color->g = D3DCOLOR_B_G(d3d_color) / 255.0f;
|
|
|
|
wined3d_color->b = D3DCOLOR_B_B(d3d_color) / 255.0f;
|
|
|
|
wined3d_color->a = D3DCOLOR_B_A(d3d_color) / 255.0f;
|
|
|
|
}
|
2006-05-25 13:54:03 +02:00
|
|
|
|
2019-08-19 13:54:29 +02:00
|
|
|
extern const struct wined3d_vec4 wined3d_srgb_const[] DECLSPEC_HIDDEN;
|
2019-08-19 13:54:28 +02:00
|
|
|
|
|
|
|
static inline float wined3d_srgb_from_linear(float colour)
|
|
|
|
{
|
|
|
|
if (colour < 0.0f)
|
|
|
|
return 0.0f;
|
2019-08-19 13:54:29 +02:00
|
|
|
if (colour < wined3d_srgb_const[1].x)
|
|
|
|
return colour * wined3d_srgb_const[0].w;
|
2019-08-19 13:54:28 +02:00
|
|
|
if (colour < 1.0f)
|
2019-08-19 13:54:29 +02:00
|
|
|
return wined3d_srgb_const[0].y * powf(colour, wined3d_srgb_const[0].x) - wined3d_srgb_const[0].z;
|
2019-08-19 13:54:28 +02:00
|
|
|
return 1.0f;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_colour_srgb_from_linear(struct wined3d_color *colour_srgb,
|
|
|
|
const struct wined3d_color *colour)
|
|
|
|
{
|
|
|
|
colour_srgb->r = wined3d_srgb_from_linear(colour->r);
|
|
|
|
colour_srgb->g = wined3d_srgb_from_linear(colour->g);
|
|
|
|
colour_srgb->b = wined3d_srgb_from_linear(colour->b);
|
|
|
|
colour_srgb->a = colour->a;
|
|
|
|
}
|
|
|
|
|
2016-06-21 10:32:43 +02:00
|
|
|
void wined3d_check_gl_call(const struct wined3d_gl_info *gl_info,
|
|
|
|
const char *file, unsigned int line, const char *name) DECLSPEC_HIDDEN;
|
|
|
|
|
2004-12-13 14:35:38 +01:00
|
|
|
/* Checking of API calls */
|
|
|
|
/* --------------------- */
|
2008-12-02 18:41:33 +01:00
|
|
|
#ifndef WINE_NO_DEBUG_MSGS
|
2009-07-15 18:45:03 +02:00
|
|
|
#define checkGLcall(A) \
|
|
|
|
do { \
|
2016-06-21 10:32:43 +02:00
|
|
|
if (__WINE_IS_DEBUG_ON(_ERR, &__wine_dbch_d3d) \
|
|
|
|
&& !gl_info->supported[ARB_DEBUG_OUTPUT]) \
|
|
|
|
wined3d_check_gl_call(gl_info, __FILE__, __LINE__, A); \
|
2008-12-03 10:03:26 +01:00
|
|
|
} while(0)
|
2008-12-02 18:41:33 +01:00
|
|
|
#else
|
2008-12-03 10:03:26 +01:00
|
|
|
#define checkGLcall(A) do {} while(0)
|
2008-12-02 18:41:33 +01:00
|
|
|
#endif
|
2004-10-08 22:52:33 +02:00
|
|
|
|
2021-10-12 23:15:44 +02:00
|
|
|
struct wined3d_bo
|
|
|
|
{
|
2022-02-12 02:42:03 +01:00
|
|
|
/* client_map_count and map_ptr are accessed from both the client and CS
|
|
|
|
* threads, and protected by wined3d_device.bo_map_lock. */
|
2021-10-12 23:15:44 +02:00
|
|
|
struct list users;
|
2021-10-15 06:44:18 +02:00
|
|
|
void *map_ptr;
|
2021-11-20 00:23:44 +01:00
|
|
|
size_t buffer_offset;
|
2021-10-12 23:15:45 +02:00
|
|
|
size_t memory_offset;
|
2022-02-12 02:42:03 +01:00
|
|
|
unsigned int client_map_count;
|
2021-10-15 06:44:17 +02:00
|
|
|
bool coherent;
|
2021-10-12 23:15:44 +02:00
|
|
|
};
|
|
|
|
|
2020-04-21 20:07:09 +02:00
|
|
|
struct wined3d_bo_gl
|
|
|
|
{
|
2021-10-12 23:15:44 +02:00
|
|
|
struct wined3d_bo b;
|
|
|
|
|
2020-04-21 20:07:09 +02:00
|
|
|
GLuint id;
|
2022-02-01 22:28:29 +01:00
|
|
|
|
|
|
|
struct wined3d_allocator_block *memory;
|
|
|
|
|
2020-12-04 15:45:33 +01:00
|
|
|
GLsizeiptr size;
|
2020-04-21 20:07:10 +02:00
|
|
|
GLenum binding;
|
2020-11-30 15:41:22 +01:00
|
|
|
GLenum usage;
|
2020-11-30 15:41:25 +01:00
|
|
|
|
2020-12-04 15:45:33 +01:00
|
|
|
GLbitfield flags;
|
2020-11-30 15:41:25 +01:00
|
|
|
uint64_t command_fence_id;
|
2020-04-21 20:07:09 +02:00
|
|
|
};
|
|
|
|
|
2021-11-10 11:36:09 +01:00
|
|
|
static inline struct wined3d_bo_gl *wined3d_bo_gl(struct wined3d_bo *bo)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(bo, struct wined3d_bo_gl, b);
|
|
|
|
}
|
|
|
|
|
2021-11-15 23:30:17 +01:00
|
|
|
static inline GLuint wined3d_bo_gl_id(struct wined3d_bo *bo)
|
2020-04-21 20:07:09 +02:00
|
|
|
{
|
2021-11-15 23:30:17 +01:00
|
|
|
return bo ? wined3d_bo_gl(bo)->id : 0;
|
2020-04-21 20:07:09 +02:00
|
|
|
}
|
|
|
|
|
2020-12-04 15:45:32 +01:00
|
|
|
struct wined3d_bo_user
|
2020-05-12 22:42:59 +02:00
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
bool valid;
|
|
|
|
};
|
|
|
|
|
2020-01-24 17:02:03 +01:00
|
|
|
struct wined3d_bo_vk
|
|
|
|
{
|
2021-10-12 23:15:44 +02:00
|
|
|
struct wined3d_bo b;
|
|
|
|
|
2020-01-24 17:02:03 +01:00
|
|
|
VkBuffer vk_buffer;
|
2020-04-17 17:51:10 +02:00
|
|
|
struct wined3d_allocator_block *memory;
|
2020-04-20 21:00:26 +02:00
|
|
|
struct wined3d_bo_slab_vk *slab;
|
2020-04-17 17:51:10 +02:00
|
|
|
|
2020-01-24 17:02:03 +01:00
|
|
|
VkDeviceMemory vk_memory;
|
2020-04-16 18:29:09 +02:00
|
|
|
|
2020-04-20 21:00:26 +02:00
|
|
|
VkDeviceSize size;
|
|
|
|
VkBufferUsageFlags usage;
|
2020-04-16 18:29:09 +02:00
|
|
|
VkMemoryPropertyFlags memory_type;
|
2020-04-17 17:51:09 +02:00
|
|
|
|
|
|
|
uint64_t command_buffer_id;
|
2021-09-10 15:58:42 +02:00
|
|
|
bool host_synced;
|
2020-01-24 17:02:03 +01:00
|
|
|
};
|
|
|
|
|
2021-11-08 23:34:41 +01:00
|
|
|
static inline struct wined3d_bo_vk *wined3d_bo_vk(struct wined3d_bo *bo)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(bo, struct wined3d_bo_vk, b);
|
|
|
|
}
|
|
|
|
|
2020-04-20 21:00:26 +02:00
|
|
|
struct wined3d_bo_slab_vk_key
|
|
|
|
{
|
|
|
|
VkMemoryPropertyFlags memory_type;
|
|
|
|
VkBufferUsageFlags usage;
|
|
|
|
VkDeviceSize size;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_bo_slab_vk
|
|
|
|
{
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
struct wined3d_bo_slab_vk *next;
|
2020-12-14 15:27:19 +01:00
|
|
|
VkMemoryPropertyFlags requested_memory_type;
|
2020-04-20 21:00:26 +02:00
|
|
|
struct wined3d_bo_vk bo;
|
|
|
|
unsigned int map_count;
|
|
|
|
void *map_ptr;
|
|
|
|
uint32_t map;
|
|
|
|
};
|
|
|
|
|
2020-12-14 15:27:22 +01:00
|
|
|
void *wined3d_bo_slab_vk_map(struct wined3d_bo_slab_vk *slab_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_bo_slab_vk_unmap(struct wined3d_bo_slab_vk *slab_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
|
2011-06-09 20:40:49 +02:00
|
|
|
struct wined3d_bo_address
|
|
|
|
{
|
2021-11-15 23:30:17 +01:00
|
|
|
struct wined3d_bo *buffer_object;
|
2013-08-08 16:42:29 +02:00
|
|
|
BYTE *addr;
|
2011-06-09 20:40:49 +02:00
|
|
|
};
|
|
|
|
|
2015-01-05 13:24:58 +01:00
|
|
|
struct wined3d_const_bo_address
|
|
|
|
{
|
2021-11-15 23:30:18 +01:00
|
|
|
struct wined3d_bo *buffer_object;
|
2015-01-05 13:24:58 +01:00
|
|
|
const BYTE *addr;
|
|
|
|
};
|
|
|
|
|
2021-10-15 06:44:19 +02:00
|
|
|
static inline struct wined3d_const_bo_address *wined3d_const_bo_address(const struct wined3d_bo_address *data)
|
2015-01-05 13:24:58 +01:00
|
|
|
{
|
|
|
|
return (struct wined3d_const_bo_address *)data;
|
|
|
|
}
|
|
|
|
|
2021-03-23 14:21:07 +01:00
|
|
|
struct wined3d_image_vk
|
|
|
|
{
|
|
|
|
VkImage vk_image;
|
|
|
|
struct wined3d_allocator_block *memory;
|
|
|
|
VkDeviceMemory vk_memory;
|
|
|
|
uint64_t command_buffer_id;
|
|
|
|
};
|
|
|
|
|
2009-03-27 10:25:55 +01:00
|
|
|
struct wined3d_stream_info_element
|
|
|
|
{
|
2010-08-30 20:29:49 +02:00
|
|
|
const struct wined3d_format *format;
|
2011-07-11 01:06:46 +02:00
|
|
|
struct wined3d_bo_address data;
|
2009-03-27 10:25:55 +01:00
|
|
|
GLsizei stride;
|
2015-03-24 09:38:23 +01:00
|
|
|
unsigned int stream_idx;
|
|
|
|
unsigned int divisor;
|
2021-03-23 21:52:50 +01:00
|
|
|
bool instanced;
|
2009-03-27 10:25:55 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_stream_info
|
|
|
|
{
|
|
|
|
struct wined3d_stream_info_element elements[MAX_ATTRIBS];
|
2012-04-30 21:30:21 +02:00
|
|
|
DWORD position_transformed : 1;
|
|
|
|
DWORD all_vbo : 1;
|
2009-03-27 10:25:55 +01:00
|
|
|
WORD swizzle_map; /* MAX_ATTRIBS, 16 */
|
|
|
|
WORD use_map; /* MAX_ATTRIBS, 16 */
|
|
|
|
};
|
|
|
|
|
2017-03-06 10:45:23 +01:00
|
|
|
void wined3d_stream_info_from_declaration(struct wined3d_stream_info *stream_info,
|
2019-03-13 14:48:15 +01:00
|
|
|
const struct wined3d_state *state, const struct wined3d_d3d_info *d3d_info) DECLSPEC_HIDDEN;
|
2017-03-06 10:45:23 +01:00
|
|
|
|
2017-08-14 23:47:41 +02:00
|
|
|
struct wined3d_direct_dispatch_parameters
|
|
|
|
{
|
|
|
|
unsigned int group_count_x;
|
|
|
|
unsigned int group_count_y;
|
|
|
|
unsigned int group_count_z;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_indirect_dispatch_parameters
|
|
|
|
{
|
|
|
|
struct wined3d_buffer *buffer;
|
|
|
|
unsigned int offset;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_dispatch_parameters
|
|
|
|
{
|
|
|
|
BOOL indirect;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct wined3d_direct_dispatch_parameters direct;
|
|
|
|
struct wined3d_indirect_dispatch_parameters indirect;
|
|
|
|
} u;
|
|
|
|
};
|
|
|
|
|
2017-11-01 22:08:42 +01:00
|
|
|
struct wined3d_direct_draw_parameters
|
|
|
|
{
|
|
|
|
int base_vertex_idx;
|
|
|
|
unsigned int start_idx;
|
|
|
|
unsigned int index_count;
|
|
|
|
unsigned int start_instance;
|
|
|
|
unsigned int instance_count;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_indirect_draw_parameters
|
|
|
|
{
|
|
|
|
struct wined3d_buffer *buffer;
|
|
|
|
unsigned int offset;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_draw_parameters
|
|
|
|
{
|
|
|
|
BOOL indirect;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct wined3d_direct_draw_parameters direct;
|
|
|
|
struct wined3d_indirect_draw_parameters indirect;
|
|
|
|
} u;
|
|
|
|
BOOL indexed;
|
|
|
|
};
|
|
|
|
|
2016-04-13 19:09:56 +02:00
|
|
|
void draw_primitive(struct wined3d_device *device, const struct wined3d_state *state,
|
2017-11-01 22:08:42 +01:00
|
|
|
const struct wined3d_draw_parameters *draw_parameters) DECLSPEC_HIDDEN;
|
2017-02-02 12:43:40 +01:00
|
|
|
void dispatch_compute(struct wined3d_device *device, const struct wined3d_state *state,
|
2017-08-14 23:47:41 +02:00
|
|
|
const struct wined3d_dispatch_parameters *dispatch_parameters) DECLSPEC_HIDDEN;
|
2006-05-12 22:21:31 +02:00
|
|
|
|
2014-01-01 19:01:41 +01:00
|
|
|
#define eps 1e-8f
|
2006-05-09 18:16:13 +02:00
|
|
|
|
2006-05-12 22:21:31 +02:00
|
|
|
#define GET_TEXCOORD_SIZE_FROM_FVF(d3dvtVertexType, tex_num) \
|
|
|
|
(((((d3dvtVertexType) >> (16 + (2 * (tex_num)))) + 1) & 0x03) + 1)
|
|
|
|
|
2006-12-05 23:36:10 +01:00
|
|
|
/* Routines and structures related to state management */
|
|
|
|
|
2006-12-06 13:22:12 +01:00
|
|
|
#define STATE_RENDER(a) (a)
|
|
|
|
#define STATE_IS_RENDER(a) ((a) >= STATE_RENDER(1) && (a) <= STATE_RENDER(WINEHIGHEST_RENDER_STATE))
|
|
|
|
|
2017-02-06 14:12:15 +01:00
|
|
|
#define STATE_TEXTURESTAGE(stage, num) \
|
|
|
|
(STATE_RENDER(WINEHIGHEST_RENDER_STATE) + 1 + (stage) * (WINED3D_HIGHEST_TEXTURE_STATE + 1) + (num))
|
|
|
|
#define STATE_IS_TEXTURESTAGE(a) \
|
2019-02-20 21:53:57 +01:00
|
|
|
((a) >= STATE_TEXTURESTAGE(0, 1) && (a) <= STATE_TEXTURESTAGE(WINED3D_MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE))
|
2006-12-19 22:43:49 +01:00
|
|
|
|
2006-12-19 23:14:07 +01:00
|
|
|
/* + 1 because samplers start with 0 */
|
2019-02-20 21:53:57 +01:00
|
|
|
#define STATE_SAMPLER(num) (STATE_TEXTURESTAGE(WINED3D_MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE) + 1 + (num))
|
2019-02-20 21:54:00 +01:00
|
|
|
#define STATE_IS_SAMPLER(num) ((num) >= STATE_SAMPLER(0) && (num) <= STATE_SAMPLER(WINED3D_MAX_COMBINED_SAMPLERS - 1))
|
2006-12-19 23:14:07 +01:00
|
|
|
|
2019-02-20 21:54:00 +01:00
|
|
|
#define STATE_GRAPHICS_SHADER(a) (STATE_SAMPLER(WINED3D_MAX_COMBINED_SAMPLERS) + (a))
|
2017-02-06 14:12:15 +01:00
|
|
|
#define STATE_IS_GRAPHICS_SHADER(a) \
|
|
|
|
((a) >= STATE_GRAPHICS_SHADER(0) && (a) < STATE_GRAPHICS_SHADER(WINED3D_SHADER_TYPE_GRAPHICS_COUNT))
|
2006-12-19 23:22:19 +01:00
|
|
|
|
2017-02-06 14:12:15 +01:00
|
|
|
#define STATE_GRAPHICS_CONSTANT_BUFFER(a) (STATE_GRAPHICS_SHADER(WINED3D_SHADER_TYPE_GRAPHICS_COUNT) + (a))
|
|
|
|
#define STATE_IS_GRAPHICS_CONSTANT_BUFFER(a) \
|
|
|
|
((a) >= STATE_GRAPHICS_CONSTANT_BUFFER(0) \
|
|
|
|
&& (a) < STATE_GRAPHICS_CONSTANT_BUFFER(WINED3D_SHADER_TYPE_GRAPHICS_COUNT))
|
2014-08-04 12:17:23 +02:00
|
|
|
|
2017-02-22 13:19:30 +01:00
|
|
|
#define STATE_GRAPHICS_SHADER_RESOURCE_BINDING (STATE_GRAPHICS_CONSTANT_BUFFER(WINED3D_SHADER_TYPE_GRAPHICS_COUNT))
|
|
|
|
#define STATE_IS_GRAPHICS_SHADER_RESOURCE_BINDING(a) ((a) == STATE_GRAPHICS_SHADER_RESOURCE_BINDING)
|
2015-01-19 13:44:08 +01:00
|
|
|
|
2017-02-22 13:19:30 +01:00
|
|
|
#define STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING (STATE_GRAPHICS_SHADER_RESOURCE_BINDING + 1)
|
2017-02-09 12:00:36 +01:00
|
|
|
#define STATE_IS_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING(a) ((a) == STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING)
|
2016-11-23 14:36:05 +01:00
|
|
|
|
2017-02-09 12:00:36 +01:00
|
|
|
#define STATE_TRANSFORM(a) (STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING + (a))
|
2012-01-11 21:27:32 +01:00
|
|
|
#define STATE_IS_TRANSFORM(a) ((a) >= STATE_TRANSFORM(1) && (a) <= STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(255)))
|
2006-12-28 18:57:16 +01:00
|
|
|
|
2012-01-11 21:27:32 +01:00
|
|
|
#define STATE_STREAMSRC (STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(255)) + 1)
|
2007-01-02 00:35:07 +01:00
|
|
|
#define STATE_IS_STREAMSRC(a) ((a) == STATE_STREAMSRC)
|
2007-02-19 15:25:32 +01:00
|
|
|
#define STATE_INDEXBUFFER (STATE_STREAMSRC + 1)
|
|
|
|
#define STATE_IS_INDEXBUFFER(a) ((a) == STATE_INDEXBUFFER)
|
2007-01-02 00:35:07 +01:00
|
|
|
|
2007-02-19 15:25:32 +01:00
|
|
|
#define STATE_VDECL (STATE_INDEXBUFFER + 1)
|
2007-01-02 00:35:07 +01:00
|
|
|
#define STATE_IS_VDECL(a) ((a) == STATE_VDECL)
|
|
|
|
|
2013-10-09 10:39:38 +02:00
|
|
|
#define STATE_VIEWPORT (STATE_VDECL + 1)
|
2007-01-02 21:40:59 +01:00
|
|
|
#define STATE_IS_VIEWPORT(a) ((a) == STATE_VIEWPORT)
|
|
|
|
|
2013-08-16 09:12:30 +02:00
|
|
|
#define STATE_LIGHT_TYPE (STATE_VIEWPORT + 1)
|
2013-05-29 09:45:38 +02:00
|
|
|
#define STATE_IS_LIGHT_TYPE(a) ((a) == STATE_LIGHT_TYPE)
|
|
|
|
#define STATE_ACTIVELIGHT(a) (STATE_LIGHT_TYPE + 1 + (a))
|
2019-02-22 01:53:54 +01:00
|
|
|
#define STATE_IS_ACTIVELIGHT(a) ((a) >= STATE_ACTIVELIGHT(0) && (a) < STATE_ACTIVELIGHT(WINED3D_MAX_ACTIVE_LIGHTS))
|
2007-02-14 17:48:52 +01:00
|
|
|
|
2019-02-22 01:53:54 +01:00
|
|
|
#define STATE_SCISSORRECT (STATE_ACTIVELIGHT(WINED3D_MAX_ACTIVE_LIGHTS - 1) + 1)
|
2007-02-19 15:25:16 +01:00
|
|
|
#define STATE_IS_SCISSORRECT(a) ((a) == STATE_SCISSORRECT)
|
|
|
|
|
2007-02-28 14:36:36 +01:00
|
|
|
#define STATE_CLIPPLANE(a) (STATE_SCISSORRECT + 1 + (a))
|
2019-02-22 01:53:55 +01:00
|
|
|
#define STATE_IS_CLIPPLANE(a) ((a) >= STATE_CLIPPLANE(0) && (a) <= STATE_CLIPPLANE(WINED3D_MAX_CLIP_DISTANCES - 1))
|
2007-02-28 14:36:36 +01:00
|
|
|
|
2019-02-22 01:53:55 +01:00
|
|
|
#define STATE_MATERIAL (STATE_CLIPPLANE(WINED3D_MAX_CLIP_DISTANCES))
|
2010-01-28 23:40:23 +01:00
|
|
|
#define STATE_IS_MATERIAL(a) ((a) == STATE_MATERIAL)
|
2007-06-15 21:33:54 +02:00
|
|
|
|
2018-05-19 18:20:19 +02:00
|
|
|
#define STATE_RASTERIZER (STATE_MATERIAL + 1)
|
|
|
|
#define STATE_IS_RASTERIZER(a) ((a) == STATE_RASTERIZER)
|
2007-09-18 11:43:09 +02:00
|
|
|
|
2018-05-19 18:20:19 +02:00
|
|
|
#define STATE_POINTSPRITECOORDORIGIN (STATE_RASTERIZER + 1)
|
2011-01-07 01:16:18 +01:00
|
|
|
#define STATE_IS_POINTSPRITECOORDORIGIN(a) ((a) == STATE_POINTSPRITECOORDORIGIN)
|
|
|
|
|
2011-06-11 16:18:45 +02:00
|
|
|
#define STATE_BASEVERTEXINDEX (STATE_POINTSPRITECOORDORIGIN + 1)
|
|
|
|
#define STATE_IS_BASEVERTEXINDEX(a) ((a) == STATE_BASEVERTEXINDEX)
|
|
|
|
|
2011-07-02 11:24:37 +02:00
|
|
|
#define STATE_FRAMEBUFFER (STATE_BASEVERTEXINDEX + 1)
|
|
|
|
#define STATE_IS_FRAMEBUFFER(a) ((a) == STATE_FRAMEBUFFER)
|
|
|
|
|
2015-06-05 00:37:29 +02:00
|
|
|
#define STATE_POINT_ENABLE (STATE_FRAMEBUFFER + 1)
|
|
|
|
#define STATE_IS_POINT_ENABLE(a) ((a) == STATE_POINT_ENABLE)
|
2013-05-29 09:45:36 +02:00
|
|
|
|
2015-06-05 00:37:29 +02:00
|
|
|
#define STATE_COLOR_KEY (STATE_POINT_ENABLE + 1)
|
2015-04-14 11:16:22 +02:00
|
|
|
#define STATE_IS_COLOR_KEY(a) ((a) == STATE_COLOR_KEY)
|
|
|
|
|
2017-03-29 15:11:08 +02:00
|
|
|
#define STATE_STREAM_OUTPUT (STATE_COLOR_KEY + 1)
|
|
|
|
#define STATE_IS_STREAM_OUTPUT(a) ((a) == STATE_STREAM_OUTPUT)
|
|
|
|
|
2018-02-08 15:22:44 +01:00
|
|
|
#define STATE_BLEND (STATE_STREAM_OUTPUT + 1)
|
|
|
|
#define STATE_IS_BLEND(a) ((a) == STATE_BLEND)
|
|
|
|
|
2018-10-18 00:41:13 +02:00
|
|
|
#define STATE_BLEND_FACTOR (STATE_BLEND + 1)
|
|
|
|
#define STATE_IS_BLEND_FACTOR(a) ((a) == STATE_BLEND_FACTOR)
|
|
|
|
|
2020-09-02 07:27:42 +02:00
|
|
|
#define STATE_SAMPLE_MASK (STATE_BLEND_FACTOR + 1)
|
|
|
|
#define STATE_IS_SAMPLE_MASK(a) ((a) == STATE_SAMPLE_MASK)
|
|
|
|
|
2020-09-25 05:43:11 +02:00
|
|
|
#define STATE_DEPTH_STENCIL (STATE_SAMPLE_MASK + 1)
|
|
|
|
#define STATE_IS_DEPTH_STENCIL(a) ((a) == STATE_DEPTH_STENCIL)
|
|
|
|
|
2021-02-03 14:12:47 +01:00
|
|
|
#define STATE_STENCIL_REF (STATE_DEPTH_STENCIL + 1)
|
|
|
|
#define STATE_IS_STENCIL_REF(a) ((a) == STATE_STENCIL_REF)
|
|
|
|
|
|
|
|
#define STATE_COMPUTE_OFFSET (STATE_STENCIL_REF + 1)
|
2017-02-06 14:12:15 +01:00
|
|
|
|
|
|
|
#define STATE_COMPUTE_SHADER (STATE_COMPUTE_OFFSET)
|
|
|
|
#define STATE_IS_COMPUTE_SHADER(a) ((a) == STATE_COMPUTE_SHADER)
|
|
|
|
|
|
|
|
#define STATE_COMPUTE_CONSTANT_BUFFER (STATE_COMPUTE_SHADER + 1)
|
|
|
|
#define STATE_IS_COMPUTE_CONSTANT_BUFFER(a) ((a) == STATE_COMPUTE_CONSTANT_BUFFER)
|
|
|
|
|
2017-02-22 13:19:30 +01:00
|
|
|
#define STATE_COMPUTE_SHADER_RESOURCE_BINDING (STATE_COMPUTE_CONSTANT_BUFFER + 1)
|
|
|
|
#define STATE_IS_COMPUTE_SHADER_RESOURCE_BINDING(a) ((a) == STATE_COMPUTE_SHADER_RESOURCE_BINDING)
|
|
|
|
|
|
|
|
#define STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING (STATE_COMPUTE_SHADER_RESOURCE_BINDING + 1)
|
2017-02-09 12:00:29 +01:00
|
|
|
#define STATE_IS_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING(a) ((a) == STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING)
|
|
|
|
|
|
|
|
#define STATE_COMPUTE_HIGHEST (STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING)
|
|
|
|
#define STATE_HIGHEST (STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING)
|
2017-02-06 14:12:15 +01:00
|
|
|
|
2017-02-06 14:12:16 +01:00
|
|
|
#define STATE_IS_COMPUTE(a) ((a) >= STATE_COMPUTE_OFFSET && (a) <= STATE_COMPUTE_HIGHEST)
|
2017-02-06 14:12:15 +01:00
|
|
|
#define STATE_COMPUTE_COUNT (STATE_COMPUTE_HIGHEST - STATE_COMPUTE_OFFSET + 1)
|
2006-12-19 13:00:03 +01:00
|
|
|
|
2017-02-06 14:12:15 +01:00
|
|
|
#define STATE_SHADER(a) ((a) != WINED3D_SHADER_TYPE_COMPUTE ? STATE_GRAPHICS_SHADER(a) : STATE_COMPUTE_SHADER)
|
|
|
|
#define STATE_CONSTANT_BUFFER(a) \
|
|
|
|
((a) != WINED3D_SHADER_TYPE_COMPUTE ? STATE_GRAPHICS_CONSTANT_BUFFER(a) : STATE_COMPUTE_CONSTANT_BUFFER)
|
2017-02-09 12:00:36 +01:00
|
|
|
#define STATE_UNORDERED_ACCESS_VIEW_BINDING(a) ((a) == WINED3D_PIPELINE_GRAPHICS ? \
|
|
|
|
STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING : STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING)
|
2017-02-06 14:12:14 +01:00
|
|
|
|
2008-12-15 19:37:36 +01:00
|
|
|
enum fogsource {
|
|
|
|
FOGSOURCE_FFP,
|
|
|
|
FOGSOURCE_VS,
|
|
|
|
FOGSOURCE_COORD,
|
|
|
|
};
|
|
|
|
|
2017-07-09 13:25:49 +02:00
|
|
|
union wined3d_gl_fence_object
|
|
|
|
{
|
|
|
|
GLuint id;
|
|
|
|
GLsync sync;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum wined3d_fence_result
|
|
|
|
{
|
|
|
|
WINED3D_FENCE_OK,
|
|
|
|
WINED3D_FENCE_WAITING,
|
|
|
|
WINED3D_FENCE_NOT_STARTED,
|
|
|
|
WINED3D_FENCE_WRONG_THREAD,
|
|
|
|
WINED3D_FENCE_ERROR,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_fence
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
union wined3d_gl_fence_object object;
|
2019-05-14 12:56:19 +02:00
|
|
|
struct wined3d_context_gl *context_gl;
|
2017-07-09 13:25:49 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
HRESULT wined3d_fence_create(struct wined3d_device *device, struct wined3d_fence **fence) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_fence_destroy(struct wined3d_fence *fence) DECLSPEC_HIDDEN;
|
2019-06-05 14:24:07 +02:00
|
|
|
void wined3d_fence_issue(struct wined3d_fence *fence, struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2017-07-09 13:25:49 +02:00
|
|
|
enum wined3d_fence_result wined3d_fence_wait(const struct wined3d_fence *fence,
|
2019-06-05 14:24:07 +02:00
|
|
|
struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2020-11-30 15:41:25 +01:00
|
|
|
enum wined3d_fence_result wined3d_fence_test(const struct wined3d_fence *fence,
|
|
|
|
struct wined3d_device *device, DWORD flags) DECLSPEC_HIDDEN;
|
2017-07-09 13:25:49 +02:00
|
|
|
|
2016-07-22 00:43:48 +02:00
|
|
|
/* Direct3D terminology with little modifications. We do not have an issued
|
|
|
|
* state because only the driver knows about it, but we have a created state
|
|
|
|
* because D3D allows GetData() on a created query, but OpenGL doesn't. */
|
|
|
|
enum wined3d_query_state
|
|
|
|
{
|
|
|
|
QUERY_CREATED,
|
|
|
|
QUERY_SIGNALLED,
|
|
|
|
QUERY_BUILDING
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_query_ops
|
|
|
|
{
|
2017-01-04 00:04:49 +01:00
|
|
|
BOOL (*query_poll)(struct wined3d_query *query, DWORD flags);
|
2017-04-13 00:11:01 +02:00
|
|
|
BOOL (*query_issue)(struct wined3d_query *query, DWORD flags);
|
2017-05-26 10:48:03 +02:00
|
|
|
void (*query_destroy)(struct wined3d_query *query);
|
2016-07-22 00:43:48 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_query
|
|
|
|
{
|
|
|
|
LONG ref;
|
|
|
|
|
|
|
|
void *parent;
|
2017-05-10 15:54:07 +02:00
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2016-07-22 00:43:48 +02:00
|
|
|
struct wined3d_device *device;
|
|
|
|
enum wined3d_query_state state;
|
|
|
|
enum wined3d_query_type type;
|
2016-07-28 13:29:41 +02:00
|
|
|
const void *data;
|
2016-07-22 00:43:48 +02:00
|
|
|
DWORD data_size;
|
|
|
|
const struct wined3d_query_ops *query_ops;
|
2017-04-13 00:11:01 +02:00
|
|
|
|
|
|
|
LONG counter_main, counter_retrieved;
|
|
|
|
struct list poll_list_entry;
|
2018-09-28 20:18:29 +02:00
|
|
|
|
|
|
|
GLuint buffer_object;
|
|
|
|
UINT64 *map_ptr;
|
2022-03-04 18:12:56 +01:00
|
|
|
bool poll_in_cs;
|
2016-07-22 00:43:48 +02:00
|
|
|
};
|
|
|
|
|
2019-08-15 11:50:00 +02:00
|
|
|
HRESULT wined3d_query_gl_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent,
|
|
|
|
const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_query_gl_destroy_buffer_object(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_query *query) DECLSPEC_HIDDEN;
|
|
|
|
|
2009-07-24 10:44:14 +02:00
|
|
|
struct wined3d_event_query
|
|
|
|
{
|
2016-07-22 00:43:48 +02:00
|
|
|
struct wined3d_query query;
|
|
|
|
|
2017-07-09 13:25:49 +02:00
|
|
|
struct wined3d_fence fence;
|
2016-07-28 13:29:41 +02:00
|
|
|
BOOL signalled;
|
2009-07-24 10:44:14 +02:00
|
|
|
};
|
|
|
|
|
2016-07-22 00:43:49 +02:00
|
|
|
struct wined3d_occlusion_query
|
|
|
|
{
|
|
|
|
struct wined3d_query query;
|
|
|
|
|
|
|
|
struct list entry;
|
|
|
|
GLuint id;
|
2019-05-10 18:31:07 +02:00
|
|
|
struct wined3d_context_gl *context_gl;
|
2016-11-21 15:15:53 +01:00
|
|
|
UINT64 samples;
|
2017-04-13 00:11:01 +02:00
|
|
|
BOOL started;
|
2016-07-22 00:43:49 +02:00
|
|
|
};
|
|
|
|
|
2014-04-16 18:14:48 +02:00
|
|
|
struct wined3d_timestamp_query
|
|
|
|
{
|
2016-07-22 00:43:50 +02:00
|
|
|
struct wined3d_query query;
|
|
|
|
|
2014-04-16 18:14:48 +02:00
|
|
|
struct list entry;
|
|
|
|
GLuint id;
|
2019-05-14 12:56:20 +02:00
|
|
|
struct wined3d_context_gl *context_gl;
|
2016-07-28 13:29:41 +02:00
|
|
|
UINT64 timestamp;
|
2014-04-16 18:14:48 +02:00
|
|
|
};
|
|
|
|
|
2017-05-24 17:09:59 +02:00
|
|
|
union wined3d_gl_so_statistics_query
|
|
|
|
{
|
|
|
|
GLuint id[2];
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
GLuint written;
|
|
|
|
GLuint generated;
|
|
|
|
} query;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_so_statistics_query
|
|
|
|
{
|
|
|
|
struct wined3d_query query;
|
|
|
|
|
|
|
|
struct list entry;
|
|
|
|
union wined3d_gl_so_statistics_query u;
|
2019-05-14 12:56:21 +02:00
|
|
|
struct wined3d_context_gl *context_gl;
|
2017-05-24 17:09:59 +02:00
|
|
|
unsigned int stream_idx;
|
|
|
|
struct wined3d_query_data_so_statistics statistics;
|
|
|
|
BOOL started;
|
|
|
|
};
|
|
|
|
|
2017-06-05 00:47:34 +02:00
|
|
|
union wined3d_gl_pipeline_statistics_query
|
|
|
|
{
|
|
|
|
GLuint id[11];
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
GLuint vertices;
|
|
|
|
GLuint primitives;
|
|
|
|
GLuint vertex_shader;
|
|
|
|
GLuint tess_control_shader;
|
|
|
|
GLuint tess_eval_shader;
|
|
|
|
GLuint geometry_shader;
|
|
|
|
GLuint geometry_primitives;
|
|
|
|
GLuint fragment_shader;
|
|
|
|
GLuint compute_shader;
|
|
|
|
GLuint clipping_input;
|
|
|
|
GLuint clipping_output;
|
|
|
|
} query;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_pipeline_statistics_query
|
|
|
|
{
|
|
|
|
struct wined3d_query query;
|
|
|
|
|
|
|
|
struct list entry;
|
|
|
|
union wined3d_gl_pipeline_statistics_query u;
|
2019-05-14 12:56:22 +02:00
|
|
|
struct wined3d_context_gl *context_gl;
|
2017-06-05 00:47:34 +02:00
|
|
|
struct wined3d_query_data_pipeline_statistics statistics;
|
|
|
|
BOOL started;
|
|
|
|
};
|
|
|
|
|
2020-05-26 18:10:11 +02:00
|
|
|
#define WINED3D_QUERY_POOL_SIZE 256
|
|
|
|
|
|
|
|
struct wined3d_query_pool_vk
|
|
|
|
{
|
|
|
|
struct list entry;
|
2021-06-28 17:52:41 +02:00
|
|
|
struct list completed_entry;
|
2020-05-26 18:10:11 +02:00
|
|
|
|
|
|
|
struct list *free_list;
|
|
|
|
VkQueryPool vk_query_pool;
|
wined3d: Avoid waiting for a command buffer to finish executing to read off its queries.
Some games wait for query results on the frame executing the query,
expecting that enough time have passed for it to be available. By
requiring that the entire command buffer is done, we risk stalling the
whole frame if it wasn't flushed along the way. This patch drops this
requirement.
Mainly, we need to ensure that we don't call vkGetQueryPoolResults()
before the reset command is executed, and accidentally retrieve result
from previous usage. Using host query reset doesn't quite solve the
problem, as it might get called too early, if the application decides to
reuse a query without waiting for results. Besides, we want to support
devices where host query reset is not available.
To make it work, when a Vulkan query is no longer needed, we queue it
for resetting at command buffer submission time, and only mark it free
for reuse after this command buffer is finished executing.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 15:21:56 +01:00
|
|
|
VkEvent vk_event;
|
|
|
|
|
2020-05-26 18:10:11 +02:00
|
|
|
uint32_t allocated[WINED3D_BITMAP_SIZE(WINED3D_QUERY_POOL_SIZE)];
|
2021-06-28 17:52:41 +02:00
|
|
|
uint32_t completed[WINED3D_BITMAP_SIZE(WINED3D_QUERY_POOL_SIZE)];
|
2020-05-26 18:10:11 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
bool wined3d_query_pool_vk_allocate_query(struct wined3d_query_pool_vk *pool_vk, size_t *idx) DECLSPEC_HIDDEN;
|
wined3d: Avoid waiting for a command buffer to finish executing to read off its queries.
Some games wait for query results on the frame executing the query,
expecting that enough time have passed for it to be available. By
requiring that the entire command buffer is done, we risk stalling the
whole frame if it wasn't flushed along the way. This patch drops this
requirement.
Mainly, we need to ensure that we don't call vkGetQueryPoolResults()
before the reset command is executed, and accidentally retrieve result
from previous usage. Using host query reset doesn't quite solve the
problem, as it might get called too early, if the application decides to
reuse a query without waiting for results. Besides, we want to support
devices where host query reset is not available.
To make it work, when a Vulkan query is no longer needed, we queue it
for resetting at command buffer submission time, and only mark it free
for reuse after this command buffer is finished executing.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 15:21:56 +01:00
|
|
|
void wined3d_query_pool_vk_mark_free(struct wined3d_context_vk *context_vk, struct wined3d_query_pool_vk *pool_vk,
|
|
|
|
uint32_t start, uint32_t count) DECLSPEC_HIDDEN;
|
2020-05-26 18:10:11 +02:00
|
|
|
void wined3d_query_pool_vk_cleanup(struct wined3d_query_pool_vk *pool_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
bool wined3d_query_pool_vk_init(struct wined3d_query_pool_vk *pool_vk, struct wined3d_context_vk *context_vk,
|
|
|
|
enum wined3d_query_type type, struct list *free_pools) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
struct wined3d_query_pool_idx_vk
|
|
|
|
{
|
|
|
|
struct wined3d_query_pool_vk *pool_vk;
|
|
|
|
size_t idx;
|
|
|
|
};
|
|
|
|
|
2021-07-28 13:42:13 +02:00
|
|
|
#define WINED3D_QUERY_VK_FLAG_ACTIVE 0x00000001
|
|
|
|
#define WINED3D_QUERY_VK_FLAG_STARTED 0x00000002
|
|
|
|
#define WINED3D_QUERY_VK_FLAG_RENDER_PASS 0x00000004
|
|
|
|
|
2020-05-26 18:10:11 +02:00
|
|
|
struct wined3d_query_vk
|
|
|
|
{
|
|
|
|
struct wined3d_query q;
|
|
|
|
|
|
|
|
struct list entry;
|
|
|
|
struct wined3d_query_pool_idx_vk pool_idx;
|
2021-07-28 13:42:13 +02:00
|
|
|
uint8_t flags;
|
2020-05-26 18:10:11 +02:00
|
|
|
uint64_t command_buffer_id;
|
|
|
|
uint32_t control_flags;
|
2022-03-04 18:12:59 +01:00
|
|
|
VkEvent vk_event;
|
2022-03-04 18:12:57 +01:00
|
|
|
SIZE_T pending_count, pending_size;
|
|
|
|
struct wined3d_query_pool_idx_vk *pending;
|
2020-05-26 18:10:11 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_query_vk *wined3d_query_vk(struct wined3d_query *query)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(query, struct wined3d_query_vk, q);
|
|
|
|
}
|
|
|
|
|
2022-03-04 18:12:58 +01:00
|
|
|
struct wined3d_device_vk;
|
|
|
|
|
|
|
|
bool wined3d_query_vk_accumulate_data(struct wined3d_query_vk *query_vk, struct wined3d_device_vk *device_vk,
|
2020-05-26 18:10:11 +02:00
|
|
|
const struct wined3d_query_pool_idx_vk *pool_idx) DECLSPEC_HIDDEN;
|
|
|
|
HRESULT wined3d_query_vk_create(struct wined3d_device *device, enum wined3d_query_type type, void *parent,
|
|
|
|
const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_query_vk_resume(struct wined3d_query_vk *query_vk, struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_query_vk_suspend(struct wined3d_query_vk *query_vk, struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
|
2017-04-10 12:27:42 +02:00
|
|
|
struct wined3d_gl_view
|
|
|
|
{
|
|
|
|
GLenum target;
|
|
|
|
GLuint name;
|
|
|
|
};
|
|
|
|
|
2020-02-27 13:31:10 +01:00
|
|
|
struct wined3d_range
|
2019-09-23 13:24:16 +02:00
|
|
|
{
|
|
|
|
unsigned int offset;
|
|
|
|
unsigned int size;
|
|
|
|
};
|
|
|
|
|
2017-04-06 11:47:50 +02:00
|
|
|
struct wined3d_rendertarget_info
|
|
|
|
{
|
2017-04-10 12:27:42 +02:00
|
|
|
struct wined3d_gl_view gl_view;
|
2017-04-06 11:47:50 +02:00
|
|
|
struct wined3d_resource *resource;
|
|
|
|
unsigned int sub_resource_idx;
|
2017-04-10 12:27:43 +02:00
|
|
|
unsigned int layer_count;
|
2017-04-06 11:47:50 +02:00
|
|
|
};
|
|
|
|
|
2019-05-14 12:56:23 +02:00
|
|
|
struct wined3d_fb_state
|
|
|
|
{
|
2020-03-24 17:35:23 +01:00
|
|
|
struct wined3d_rendertarget_view *render_targets[WINED3D_MAX_RENDER_TARGETS];
|
2019-05-14 12:56:23 +02:00
|
|
|
struct wined3d_rendertarget_view *depth_stencil;
|
|
|
|
};
|
|
|
|
|
2017-03-14 13:15:57 +01:00
|
|
|
#define MAX_GL_FRAGMENT_SAMPLERS 32
|
|
|
|
|
2009-08-03 08:06:51 +02:00
|
|
|
struct wined3d_context
|
2009-07-17 10:34:02 +02:00
|
|
|
{
|
2013-04-25 15:20:24 +02:00
|
|
|
const struct wined3d_d3d_info *d3d_info;
|
2019-03-03 19:55:27 +01:00
|
|
|
const struct wined3d_state_entry *state_table;
|
2020-05-12 22:42:55 +02:00
|
|
|
uint32_t dirty_graphics_states[WINED3D_BITMAP_SIZE(STATE_HIGHEST)];
|
|
|
|
uint32_t dirty_compute_states[WINED3D_BITMAP_SIZE(STATE_COMPUTE_COUNT)];
|
2007-02-12 19:18:31 +01:00
|
|
|
|
2016-10-05 11:17:03 +02:00
|
|
|
struct wined3d_device *device;
|
2011-04-13 19:14:32 +02:00
|
|
|
struct wined3d_swapchain *swapchain;
|
2016-03-29 16:45:32 +02:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct wined3d_texture *texture;
|
|
|
|
unsigned int sub_resource_idx;
|
|
|
|
} current_rt;
|
2007-02-12 19:18:31 +01:00
|
|
|
|
2008-01-09 20:37:05 +01:00
|
|
|
/* Stores some information about the context state for optimization */
|
2019-06-06 14:51:06 +02:00
|
|
|
DWORD shader_update_mask : 6; /* WINED3D_SHADER_TYPE_COUNT, 6 */
|
|
|
|
DWORD update_shader_resource_bindings : 1;
|
|
|
|
DWORD update_compute_shader_resource_bindings : 1;
|
|
|
|
DWORD update_unordered_access_view_bindings : 1;
|
|
|
|
DWORD update_compute_unordered_access_view_bindings : 1;
|
2017-12-02 10:24:42 +01:00
|
|
|
DWORD last_swizzle_map : 16; /* MAX_ATTRIBS, 16 */
|
2019-06-06 14:51:06 +02:00
|
|
|
DWORD last_was_rhw : 1; /* True iff last draw_primitive was in xyzrhw mode. */
|
2012-11-04 19:51:32 +01:00
|
|
|
DWORD last_was_pshader : 1;
|
|
|
|
DWORD last_was_vshader : 1;
|
2018-08-05 00:17:51 +02:00
|
|
|
DWORD last_was_diffuse : 1;
|
|
|
|
DWORD last_was_specular : 1;
|
2015-12-14 23:37:53 +01:00
|
|
|
DWORD last_was_normal : 1;
|
2019-06-06 14:51:06 +02:00
|
|
|
|
2018-04-16 15:29:30 +02:00
|
|
|
DWORD last_was_ffp_blit : 1;
|
2012-11-04 19:51:32 +01:00
|
|
|
DWORD last_was_blit : 1;
|
|
|
|
DWORD last_was_ckey : 1;
|
2020-03-18 01:30:38 +01:00
|
|
|
DWORD last_was_dual_source_blend : 1;
|
2019-02-20 21:53:57 +01:00
|
|
|
DWORD texShaderBumpMap : 8; /* WINED3D_MAX_TEXTURES, 8 */
|
|
|
|
DWORD lastWasPow2Texture : 8; /* WINED3D_MAX_TEXTURES, 8 */
|
|
|
|
DWORD fixed_function_usage_map : 8; /* WINED3D_MAX_TEXTURES, 8 */
|
|
|
|
DWORD lowest_disabled_stage : 4; /* Max WINED3D_MAX_TEXTURES, 8 */
|
2019-06-06 14:51:06 +02:00
|
|
|
|
2015-12-14 23:37:53 +01:00
|
|
|
DWORD use_immediate_mode_draw : 1;
|
2019-06-06 14:51:05 +02:00
|
|
|
DWORD uses_uavs : 1;
|
2019-10-23 18:44:58 +02:00
|
|
|
DWORD uses_fbo_attached_resources : 1;
|
2019-06-06 14:51:04 +02:00
|
|
|
DWORD transform_feedback_active : 1;
|
|
|
|
DWORD transform_feedback_paused : 1;
|
2019-06-06 14:51:06 +02:00
|
|
|
DWORD fog_coord : 1;
|
|
|
|
DWORD render_offscreen : 1;
|
|
|
|
DWORD current : 1;
|
|
|
|
DWORD destroyed : 1;
|
|
|
|
DWORD destroy_delayed : 1;
|
2019-02-22 01:53:55 +01:00
|
|
|
DWORD clip_distance_mask : 8; /* WINED3D_MAX_CLIP_DISTANCES, 8 */
|
2020-03-18 01:30:38 +01:00
|
|
|
DWORD namedArraysLoaded : 1;
|
|
|
|
DWORD padding : 13;
|
2018-03-13 11:23:06 +01:00
|
|
|
|
2013-08-16 09:12:30 +02:00
|
|
|
DWORD constant_update_mask;
|
2018-04-16 15:29:30 +02:00
|
|
|
DWORD numbered_array_mask;
|
2019-06-05 14:24:06 +02:00
|
|
|
enum fogsource fog_source;
|
2007-02-12 19:21:10 +01:00
|
|
|
|
2013-09-16 12:43:20 +02:00
|
|
|
UINT instance_count;
|
|
|
|
|
2013-08-23 10:18:14 +02:00
|
|
|
void *shader_backend_data;
|
2015-03-23 18:59:09 +01:00
|
|
|
void *fragment_pipe_data;
|
2013-08-23 10:18:14 +02:00
|
|
|
|
2013-09-12 12:23:29 +02:00
|
|
|
struct wined3d_stream_info stream_info;
|
|
|
|
|
2018-04-14 11:12:38 +02:00
|
|
|
unsigned int viewport_count;
|
2018-04-23 14:34:03 +02:00
|
|
|
unsigned int scissor_rect_count;
|
2007-02-12 19:18:31 +01:00
|
|
|
};
|
|
|
|
|
2019-05-07 12:30:10 +02:00
|
|
|
void wined3d_context_cleanup(struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2020-04-16 18:29:07 +02:00
|
|
|
void wined3d_context_init(struct wined3d_context *context, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
2020-04-17 17:51:08 +02:00
|
|
|
void context_preload_textures(struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN;
|
|
|
|
void context_update_stream_info(struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN;
|
2019-05-07 12:30:10 +02:00
|
|
|
|
|
|
|
HRESULT wined3d_context_no3d_init(struct wined3d_context *context_no3d,
|
|
|
|
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
|
|
|
|
2020-11-30 15:41:25 +01:00
|
|
|
struct wined3d_command_fence_gl
|
|
|
|
{
|
|
|
|
uint64_t id;
|
|
|
|
struct wined3d_fence *fence;
|
|
|
|
};
|
|
|
|
|
2019-05-02 14:40:51 +02:00
|
|
|
struct wined3d_context_gl
|
|
|
|
{
|
|
|
|
struct wined3d_context c;
|
2019-05-08 15:21:34 +02:00
|
|
|
|
2019-08-07 13:41:58 +02:00
|
|
|
const struct wined3d_gl_info *gl_info;
|
|
|
|
|
2019-06-07 14:52:27 +02:00
|
|
|
DWORD tid; /* Thread ID which owns this context at the moment. */
|
|
|
|
|
2019-06-03 15:40:22 +02:00
|
|
|
uint32_t dc_is_private : 1;
|
|
|
|
uint32_t dc_has_format : 1; /* Only meaningful for private DCs. */
|
2019-05-08 15:21:37 +02:00
|
|
|
uint32_t fog_enabled : 1;
|
2019-05-14 12:56:26 +02:00
|
|
|
uint32_t diffuse_attrib_to_1 : 1;
|
2019-05-19 16:00:43 +02:00
|
|
|
uint32_t rebind_fbo : 1;
|
2019-06-06 14:51:04 +02:00
|
|
|
uint32_t untracked_material_count : 2; /* Max value 2 */
|
2019-06-06 14:51:05 +02:00
|
|
|
uint32_t needs_set : 1;
|
2019-06-06 14:51:06 +02:00
|
|
|
uint32_t valid : 1;
|
|
|
|
uint32_t padding : 23;
|
2019-05-14 12:56:26 +02:00
|
|
|
|
|
|
|
uint32_t default_attrib_value_set;
|
2019-05-08 15:21:37 +02:00
|
|
|
|
2019-06-06 14:51:04 +02:00
|
|
|
GLenum tracking_parm; /* Which source is tracking current colour. */
|
|
|
|
GLenum untracked_materials[2];
|
2019-06-05 14:24:06 +02:00
|
|
|
SIZE blit_size;
|
2019-06-05 14:24:05 +02:00
|
|
|
unsigned int active_texture;
|
|
|
|
|
2019-05-08 15:21:34 +02:00
|
|
|
GLenum *texture_type;
|
2019-05-08 15:21:35 +02:00
|
|
|
|
2019-06-03 15:40:22 +02:00
|
|
|
/* The WGL context. */
|
2019-08-07 13:41:59 +02:00
|
|
|
unsigned int level;
|
2019-06-03 15:40:22 +02:00
|
|
|
HGLRC restore_ctx;
|
|
|
|
HDC restore_dc;
|
|
|
|
int restore_pf;
|
|
|
|
HWND restore_pf_win;
|
|
|
|
HGLRC gl_ctx;
|
|
|
|
HDC dc;
|
|
|
|
int pixel_format;
|
|
|
|
HWND window;
|
|
|
|
GLint aux_buffers;
|
|
|
|
|
2019-05-19 16:00:43 +02:00
|
|
|
/* FBOs. */
|
|
|
|
unsigned int fbo_entry_count;
|
|
|
|
struct list fbo_list;
|
|
|
|
struct list fbo_destroy_list;
|
|
|
|
struct fbo_entry *current_fbo;
|
|
|
|
GLuint fbo_read_binding;
|
|
|
|
GLuint fbo_draw_binding;
|
2020-03-24 17:35:23 +01:00
|
|
|
struct wined3d_rendertarget_info blit_targets[WINED3D_MAX_RENDER_TARGETS];
|
2019-05-19 16:00:43 +02:00
|
|
|
uint32_t draw_buffers_mask; /* Enabled draw buffers, 31 max. */
|
|
|
|
|
2019-05-10 18:31:07 +02:00
|
|
|
/* Queries. */
|
|
|
|
struct list occlusion_queries;
|
2019-05-14 12:56:19 +02:00
|
|
|
struct list fences;
|
2019-05-14 12:56:20 +02:00
|
|
|
struct list timestamp_queries;
|
2019-05-14 12:56:21 +02:00
|
|
|
struct list so_statistics_queries;
|
2019-05-14 12:56:22 +02:00
|
|
|
struct list pipeline_statistics_queries;
|
2019-05-10 18:31:07 +02:00
|
|
|
|
|
|
|
GLuint *free_occlusion_queries;
|
|
|
|
SIZE_T free_occlusion_query_size;
|
|
|
|
unsigned int free_occlusion_query_count;
|
|
|
|
|
2019-05-14 12:56:19 +02:00
|
|
|
union wined3d_gl_fence_object *free_fences;
|
|
|
|
SIZE_T free_fence_size;
|
|
|
|
unsigned int free_fence_count;
|
|
|
|
|
2019-05-14 12:56:20 +02:00
|
|
|
GLuint *free_timestamp_queries;
|
|
|
|
SIZE_T free_timestamp_query_size;
|
|
|
|
unsigned int free_timestamp_query_count;
|
|
|
|
|
2019-05-14 12:56:21 +02:00
|
|
|
union wined3d_gl_so_statistics_query *free_so_statistics_queries;
|
|
|
|
SIZE_T free_so_statistics_query_size;
|
|
|
|
unsigned int free_so_statistics_query_count;
|
|
|
|
|
2019-05-14 12:56:22 +02:00
|
|
|
union wined3d_gl_pipeline_statistics_query *free_pipeline_statistics_queries;
|
|
|
|
SIZE_T free_pipeline_statistics_query_size;
|
|
|
|
unsigned int free_pipeline_statistics_query_count;
|
|
|
|
|
2019-05-10 18:31:06 +02:00
|
|
|
GLuint blit_vbo;
|
|
|
|
|
2019-05-10 18:31:05 +02:00
|
|
|
unsigned int tex_unit_map[WINED3D_MAX_COMBINED_SAMPLERS];
|
|
|
|
unsigned int rev_tex_unit_map[MAX_GL_FRAGMENT_SAMPLERS + WINED3D_MAX_VERTEX_SAMPLERS];
|
|
|
|
|
2019-05-08 15:21:37 +02:00
|
|
|
/* Extension emulation. */
|
|
|
|
GLint gl_fog_source;
|
|
|
|
GLfloat fog_coord_value;
|
|
|
|
GLfloat colour[4], fog_start, fog_end, fog_colour[4];
|
|
|
|
|
2019-05-08 15:21:35 +02:00
|
|
|
GLuint dummy_arbfp_prog;
|
2020-11-30 15:41:25 +01:00
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct wined3d_command_fence_gl *fences;
|
|
|
|
SIZE_T fences_size;
|
|
|
|
SIZE_T fence_count;
|
|
|
|
} submitted;
|
2019-05-02 14:40:51 +02:00
|
|
|
};
|
|
|
|
|
2019-05-03 12:56:01 +02:00
|
|
|
static inline struct wined3d_context_gl *wined3d_context_gl(struct wined3d_context *context)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(context, struct wined3d_context_gl, c);
|
|
|
|
}
|
|
|
|
|
2019-05-09 16:41:09 +02:00
|
|
|
static inline const struct wined3d_context_gl *wined3d_context_gl_const(const struct wined3d_context *context)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(context, struct wined3d_context_gl, c);
|
|
|
|
}
|
|
|
|
|
2019-06-05 14:24:07 +02:00
|
|
|
struct wined3d_context *wined3d_context_gl_acquire(const struct wined3d_device *device,
|
|
|
|
struct wined3d_texture *texture, unsigned int sub_resource_idx) DECLSPEC_HIDDEN;
|
2019-06-05 14:24:04 +02:00
|
|
|
void wined3d_context_gl_active_texture(struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_gl_info *gl_info, unsigned int unit) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:19 +02:00
|
|
|
void wined3d_context_gl_alloc_fence(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_fence *fence) DECLSPEC_HIDDEN;
|
2019-05-10 18:31:07 +02:00
|
|
|
void wined3d_context_gl_alloc_occlusion_query(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:22 +02:00
|
|
|
void wined3d_context_gl_alloc_pipeline_statistics_query(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_pipeline_statistics_query *query) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:21 +02:00
|
|
|
void wined3d_context_gl_alloc_so_statistics_query(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_so_statistics_query *query) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:20 +02:00
|
|
|
void wined3d_context_gl_alloc_timestamp_query(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN;
|
2022-02-01 22:28:29 +01:00
|
|
|
GLuint wined3d_context_gl_allocate_vram_chunk_buffer(struct wined3d_context_gl *context_gl,
|
|
|
|
unsigned int pool, size_t size) DECLSPEC_HIDDEN;
|
2019-05-09 16:41:11 +02:00
|
|
|
void wined3d_context_gl_apply_blit_state(struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:23 +02:00
|
|
|
BOOL wined3d_context_gl_apply_clear_state(struct wined3d_context_gl *context_gl, const struct wined3d_state *state,
|
|
|
|
unsigned int rt_count, const struct wined3d_fb_state *fb) DECLSPEC_HIDDEN;
|
2019-05-15 15:32:54 +02:00
|
|
|
void wined3d_context_gl_apply_fbo_state_blit(struct wined3d_context_gl *context_gl, GLenum target,
|
|
|
|
struct wined3d_resource *rt, unsigned int rt_sub_resource_idx,
|
|
|
|
struct wined3d_resource *ds, unsigned int ds_sub_resource_idx, DWORD location) DECLSPEC_HIDDEN;
|
2019-05-09 16:41:12 +02:00
|
|
|
void wined3d_context_gl_apply_ffp_blit_state(struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2019-06-07 14:52:28 +02:00
|
|
|
void wined3d_context_gl_bind_bo(struct wined3d_context_gl *context_gl, GLenum binding, GLuint name) DECLSPEC_HIDDEN;
|
2019-06-07 14:52:29 +02:00
|
|
|
void wined3d_context_gl_bind_dummy_textures(const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-05-07 12:30:11 +02:00
|
|
|
void wined3d_context_gl_bind_texture(struct wined3d_context_gl *context_gl,
|
|
|
|
GLenum target, GLuint name) DECLSPEC_HIDDEN;
|
2019-05-15 15:32:55 +02:00
|
|
|
void wined3d_context_gl_check_fbo_status(const struct wined3d_context_gl *context_gl, GLenum target) DECLSPEC_HIDDEN;
|
2019-06-07 14:52:30 +02:00
|
|
|
void wined3d_context_gl_copy_bo_address(struct wined3d_context_gl *context_gl,
|
2022-02-15 00:57:18 +01:00
|
|
|
const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src,
|
|
|
|
unsigned int range_count, const struct wined3d_range *ranges) DECLSPEC_HIDDEN;
|
2019-06-05 14:24:07 +02:00
|
|
|
void wined3d_context_gl_destroy(struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2020-11-30 15:41:21 +01:00
|
|
|
void wined3d_context_gl_destroy_bo(struct wined3d_context_gl *context_gl, struct wined3d_bo_gl *bo) DECLSPEC_HIDDEN;
|
2019-06-19 23:12:18 +02:00
|
|
|
void wined3d_context_gl_draw_shaded_quad(struct wined3d_context_gl *context_gl, struct wined3d_texture_gl *texture_gl,
|
|
|
|
unsigned int sub_resource_idx, const RECT *src_rect, const RECT *dst_rect,
|
|
|
|
enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN;
|
2019-06-19 23:12:19 +02:00
|
|
|
void wined3d_context_gl_draw_textured_quad(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_texture_gl *texture_gl, unsigned int sub_resource_idx,
|
|
|
|
const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN;
|
2019-06-10 22:15:26 +02:00
|
|
|
void wined3d_context_gl_enable_clip_distances(struct wined3d_context_gl *context_gl, uint32_t mask) DECLSPEC_HIDDEN;
|
2019-06-10 22:15:27 +02:00
|
|
|
void wined3d_context_gl_end_transform_feedback(struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2021-10-15 06:44:19 +02:00
|
|
|
void wined3d_context_gl_flush_bo_address(struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_const_bo_address *data, size_t size) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:19 +02:00
|
|
|
void wined3d_context_gl_free_fence(struct wined3d_fence *fence) DECLSPEC_HIDDEN;
|
2019-05-10 18:31:07 +02:00
|
|
|
void wined3d_context_gl_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:22 +02:00
|
|
|
void wined3d_context_gl_free_pipeline_statistics_query(struct wined3d_pipeline_statistics_query *query) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:21 +02:00
|
|
|
void wined3d_context_gl_free_so_statistics_query(struct wined3d_so_statistics_query *query) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:20 +02:00
|
|
|
void wined3d_context_gl_free_timestamp_query(struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN;
|
2019-08-05 15:09:55 +02:00
|
|
|
struct wined3d_context_gl *wined3d_context_gl_get_current(void) DECLSPEC_HIDDEN;
|
2019-05-19 16:00:44 +02:00
|
|
|
GLenum wined3d_context_gl_get_offscreen_gl_buffer(const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-05-09 16:41:09 +02:00
|
|
|
const unsigned int *wined3d_context_gl_get_tex_unit_mapping(const struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_shader_version *shader_version, unsigned int *base, unsigned int *count) DECLSPEC_HIDDEN;
|
2019-05-07 12:30:10 +02:00
|
|
|
HRESULT wined3d_context_gl_init(struct wined3d_context_gl *context_gl,
|
2019-08-13 10:31:39 +02:00
|
|
|
struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
|
2019-05-08 15:21:38 +02:00
|
|
|
void wined3d_context_gl_load_tex_coords(const struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_stream_info *si, GLuint *current_bo, const struct wined3d_state *state) DECLSPEC_HIDDEN;
|
2019-06-10 22:15:28 +02:00
|
|
|
void *wined3d_context_gl_map_bo_address(struct wined3d_context_gl *context_gl,
|
2020-04-22 15:12:42 +02:00
|
|
|
const struct wined3d_bo_address *data, size_t size, uint32_t flags) DECLSPEC_HIDDEN;
|
2019-06-06 14:51:07 +02:00
|
|
|
struct wined3d_context_gl *wined3d_context_gl_reacquire(struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-06-05 14:24:07 +02:00
|
|
|
void wined3d_context_gl_release(struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-08-05 15:09:54 +02:00
|
|
|
BOOL wined3d_context_gl_set_current(struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-05-15 15:32:56 +02:00
|
|
|
void wined3d_context_gl_set_draw_buffer(struct wined3d_context_gl *context_gl, GLenum buffer) DECLSPEC_HIDDEN;
|
2020-11-30 15:41:25 +01:00
|
|
|
void wined3d_context_gl_submit_command_fence(struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-05-15 15:32:57 +02:00
|
|
|
void wined3d_context_gl_texture_update(struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_texture_gl *texture_gl) DECLSPEC_HIDDEN;
|
2019-06-10 22:15:29 +02:00
|
|
|
void wined3d_context_gl_unload_tex_coords(const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-09-23 13:24:16 +02:00
|
|
|
void wined3d_context_gl_unmap_bo_address(struct wined3d_context_gl *context_gl, const struct wined3d_bo_address *data,
|
2020-04-22 15:12:43 +02:00
|
|
|
unsigned int range_count, const struct wined3d_range *ranges) DECLSPEC_HIDDEN;
|
2019-05-14 12:56:25 +02:00
|
|
|
void wined3d_context_gl_update_stream_sources(struct wined3d_context_gl *context_gl,
|
|
|
|
const struct wined3d_state *state) DECLSPEC_HIDDEN;
|
2020-11-30 15:41:25 +01:00
|
|
|
void wined3d_context_gl_wait_command_fence(struct wined3d_context_gl *context_gl, uint64_t id) DECLSPEC_HIDDEN;
|
2019-05-07 12:30:10 +02:00
|
|
|
|
2020-01-24 17:02:07 +01:00
|
|
|
struct wined3d_command_buffer_vk
|
|
|
|
{
|
|
|
|
uint64_t id;
|
|
|
|
VkCommandBuffer vk_command_buffer;
|
|
|
|
VkFence vk_fence;
|
|
|
|
};
|
|
|
|
|
2020-04-17 17:51:09 +02:00
|
|
|
enum wined3d_retired_object_type_vk
|
|
|
|
{
|
|
|
|
WINED3D_RETIRED_FREE_VK,
|
2020-04-27 17:48:47 +02:00
|
|
|
WINED3D_RETIRED_FRAMEBUFFER_VK,
|
2020-05-12 22:42:58 +02:00
|
|
|
WINED3D_RETIRED_DESCRIPTOR_POOL_VK,
|
2020-04-17 17:51:09 +02:00
|
|
|
WINED3D_RETIRED_MEMORY_VK,
|
2020-04-17 17:51:10 +02:00
|
|
|
WINED3D_RETIRED_ALLOCATOR_BLOCK_VK,
|
2020-04-20 21:00:26 +02:00
|
|
|
WINED3D_RETIRED_BO_SLAB_SLICE_VK,
|
2020-04-17 17:51:09 +02:00
|
|
|
WINED3D_RETIRED_BUFFER_VK,
|
2020-04-20 21:00:23 +02:00
|
|
|
WINED3D_RETIRED_IMAGE_VK,
|
2020-04-30 15:48:38 +02:00
|
|
|
WINED3D_RETIRED_BUFFER_VIEW_VK,
|
2020-04-27 17:48:46 +02:00
|
|
|
WINED3D_RETIRED_IMAGE_VIEW_VK,
|
2020-05-01 12:36:20 +02:00
|
|
|
WINED3D_RETIRED_SAMPLER_VK,
|
wined3d: Avoid waiting for a command buffer to finish executing to read off its queries.
Some games wait for query results on the frame executing the query,
expecting that enough time have passed for it to be available. By
requiring that the entire command buffer is done, we risk stalling the
whole frame if it wasn't flushed along the way. This patch drops this
requirement.
Mainly, we need to ensure that we don't call vkGetQueryPoolResults()
before the reset command is executed, and accidentally retrieve result
from previous usage. Using host query reset doesn't quite solve the
problem, as it might get called too early, if the application decides to
reuse a query without waiting for results. Besides, we want to support
devices where host query reset is not available.
To make it work, when a Vulkan query is no longer needed, we queue it
for resetting at command buffer submission time, and only mark it free
for reuse after this command buffer is finished executing.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 15:21:56 +01:00
|
|
|
WINED3D_RETIRED_QUERY_POOL_VK,
|
2022-03-04 18:12:59 +01:00
|
|
|
WINED3D_RETIRED_EVENT_VK,
|
2020-04-17 17:51:09 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_retired_object_vk
|
|
|
|
{
|
|
|
|
enum wined3d_retired_object_type_vk type;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct wined3d_retired_object_vk *next;
|
2020-04-27 17:48:47 +02:00
|
|
|
VkFramebuffer vk_framebuffer;
|
2020-05-12 22:42:58 +02:00
|
|
|
VkDescriptorPool vk_descriptor_pool;
|
2020-04-17 17:51:09 +02:00
|
|
|
VkDeviceMemory vk_memory;
|
2020-04-17 17:51:10 +02:00
|
|
|
struct wined3d_allocator_block *block;
|
2020-04-20 21:00:26 +02:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct wined3d_bo_slab_vk *slab;
|
|
|
|
size_t idx;
|
|
|
|
} slice;
|
2020-04-17 17:51:09 +02:00
|
|
|
VkBuffer vk_buffer;
|
2020-04-20 21:00:23 +02:00
|
|
|
VkImage vk_image;
|
2020-04-30 15:48:38 +02:00
|
|
|
VkBufferView vk_buffer_view;
|
2020-04-27 17:48:46 +02:00
|
|
|
VkImageView vk_image_view;
|
2020-05-01 12:36:20 +02:00
|
|
|
VkSampler vk_sampler;
|
2022-03-04 18:12:59 +01:00
|
|
|
VkEvent vk_event;
|
wined3d: Avoid waiting for a command buffer to finish executing to read off its queries.
Some games wait for query results on the frame executing the query,
expecting that enough time have passed for it to be available. By
requiring that the entire command buffer is done, we risk stalling the
whole frame if it wasn't flushed along the way. This patch drops this
requirement.
Mainly, we need to ensure that we don't call vkGetQueryPoolResults()
before the reset command is executed, and accidentally retrieve result
from previous usage. Using host query reset doesn't quite solve the
problem, as it might get called too early, if the application decides to
reuse a query without waiting for results. Besides, we want to support
devices where host query reset is not available.
To make it work, when a Vulkan query is no longer needed, we queue it
for resetting at command buffer submission time, and only mark it free
for reuse after this command buffer is finished executing.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-10 15:21:56 +01:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct wined3d_query_pool_vk *pool_vk;
|
|
|
|
uint32_t start;
|
|
|
|
uint32_t count;
|
|
|
|
} queries;
|
2020-04-17 17:51:09 +02:00
|
|
|
} u;
|
|
|
|
uint64_t command_buffer_id;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_retired_objects_vk
|
|
|
|
{
|
|
|
|
struct wined3d_retired_object_vk *objects;
|
|
|
|
struct wined3d_retired_object_vk *free;
|
|
|
|
SIZE_T size;
|
|
|
|
SIZE_T count;
|
|
|
|
};
|
|
|
|
|
2020-04-27 17:48:47 +02:00
|
|
|
struct wined3d_render_pass_attachment_vk
|
|
|
|
{
|
|
|
|
VkFormat vk_format;
|
|
|
|
VkSampleCountFlagBits vk_samples;
|
|
|
|
VkImageLayout vk_layout;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_render_pass_key_vk
|
|
|
|
{
|
|
|
|
struct wined3d_render_pass_attachment_vk rt[WINED3D_MAX_RENDER_TARGETS];
|
2020-04-27 23:58:23 +02:00
|
|
|
struct wined3d_render_pass_attachment_vk ds;
|
2020-04-27 17:48:47 +02:00
|
|
|
uint32_t rt_mask;
|
2020-04-27 23:58:23 +02:00
|
|
|
uint32_t clear_flags;
|
2020-04-27 17:48:47 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_render_pass_vk
|
|
|
|
{
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
struct wined3d_render_pass_key_vk key;
|
|
|
|
VkRenderPass vk_render_pass;
|
|
|
|
};
|
|
|
|
|
2020-05-12 22:42:59 +02:00
|
|
|
struct wined3d_pipeline_layout_key_vk
|
|
|
|
{
|
|
|
|
VkDescriptorSetLayoutBinding *bindings;
|
|
|
|
SIZE_T binding_count;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_pipeline_layout_vk
|
|
|
|
{
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
struct wined3d_pipeline_layout_key_vk key;
|
|
|
|
VkPipelineLayout vk_pipeline_layout;
|
|
|
|
VkDescriptorSetLayout vk_set_layout;
|
|
|
|
};
|
|
|
|
|
2020-05-19 21:32:27 +02:00
|
|
|
struct wined3d_graphics_pipeline_key_vk
|
|
|
|
{
|
|
|
|
VkPipelineShaderStageCreateInfo stages[WINED3D_SHADER_TYPE_GRAPHICS_COUNT];
|
2020-05-21 20:51:37 +02:00
|
|
|
VkVertexInputBindingDivisorDescriptionEXT divisors[MAX_ATTRIBS];
|
2020-05-19 21:32:27 +02:00
|
|
|
VkVertexInputAttributeDescription attributes[MAX_ATTRIBS];
|
|
|
|
VkVertexInputBindingDescription bindings[MAX_ATTRIBS];
|
|
|
|
VkViewport viewport;
|
|
|
|
VkRect2D scissor;
|
2020-09-24 14:31:25 +02:00
|
|
|
VkSampleMask sample_mask;
|
2020-05-19 21:32:27 +02:00
|
|
|
VkPipelineColorBlendAttachmentState blend_attachments[WINED3D_MAX_RENDER_TARGETS];
|
|
|
|
|
2020-05-21 20:51:37 +02:00
|
|
|
VkPipelineVertexInputDivisorStateCreateInfoEXT divisor_desc;
|
2020-05-19 21:32:27 +02:00
|
|
|
VkPipelineVertexInputStateCreateInfo input_desc;
|
|
|
|
VkPipelineInputAssemblyStateCreateInfo ia_desc;
|
2020-05-20 15:42:32 +02:00
|
|
|
VkPipelineTessellationStateCreateInfo ts_desc;
|
2020-05-19 21:32:27 +02:00
|
|
|
VkPipelineViewportStateCreateInfo vp_desc;
|
|
|
|
VkPipelineRasterizationStateCreateInfo rs_desc;
|
|
|
|
VkPipelineMultisampleStateCreateInfo ms_desc;
|
|
|
|
VkPipelineDepthStencilStateCreateInfo ds_desc;
|
|
|
|
VkPipelineColorBlendStateCreateInfo blend_desc;
|
|
|
|
VkPipelineDynamicStateCreateInfo dynamic_desc;
|
|
|
|
|
|
|
|
VkGraphicsPipelineCreateInfo pipeline_desc;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_graphics_pipeline_vk
|
|
|
|
{
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
struct wined3d_graphics_pipeline_key_vk key;
|
|
|
|
VkPipeline vk_pipeline;
|
|
|
|
};
|
|
|
|
|
2020-05-12 22:42:58 +02:00
|
|
|
enum wined3d_shader_descriptor_type
|
|
|
|
{
|
|
|
|
WINED3D_SHADER_DESCRIPTOR_TYPE_CBV,
|
|
|
|
WINED3D_SHADER_DESCRIPTOR_TYPE_SRV,
|
|
|
|
WINED3D_SHADER_DESCRIPTOR_TYPE_UAV,
|
|
|
|
WINED3D_SHADER_DESCRIPTOR_TYPE_UAV_COUNTER,
|
|
|
|
WINED3D_SHADER_DESCRIPTOR_TYPE_SAMPLER,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_shader_resource_binding
|
|
|
|
{
|
|
|
|
enum wined3d_shader_type shader_type;
|
|
|
|
enum wined3d_shader_descriptor_type shader_descriptor_type;
|
|
|
|
size_t resource_idx;
|
|
|
|
enum wined3d_shader_resource_type resource_type;
|
|
|
|
enum wined3d_data_type resource_data_type;
|
|
|
|
size_t binding_idx;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_shader_resource_bindings
|
|
|
|
{
|
|
|
|
struct wined3d_shader_resource_binding *bindings;
|
|
|
|
SIZE_T size, count;
|
|
|
|
};
|
|
|
|
|
2020-05-12 22:42:59 +02:00
|
|
|
struct wined3d_shader_descriptor_writes_vk
|
|
|
|
{
|
|
|
|
VkWriteDescriptorSet *writes;
|
|
|
|
SIZE_T size, count;
|
|
|
|
};
|
|
|
|
|
2019-08-08 00:47:05 +02:00
|
|
|
struct wined3d_context_vk
|
|
|
|
{
|
|
|
|
struct wined3d_context c;
|
2020-01-24 17:02:03 +01:00
|
|
|
|
|
|
|
const struct wined3d_vk_info *vk_info;
|
2020-01-24 17:02:07 +01:00
|
|
|
|
2020-05-12 22:42:58 +02:00
|
|
|
uint32_t update_compute_pipeline : 1;
|
2020-10-07 14:57:12 +02:00
|
|
|
uint32_t update_stream_output : 1;
|
|
|
|
uint32_t padding : 30;
|
2020-05-12 22:42:58 +02:00
|
|
|
|
2020-05-18 17:52:49 +02:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
VkShaderModule vk_modules[WINED3D_SHADER_TYPE_GRAPHICS_COUNT];
|
2020-05-19 21:32:27 +02:00
|
|
|
struct wined3d_graphics_pipeline_key_vk pipeline_key_vk;
|
2020-05-18 17:52:49 +02:00
|
|
|
VkPipeline vk_pipeline;
|
|
|
|
VkPipelineLayout vk_pipeline_layout;
|
|
|
|
VkDescriptorSetLayout vk_set_layout;
|
|
|
|
struct wined3d_shader_resource_bindings bindings;
|
|
|
|
} graphics;
|
|
|
|
|
2020-05-12 22:42:58 +02:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
VkPipeline vk_pipeline;
|
2020-05-12 22:42:59 +02:00
|
|
|
VkPipelineLayout vk_pipeline_layout;
|
|
|
|
VkDescriptorSetLayout vk_set_layout;
|
2020-05-12 22:42:58 +02:00
|
|
|
struct wined3d_shader_resource_bindings bindings;
|
|
|
|
} compute;
|
|
|
|
|
2020-01-24 17:02:07 +01:00
|
|
|
VkCommandPool vk_command_pool;
|
|
|
|
struct wined3d_command_buffer_vk current_command_buffer;
|
|
|
|
uint64_t completed_command_buffer_id;
|
2021-04-20 17:21:05 +02:00
|
|
|
VkDeviceSize retired_bo_size;
|
2020-01-24 17:02:07 +01:00
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct wined3d_command_buffer_vk *buffers;
|
|
|
|
SIZE_T buffers_size;
|
|
|
|
SIZE_T buffer_count;
|
|
|
|
} submitted;
|
2020-04-17 17:51:09 +02:00
|
|
|
|
2020-05-12 22:42:59 +02:00
|
|
|
struct wined3d_shader_descriptor_writes_vk descriptor_writes;
|
|
|
|
|
2020-05-18 17:52:49 +02:00
|
|
|
VkFramebuffer vk_framebuffer;
|
|
|
|
VkRenderPass vk_render_pass;
|
2020-05-12 22:42:58 +02:00
|
|
|
VkDescriptorPool vk_descriptor_pool;
|
|
|
|
|
2020-05-19 21:32:26 +02:00
|
|
|
VkSampleCountFlagBits sample_count;
|
2020-05-19 21:32:27 +02:00
|
|
|
unsigned int rt_count;
|
2020-05-19 21:32:26 +02:00
|
|
|
|
2020-10-07 14:57:12 +02:00
|
|
|
VkBuffer vk_so_counters[WINED3D_MAX_STREAM_OUTPUT_BUFFERS];
|
|
|
|
VkDeviceSize vk_so_offsets[WINED3D_MAX_STREAM_OUTPUT_BUFFERS];
|
|
|
|
struct wined3d_bo_vk vk_so_counter_bo;
|
|
|
|
|
2021-07-28 13:42:13 +02:00
|
|
|
struct list render_pass_queries;
|
2020-05-26 18:10:11 +02:00
|
|
|
struct list active_queries;
|
2021-06-28 17:52:41 +02:00
|
|
|
struct list completed_query_pools;
|
2020-05-26 18:10:11 +02:00
|
|
|
struct list free_occlusion_query_pools;
|
2020-05-26 18:10:12 +02:00
|
|
|
struct list free_timestamp_query_pools;
|
2020-05-27 17:55:34 +02:00
|
|
|
struct list free_pipeline_statistics_query_pools;
|
2020-10-07 14:57:13 +02:00
|
|
|
struct list free_stream_output_statistics_query_pools;
|
2020-05-26 18:10:11 +02:00
|
|
|
|
2020-04-17 17:51:09 +02:00
|
|
|
struct wined3d_retired_objects_vk retired;
|
2020-04-27 17:48:47 +02:00
|
|
|
struct wine_rb_tree render_passes;
|
2020-05-12 22:42:59 +02:00
|
|
|
struct wine_rb_tree pipeline_layouts;
|
2020-05-19 21:32:27 +02:00
|
|
|
struct wine_rb_tree graphics_pipelines;
|
2020-04-20 21:00:26 +02:00
|
|
|
struct wine_rb_tree bo_slab_available;
|
2019-08-08 00:47:05 +02:00
|
|
|
};
|
|
|
|
|
2020-01-24 17:02:03 +01:00
|
|
|
static inline struct wined3d_context_vk *wined3d_context_vk(struct wined3d_context *context)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(context, struct wined3d_context_vk, c);
|
|
|
|
}
|
|
|
|
|
2020-05-26 18:10:11 +02:00
|
|
|
bool wined3d_context_vk_allocate_query(struct wined3d_context_vk *context_vk,
|
|
|
|
enum wined3d_query_type type, struct wined3d_query_pool_idx_vk *pool_idx) DECLSPEC_HIDDEN;
|
2020-04-17 17:51:10 +02:00
|
|
|
VkDeviceMemory wined3d_context_vk_allocate_vram_chunk_memory(struct wined3d_context_vk *context_vk,
|
|
|
|
unsigned int pool, size_t size) DECLSPEC_HIDDEN;
|
2020-05-12 22:42:58 +02:00
|
|
|
VkCommandBuffer wined3d_context_vk_apply_compute_state(struct wined3d_context_vk *context_vk,
|
|
|
|
const struct wined3d_state *state, struct wined3d_buffer_vk *indirect_vk) DECLSPEC_HIDDEN;
|
2020-05-18 17:52:49 +02:00
|
|
|
VkCommandBuffer wined3d_context_vk_apply_draw_state(struct wined3d_context_vk *context_vk,
|
2020-05-18 17:52:51 +02:00
|
|
|
const struct wined3d_state *state, struct wined3d_buffer_vk *indirect_vk, bool indexed) DECLSPEC_HIDDEN;
|
2019-08-08 00:47:05 +02:00
|
|
|
void wined3d_context_vk_cleanup(struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2020-01-24 17:02:03 +01:00
|
|
|
BOOL wined3d_context_vk_create_bo(struct wined3d_context_vk *context_vk, VkDeviceSize size,
|
|
|
|
VkBufferUsageFlags usage, VkMemoryPropertyFlags memory_type, struct wined3d_bo_vk *bo) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:07 +01:00
|
|
|
BOOL wined3d_context_vk_create_image(struct wined3d_context_vk *context_vk, VkImageType vk_image_type,
|
|
|
|
VkImageUsageFlags usage, VkFormat vk_format, unsigned int width, unsigned int height, unsigned int depth,
|
|
|
|
unsigned int sample_count, unsigned int mip_levels, unsigned int layer_count, unsigned int flags,
|
|
|
|
struct wined3d_image_vk *image) DECLSPEC_HIDDEN;
|
2020-04-20 21:00:23 +02:00
|
|
|
void wined3d_context_vk_destroy_allocator_block(struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_allocator_block *block, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2020-01-24 17:02:03 +01:00
|
|
|
void wined3d_context_vk_destroy_bo(struct wined3d_context_vk *context_vk,
|
|
|
|
const struct wined3d_bo_vk *bo) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:07 +01:00
|
|
|
void wined3d_context_vk_destroy_image(struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_image_vk *image_vk) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:06 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_buffer_view(struct wined3d_context_vk *context_vk,
|
2020-04-30 15:48:38 +02:00
|
|
|
VkBufferView vk_view, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:06 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_framebuffer(struct wined3d_context_vk *context_vk,
|
2020-04-27 17:48:47 +02:00
|
|
|
VkFramebuffer vk_framebuffer, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:06 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_image(struct wined3d_context_vk *context_vk,
|
2020-04-20 21:00:23 +02:00
|
|
|
VkImage vk_image, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:06 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_image_view(struct wined3d_context_vk *context_vk,
|
2020-04-27 17:48:46 +02:00
|
|
|
VkImageView vk_view, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:06 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_memory(struct wined3d_context_vk *context_vk,
|
2020-04-20 21:00:23 +02:00
|
|
|
VkDeviceMemory vk_memory, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2021-03-23 14:21:06 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_sampler(struct wined3d_context_vk *context_vk,
|
2020-05-01 12:36:20 +02:00
|
|
|
VkSampler vk_sampler, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2022-03-04 18:12:59 +01:00
|
|
|
void wined3d_context_vk_destroy_vk_event(struct wined3d_context_vk *context_vk,
|
|
|
|
VkEvent vk_event, uint64_t command_buffer_id) DECLSPEC_HIDDEN;
|
2020-05-18 17:52:49 +02:00
|
|
|
void wined3d_context_vk_end_current_render_pass(struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2020-01-24 17:02:07 +01:00
|
|
|
VkCommandBuffer wined3d_context_vk_get_command_buffer(struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2020-05-12 22:42:59 +02:00
|
|
|
struct wined3d_pipeline_layout_vk *wined3d_context_vk_get_pipeline_layout(struct wined3d_context_vk *context_vk,
|
|
|
|
VkDescriptorSetLayoutBinding *bindings, SIZE_T binding_count) DECLSPEC_HIDDEN;
|
2020-04-27 17:48:47 +02:00
|
|
|
VkRenderPass wined3d_context_vk_get_render_pass(struct wined3d_context_vk *context_vk,
|
2020-04-27 23:58:23 +02:00
|
|
|
const struct wined3d_fb_state *fb, unsigned int rt_count,
|
|
|
|
bool depth_stencil, uint32_t clear_flags) DECLSPEC_HIDDEN;
|
2020-04-20 21:00:24 +02:00
|
|
|
void wined3d_context_vk_image_barrier(struct wined3d_context_vk *context_vk,
|
|
|
|
VkCommandBuffer vk_command_buffer, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask,
|
|
|
|
VkAccessFlags src_access_mask, VkAccessFlags dst_access_mask, VkImageLayout old_layout,
|
2021-03-11 13:54:35 +01:00
|
|
|
VkImageLayout new_layout, VkImage image, const VkImageSubresourceRange *range) DECLSPEC_HIDDEN;
|
2019-08-08 00:47:05 +02:00
|
|
|
HRESULT wined3d_context_vk_init(struct wined3d_context_vk *context_vk,
|
2019-05-07 12:30:10 +02:00
|
|
|
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
2020-05-26 18:10:11 +02:00
|
|
|
void wined3d_context_vk_poll_command_buffers(struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2020-04-17 17:51:09 +02:00
|
|
|
void wined3d_context_vk_submit_command_buffer(struct wined3d_context_vk *context_vk,
|
|
|
|
unsigned int wait_semaphore_count, const VkSemaphore *wait_semaphores, const VkPipelineStageFlags *wait_stages,
|
|
|
|
unsigned int signal_semaphore_count, const VkSemaphore *signal_semaphores) DECLSPEC_HIDDEN;
|
2020-01-24 17:02:07 +01:00
|
|
|
void wined3d_context_vk_wait_command_buffer(struct wined3d_context_vk *context_vk, uint64_t id) DECLSPEC_HIDDEN;
|
2021-10-06 10:50:11 +02:00
|
|
|
VkResult wined3d_context_vk_create_vk_descriptor_set(struct wined3d_context_vk *context_vk,
|
|
|
|
VkDescriptorSetLayout vk_set_layout, VkDescriptorSet *vk_descriptor_set) DECLSPEC_HIDDEN;
|
2019-05-07 12:30:10 +02:00
|
|
|
|
2011-07-14 01:02:48 +02:00
|
|
|
typedef void (*APPLYSTATEFUNC)(struct wined3d_context *ctx, const struct wined3d_state *state, DWORD state_id);
|
2009-08-03 08:06:51 +02:00
|
|
|
|
2019-03-03 19:55:27 +01:00
|
|
|
struct wined3d_state_entry
|
2009-08-03 08:06:51 +02:00
|
|
|
{
|
2019-03-03 19:55:27 +01:00
|
|
|
unsigned int representative;
|
2009-08-03 08:06:51 +02:00
|
|
|
APPLYSTATEFUNC apply;
|
|
|
|
};
|
|
|
|
|
2019-03-03 19:55:27 +01:00
|
|
|
struct wined3d_state_entry_template
|
2009-08-03 08:06:51 +02:00
|
|
|
{
|
|
|
|
DWORD state;
|
2019-03-03 19:55:27 +01:00
|
|
|
struct wined3d_state_entry content;
|
2019-03-03 19:55:25 +01:00
|
|
|
unsigned int extension;
|
2009-08-03 08:06:51 +02:00
|
|
|
};
|
|
|
|
|
2013-01-21 09:08:36 +01:00
|
|
|
#define WINED3D_FRAGMENT_CAP_PROJ_CONTROL 0x00000001
|
2013-01-22 11:34:07 +01:00
|
|
|
#define WINED3D_FRAGMENT_CAP_SRGB_WRITE 0x00000002
|
2015-04-10 12:05:54 +02:00
|
|
|
#define WINED3D_FRAGMENT_CAP_COLOR_KEY 0x00000004
|
2013-01-21 09:08:36 +01:00
|
|
|
|
2009-08-03 08:06:51 +02:00
|
|
|
struct fragment_caps
|
|
|
|
{
|
2013-01-21 09:08:36 +01:00
|
|
|
DWORD wined3d_caps;
|
2009-08-03 08:06:51 +02:00
|
|
|
DWORD PrimitiveMiscCaps;
|
|
|
|
DWORD TextureOpCaps;
|
|
|
|
DWORD MaxTextureBlendStages;
|
|
|
|
DWORD MaxSimultaneousTextures;
|
|
|
|
};
|
|
|
|
|
2015-07-27 14:29:57 +02:00
|
|
|
#define GL_EXT_EMUL_ARB_MULTITEXTURE 0x00000001
|
|
|
|
#define GL_EXT_EMUL_EXT_FOG_COORD 0x00000002
|
|
|
|
|
2019-07-31 22:18:06 +02:00
|
|
|
struct wined3d_fragment_pipe_ops
|
2009-08-03 08:06:51 +02:00
|
|
|
{
|
2019-07-31 22:18:06 +02:00
|
|
|
void (*fp_enable)(const struct wined3d_context *context, BOOL enable);
|
2019-03-29 13:00:15 +01:00
|
|
|
void (*get_caps)(const struct wined3d_adapter *adapter, struct fragment_caps *caps);
|
2015-07-27 14:29:57 +02:00
|
|
|
DWORD (*get_emul_mask)(const struct wined3d_gl_info *gl_info);
|
2012-10-28 20:54:54 +01:00
|
|
|
void *(*alloc_private)(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv);
|
2019-03-26 18:29:46 +01:00
|
|
|
void (*free_private)(struct wined3d_device *device, struct wined3d_context *context);
|
2015-03-23 18:59:09 +01:00
|
|
|
BOOL (*allocate_context_data)(struct wined3d_context *context);
|
|
|
|
void (*free_context_data)(struct wined3d_context *context);
|
2009-08-03 08:06:51 +02:00
|
|
|
BOOL (*color_fixup_supported)(struct color_fixup_desc fixup);
|
2019-03-03 19:55:27 +01:00
|
|
|
const struct wined3d_state_entry_template *states;
|
2009-08-03 08:06:51 +02:00
|
|
|
};
|
|
|
|
|
2013-04-25 12:16:47 +02:00
|
|
|
struct wined3d_vertex_caps
|
|
|
|
{
|
2013-06-14 09:07:12 +02:00
|
|
|
BOOL xyzrhw;
|
2015-11-12 23:06:50 +01:00
|
|
|
BOOL emulated_flatshading;
|
2015-06-11 23:13:42 +02:00
|
|
|
BOOL ffp_generic_attributes;
|
2013-04-25 12:16:47 +02:00
|
|
|
DWORD max_active_lights;
|
|
|
|
DWORD max_vertex_blend_matrices;
|
|
|
|
DWORD max_vertex_blend_matrix_index;
|
|
|
|
DWORD vertex_processing_caps;
|
|
|
|
DWORD fvf_caps;
|
|
|
|
DWORD max_user_clip_planes;
|
|
|
|
DWORD raster_caps;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_vertex_pipe_ops
|
|
|
|
{
|
2019-07-29 12:44:50 +02:00
|
|
|
void (*vp_enable)(const struct wined3d_context *context, BOOL enable);
|
2019-03-29 13:00:14 +01:00
|
|
|
void (*vp_get_caps)(const struct wined3d_adapter *adapter, struct wined3d_vertex_caps *caps);
|
2015-07-27 14:29:57 +02:00
|
|
|
DWORD (*vp_get_emul_mask)(const struct wined3d_gl_info *gl_info);
|
2013-04-25 12:16:47 +02:00
|
|
|
void *(*vp_alloc)(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv);
|
2019-03-26 18:29:46 +01:00
|
|
|
void (*vp_free)(struct wined3d_device *device, struct wined3d_context *context);
|
2019-03-03 19:55:27 +01:00
|
|
|
const struct wined3d_state_entry_template *vp_states;
|
2013-04-25 12:16:47 +02:00
|
|
|
};
|
|
|
|
|
2020-04-22 23:34:55 +02:00
|
|
|
extern const struct wined3d_state_entry_template misc_state_template_gl[] DECLSPEC_HIDDEN;
|
2019-07-31 22:18:06 +02:00
|
|
|
extern const struct wined3d_fragment_pipe_ops none_fragment_pipe DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_fragment_pipe_ops ffp_fragment_pipeline DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_fragment_pipe_ops atifs_fragment_pipeline DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_fragment_pipe_ops arbfp_fragment_pipeline DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_fragment_pipe_ops nvts_fragment_pipeline DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_fragment_pipe_ops nvrc_fragment_pipeline DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_fragment_pipe_ops glsl_fragment_pipe DECLSPEC_HIDDEN;
|
2009-08-03 08:06:51 +02:00
|
|
|
|
2020-05-18 17:52:48 +02:00
|
|
|
const struct wined3d_fragment_pipe_ops *wined3d_spirv_fragment_pipe_init_vk(void) DECLSPEC_HIDDEN;
|
|
|
|
|
2013-04-25 12:16:47 +02:00
|
|
|
extern const struct wined3d_vertex_pipe_ops none_vertex_pipe DECLSPEC_HIDDEN;
|
|
|
|
extern const struct wined3d_vertex_pipe_ops ffp_vertex_pipe DECLSPEC_HIDDEN;
|
2013-05-29 09:45:35 +02:00
|
|
|
extern const struct wined3d_vertex_pipe_ops glsl_vertex_pipe DECLSPEC_HIDDEN;
|
2013-04-25 12:16:47 +02:00
|
|
|
|
2020-05-18 17:52:47 +02:00
|
|
|
const struct wined3d_vertex_pipe_ops *wined3d_spirv_vertex_pipe_init_vk(void) DECLSPEC_HIDDEN;
|
|
|
|
|
2009-08-03 08:06:51 +02:00
|
|
|
/* "Base" state table */
|
2019-03-03 19:55:27 +01:00
|
|
|
HRESULT compile_state_table(struct wined3d_state_entry *state_table, APPLYSTATEFUNC **dev_multistate_funcs,
|
2019-03-03 19:55:25 +01:00
|
|
|
const struct wined3d_d3d_info *d3d_info, const BOOL *supported_extensions,
|
2019-07-31 22:18:06 +02:00
|
|
|
const struct wined3d_vertex_pipe_ops *vertex, const struct wined3d_fragment_pipe_ops *fragment,
|
2019-03-03 19:55:27 +01:00
|
|
|
const struct wined3d_state_entry_template *misc) DECLSPEC_HIDDEN;
|
2009-08-03 08:06:51 +02:00
|
|
|
|
2011-04-05 19:01:28 +02:00
|
|
|
enum wined3d_blit_op
|
2010-04-06 22:20:42 +02:00
|
|
|
{
|
2011-04-05 19:01:28 +02:00
|
|
|
WINED3D_BLIT_OP_COLOR_BLIT,
|
2015-12-10 21:02:34 +01:00
|
|
|
WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST,
|
2015-04-10 12:05:53 +02:00
|
|
|
WINED3D_BLIT_OP_COLOR_BLIT_CKEY,
|
2011-04-06 19:17:49 +02:00
|
|
|
WINED3D_BLIT_OP_DEPTH_BLIT,
|
2017-11-15 22:13:00 +01:00
|
|
|
WINED3D_BLIT_OP_RAW_BLIT,
|
2010-04-06 22:20:42 +02:00
|
|
|
};
|
|
|
|
|
2017-04-04 09:07:43 +02:00
|
|
|
struct wined3d_blitter
|
|
|
|
{
|
|
|
|
const struct wined3d_blitter_ops *ops;
|
|
|
|
struct wined3d_blitter *next;
|
|
|
|
};
|
|
|
|
|
2017-03-26 20:56:02 +02:00
|
|
|
struct wined3d_blitter_ops
|
2009-08-03 08:06:51 +02:00
|
|
|
{
|
2017-04-04 09:07:43 +02:00
|
|
|
void (*blitter_destroy)(struct wined3d_blitter *blitter, struct wined3d_context *context);
|
|
|
|
void (*blitter_clear)(struct wined3d_blitter *blitter, struct wined3d_device *device,
|
2017-04-04 09:07:47 +02:00
|
|
|
unsigned int rt_count, const struct wined3d_fb_state *fb, unsigned int rect_count, const RECT *clear_rects,
|
2017-04-04 09:07:46 +02:00
|
|
|
const RECT *draw_rect, DWORD flags, const struct wined3d_color *colour, float depth, DWORD stencil);
|
2017-09-06 01:39:18 +02:00
|
|
|
DWORD (*blitter_blit)(struct wined3d_blitter *blitter, enum wined3d_blit_op op, struct wined3d_context *context,
|
2018-03-13 11:23:01 +01:00
|
|
|
struct wined3d_texture *src_texture, unsigned int src_sub_resource_idx, DWORD src_location,
|
|
|
|
const RECT *src_rect, struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx,
|
|
|
|
DWORD dst_location, const RECT *dst_rect, const struct wined3d_color_key *colour_key,
|
2021-03-31 12:27:37 +02:00
|
|
|
enum wined3d_texture_filter_type filter, const struct wined3d_format *resolve_format);
|
2009-08-03 08:06:51 +02:00
|
|
|
};
|
|
|
|
|
2017-04-04 09:07:43 +02:00
|
|
|
void wined3d_arbfp_blitter_create(struct wined3d_blitter **next,
|
|
|
|
const struct wined3d_device *device) DECLSPEC_HIDDEN;
|
|
|
|
struct wined3d_blitter *wined3d_cpu_blitter_create(void) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_fbo_blitter_create(struct wined3d_blitter **next,
|
|
|
|
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_ffp_blitter_create(struct wined3d_blitter **next,
|
|
|
|
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
|
2018-05-21 20:14:45 +02:00
|
|
|
struct wined3d_blitter *wined3d_glsl_blitter_create(struct wined3d_blitter **next,
|
2018-04-12 13:58:15 +02:00
|
|
|
const struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2017-11-15 22:13:00 +01:00
|
|
|
void wined3d_raw_blitter_create(struct wined3d_blitter **next,
|
|
|
|
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
|
2020-04-23 23:51:24 +02:00
|
|
|
void wined3d_vk_blitter_create(struct wined3d_blitter **next) DECLSPEC_HIDDEN;
|
2009-08-03 08:06:51 +02:00
|
|
|
|
2015-12-10 21:02:35 +01:00
|
|
|
BOOL wined3d_clip_blit(const RECT *clip_rect, RECT *clipped, RECT *other) DECLSPEC_HIDDEN;
|
2010-08-29 21:57:42 +02:00
|
|
|
|
2015-07-08 15:47:01 +02:00
|
|
|
HGLRC context_create_wgl_attribs(const struct wined3d_gl_info *gl_info, HDC hdc, HGLRC share_ctx) DECLSPEC_HIDDEN;
|
2009-09-11 19:01:19 +02:00
|
|
|
DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
|
2016-02-21 22:29:59 +01:00
|
|
|
void context_gl_resource_released(struct wined3d_device *device,
|
|
|
|
GLuint name, BOOL rb_namespace) DECLSPEC_HIDDEN;
|
2017-02-06 14:12:14 +01:00
|
|
|
void context_invalidate_compute_state(struct wined3d_context *context, DWORD state_id) DECLSPEC_HIDDEN;
|
2011-07-26 19:52:45 +02:00
|
|
|
void context_invalidate_state(struct wined3d_context *context, DWORD state_id) DECLSPEC_HIDDEN;
|
2018-03-22 10:52:44 +01:00
|
|
|
void context_resource_released(const struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2018-03-12 10:06:47 +01:00
|
|
|
void context_restore(struct wined3d_context *context, struct wined3d_texture *texture,
|
|
|
|
unsigned int sub_resource_idx) DECLSPEC_HIDDEN;
|
2009-09-11 19:01:19 +02:00
|
|
|
void context_set_tls_idx(DWORD idx) DECLSPEC_HIDDEN;
|
2011-07-14 01:02:48 +02:00
|
|
|
void context_state_drawbuf(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void context_state_fb(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2007-02-12 19:18:36 +01:00
|
|
|
|
2004-11-29 18:53:42 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* Internal representation of a light
|
|
|
|
*/
|
2009-10-14 10:55:16 +02:00
|
|
|
struct wined3d_light_info
|
|
|
|
{
|
2011-11-20 20:27:12 +01:00
|
|
|
struct wined3d_light OriginalParms; /* Note D3D8LIGHT == D3D9LIGHT */
|
2004-11-29 18:53:42 +01:00
|
|
|
DWORD OriginalIndex;
|
|
|
|
LONG glIndex;
|
2007-11-29 13:22:47 +01:00
|
|
|
BOOL enabled;
|
2004-11-29 18:53:42 +01:00
|
|
|
|
|
|
|
/* Converted parms to speed up swapping lights */
|
2015-04-27 17:39:11 +02:00
|
|
|
struct wined3d_vec4 position;
|
|
|
|
struct wined3d_vec4 direction;
|
|
|
|
float exponent;
|
|
|
|
float cutoff;
|
2004-11-29 18:53:42 +01:00
|
|
|
|
2007-02-14 17:46:54 +01:00
|
|
|
struct list entry;
|
2004-11-29 18:53:42 +01:00
|
|
|
};
|
|
|
|
|
2006-06-07 05:37:05 +02:00
|
|
|
/* The default light parameters */
|
2011-11-20 20:27:12 +01:00
|
|
|
extern const struct wined3d_light WINED3D_default_light DECLSPEC_HIDDEN;
|
2006-06-07 05:37:05 +02:00
|
|
|
|
2011-05-05 20:56:10 +02:00
|
|
|
struct wined3d_pixel_format
|
2007-08-11 16:25:58 +02:00
|
|
|
{
|
|
|
|
int iPixelFormat; /* WGL pixel format */
|
2008-03-21 14:52:15 +01:00
|
|
|
int iPixelType; /* WGL pixel type e.g. WGL_TYPE_RGBA_ARB, WGL_TYPE_RGBA_FLOAT_ARB or WGL_TYPE_COLORINDEX_ARB */
|
2010-03-01 17:32:53 +01:00
|
|
|
int redSize, greenSize, blueSize, alphaSize, colorSize;
|
2007-08-11 16:25:58 +02:00
|
|
|
int depthSize, stencilSize;
|
2008-03-16 17:37:38 +01:00
|
|
|
BOOL windowDrawable;
|
2008-04-27 19:36:34 +02:00
|
|
|
BOOL doubleBuffer;
|
|
|
|
int auxBuffers;
|
2008-04-28 23:44:21 +02:00
|
|
|
int numSamples;
|
2021-09-10 21:32:50 +02:00
|
|
|
int swap_method;
|
2011-05-24 22:04:25 +02:00
|
|
|
};
|
2007-08-11 16:25:58 +02:00
|
|
|
|
2009-10-27 10:10:39 +01:00
|
|
|
enum wined3d_pci_vendor
|
|
|
|
{
|
2014-03-05 10:46:39 +01:00
|
|
|
HW_VENDOR_SOFTWARE = 0x0000,
|
|
|
|
HW_VENDOR_AMD = 0x1002,
|
|
|
|
HW_VENDOR_NVIDIA = 0x10de,
|
|
|
|
HW_VENDOR_VMWARE = 0x15ad,
|
2019-01-04 16:00:02 +01:00
|
|
|
HW_VENDOR_REDHAT = 0x1af4,
|
2014-03-05 10:46:39 +01:00
|
|
|
HW_VENDOR_INTEL = 0x8086,
|
2009-10-27 10:10:39 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
enum wined3d_pci_device
|
|
|
|
{
|
|
|
|
CARD_WINE = 0x0000,
|
|
|
|
|
2011-03-01 09:47:57 +01:00
|
|
|
CARD_AMD_RAGE_128PRO = 0x5246,
|
|
|
|
CARD_AMD_RADEON_7200 = 0x5144,
|
|
|
|
CARD_AMD_RADEON_8500 = 0x514c,
|
|
|
|
CARD_AMD_RADEON_9500 = 0x4144,
|
|
|
|
CARD_AMD_RADEON_XPRESS_200M = 0x5955,
|
|
|
|
CARD_AMD_RADEON_X700 = 0x5e4c,
|
|
|
|
CARD_AMD_RADEON_X1600 = 0x71c2,
|
|
|
|
CARD_AMD_RADEON_HD2350 = 0x94c7,
|
|
|
|
CARD_AMD_RADEON_HD2600 = 0x9581,
|
|
|
|
CARD_AMD_RADEON_HD2900 = 0x9400,
|
|
|
|
CARD_AMD_RADEON_HD3200 = 0x9620,
|
2015-10-19 14:30:29 +02:00
|
|
|
CARD_AMD_RADEON_HD3850 = 0x9515,
|
2013-05-30 23:51:10 +02:00
|
|
|
CARD_AMD_RADEON_HD4200M = 0x9712,
|
2011-03-01 09:47:57 +01:00
|
|
|
CARD_AMD_RADEON_HD4350 = 0x954f,
|
|
|
|
CARD_AMD_RADEON_HD4600 = 0x9495,
|
|
|
|
CARD_AMD_RADEON_HD4700 = 0x944e,
|
2012-07-20 00:24:26 +02:00
|
|
|
CARD_AMD_RADEON_HD4800 = 0x944c,
|
2011-03-01 09:47:57 +01:00
|
|
|
CARD_AMD_RADEON_HD5400 = 0x68f9,
|
|
|
|
CARD_AMD_RADEON_HD5600 = 0x68d8,
|
2012-07-20 00:24:26 +02:00
|
|
|
CARD_AMD_RADEON_HD5700 = 0x68be,
|
|
|
|
CARD_AMD_RADEON_HD5800 = 0x6898,
|
2011-03-01 09:47:57 +01:00
|
|
|
CARD_AMD_RADEON_HD5900 = 0x689c,
|
2011-07-28 22:27:52 +02:00
|
|
|
CARD_AMD_RADEON_HD6300 = 0x9803,
|
|
|
|
CARD_AMD_RADEON_HD6400 = 0x6770,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_AMD_RADEON_HD6490M = 0x6760,
|
2011-10-26 20:04:59 +02:00
|
|
|
CARD_AMD_RADEON_HD6410D = 0x9644,
|
2016-09-28 03:16:16 +02:00
|
|
|
CARD_AMD_RADEON_HD6480G = 0x9648,
|
2011-10-26 20:04:59 +02:00
|
|
|
CARD_AMD_RADEON_HD6550D = 0x9640,
|
2011-07-28 22:27:52 +02:00
|
|
|
CARD_AMD_RADEON_HD6600 = 0x6758,
|
2011-11-03 15:26:37 +01:00
|
|
|
CARD_AMD_RADEON_HD6600M = 0x6741,
|
2012-07-20 00:24:27 +02:00
|
|
|
CARD_AMD_RADEON_HD6700 = 0x68ba,
|
2011-03-01 09:47:57 +01:00
|
|
|
CARD_AMD_RADEON_HD6800 = 0x6739,
|
|
|
|
CARD_AMD_RADEON_HD6900 = 0x6719,
|
2014-08-19 09:22:25 +02:00
|
|
|
CARD_AMD_RADEON_HD7660D = 0x9901,
|
2012-09-07 00:48:00 +02:00
|
|
|
CARD_AMD_RADEON_HD7700 = 0x683d,
|
|
|
|
CARD_AMD_RADEON_HD7800 = 0x6819,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_AMD_RADEON_HD7870 = 0x6818,
|
2012-07-20 00:24:27 +02:00
|
|
|
CARD_AMD_RADEON_HD7900 = 0x679a,
|
2014-08-19 09:22:25 +02:00
|
|
|
CARD_AMD_RADEON_HD8600M = 0x6660,
|
|
|
|
CARD_AMD_RADEON_HD8670 = 0x6610,
|
|
|
|
CARD_AMD_RADEON_HD8770 = 0x665c,
|
|
|
|
CARD_AMD_RADEON_R3 = 0x9830,
|
|
|
|
CARD_AMD_RADEON_R7 = 0x130f,
|
2017-01-18 13:48:35 +01:00
|
|
|
CARD_AMD_RADEON_R9_285 = 0x6939,
|
|
|
|
CARD_AMD_RADEON_R9_290 = 0x67b1,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_AMD_RADEON_R9_290X = 0x67b0,
|
2017-01-21 11:14:32 +01:00
|
|
|
CARD_AMD_RADEON_R9_FURY = 0x7300,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_AMD_RADEON_R9_M370X = 0x6821,
|
|
|
|
CARD_AMD_RADEON_R9_M380 = 0x6647,
|
|
|
|
CARD_AMD_RADEON_R9_M395X = 0x6920,
|
2016-11-13 23:10:00 +01:00
|
|
|
CARD_AMD_RADEON_RX_460 = 0x67ef,
|
|
|
|
CARD_AMD_RADEON_RX_480 = 0x67df,
|
2019-08-05 15:55:36 +02:00
|
|
|
CARD_AMD_RADEON_RX_VEGA_10 = 0x687f,
|
2019-09-20 15:38:26 +02:00
|
|
|
CARD_AMD_RADEON_RX_VEGA_12 = 0x69af,
|
2020-07-16 18:50:05 +02:00
|
|
|
CARD_AMD_RADEON_RAVEN = 0x15dd,
|
2019-08-05 15:55:36 +02:00
|
|
|
CARD_AMD_RADEON_RX_VEGA_20 = 0x66af,
|
2019-11-11 08:07:12 +01:00
|
|
|
CARD_AMD_RADEON_RX_NAVI_10 = 0x731f,
|
2021-02-03 19:08:44 +01:00
|
|
|
CARD_AMD_RADEON_RX_NAVI_14 = 0x7340,
|
2021-04-13 04:58:40 +02:00
|
|
|
CARD_AMD_RADEON_RX_NAVI_21 = 0x73bf,
|
2021-09-22 18:13:23 +02:00
|
|
|
CARD_AMD_VANGOGH = 0x163f,
|
2009-10-27 10:10:39 +01:00
|
|
|
|
|
|
|
CARD_NVIDIA_RIVA_128 = 0x0018,
|
|
|
|
CARD_NVIDIA_RIVA_TNT = 0x0020,
|
|
|
|
CARD_NVIDIA_RIVA_TNT2 = 0x0028,
|
|
|
|
CARD_NVIDIA_GEFORCE = 0x0100,
|
|
|
|
CARD_NVIDIA_GEFORCE2_MX = 0x0110,
|
|
|
|
CARD_NVIDIA_GEFORCE2 = 0x0150,
|
|
|
|
CARD_NVIDIA_GEFORCE3 = 0x0200,
|
|
|
|
CARD_NVIDIA_GEFORCE4_MX = 0x0170,
|
|
|
|
CARD_NVIDIA_GEFORCE4_TI4200 = 0x0253,
|
|
|
|
CARD_NVIDIA_GEFORCEFX_5200 = 0x0320,
|
|
|
|
CARD_NVIDIA_GEFORCEFX_5600 = 0x0312,
|
|
|
|
CARD_NVIDIA_GEFORCEFX_5800 = 0x0302,
|
|
|
|
CARD_NVIDIA_GEFORCE_6200 = 0x014f,
|
|
|
|
CARD_NVIDIA_GEFORCE_6600GT = 0x0140,
|
|
|
|
CARD_NVIDIA_GEFORCE_6800 = 0x0041,
|
|
|
|
CARD_NVIDIA_GEFORCE_7300 = 0x01d7, /* GeForce Go 7300 */
|
2015-05-21 00:24:46 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_7400 = 0x01d8,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_7600 = 0x0391,
|
|
|
|
CARD_NVIDIA_GEFORCE_7800GT = 0x0092,
|
2012-07-20 00:24:27 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_8200 = 0x0849, /* Other PCI ID 0x084b */
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_8300GS = 0x0423,
|
2009-12-30 14:10:25 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_8400GS = 0x0404,
|
|
|
|
CARD_NVIDIA_GEFORCE_8500GT = 0x0421,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_8600GT = 0x0402,
|
|
|
|
CARD_NVIDIA_GEFORCE_8600MGT = 0x0407,
|
|
|
|
CARD_NVIDIA_GEFORCE_8800GTS = 0x0193,
|
2010-07-20 19:02:17 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_8800GTX = 0x0191,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_9200 = 0x086d,
|
2012-09-17 23:53:33 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_9300 = 0x086c,
|
2012-02-15 04:46:04 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_9400M = 0x0863,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_9400GT = 0x042c,
|
|
|
|
CARD_NVIDIA_GEFORCE_9500GT = 0x0640,
|
|
|
|
CARD_NVIDIA_GEFORCE_9600GT = 0x0622,
|
2016-04-19 18:34:10 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_9700MGT = 0x064a,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_9800GT = 0x0614,
|
2010-05-26 21:51:34 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_210 = 0x0a23,
|
|
|
|
CARD_NVIDIA_GEFORCE_GT220 = 0x0a20,
|
|
|
|
CARD_NVIDIA_GEFORCE_GT240 = 0x0ca3,
|
2016-06-08 18:30:23 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTS250 = 0x0615,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX260 = 0x05e2,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX275 = 0x05e6,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX280 = 0x05e1,
|
2013-03-17 16:57:49 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_315M = 0x0a7a,
|
2012-02-15 04:46:04 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_320M = 0x08a3,
|
2010-11-24 00:43:45 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT320M = 0x0a2d,
|
2010-05-26 21:51:36 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT325M = 0x0a35,
|
2010-11-23 00:21:37 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT330 = 0x0ca0,
|
2010-05-26 21:51:36 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTS350M = 0x0cb0,
|
2013-03-27 01:06:11 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_410M = 0x1055,
|
2011-03-16 06:07:40 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT420 = 0x0de2,
|
2016-04-02 10:50:32 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT425M = 0x0df0,
|
2011-03-16 06:07:40 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT430 = 0x0de1,
|
|
|
|
CARD_NVIDIA_GEFORCE_GT440 = 0x0de0,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTS450 = 0x0dc4,
|
2010-09-07 17:42:51 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX460 = 0x0e22,
|
2011-08-28 21:46:45 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX460M = 0x0dd1,
|
2010-09-14 04:42:12 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX465 = 0x06c4,
|
2010-05-26 21:51:33 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX470 = 0x06cd,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX480 = 0x06c0,
|
2012-12-14 17:36:32 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT520 = 0x1040,
|
2017-02-28 16:02:19 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT525M = 0x0dec,
|
2012-01-16 21:54:48 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT540M = 0x0df4,
|
2011-08-05 00:29:35 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX550 = 0x1244,
|
2011-09-02 15:35:21 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT555M = 0x04b8,
|
2011-11-03 01:03:37 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX560TI = 0x1200,
|
2018-03-05 05:17:48 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX560M = 0x1251,
|
2011-11-03 01:03:37 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX560 = 0x1201,
|
2011-03-16 06:07:40 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX570 = 0x1081,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX580 = 0x1080,
|
2012-12-18 11:38:19 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT610 = 0x104a,
|
2013-05-07 21:17:06 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT630 = 0x0f00,
|
2012-08-02 00:59:19 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT630M = 0x0de9,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT640 = 0x0fc1,
|
2012-11-14 03:46:46 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT640M = 0x0fd2,
|
2012-09-30 12:07:21 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT650M = 0x0fd1,
|
2012-12-18 13:21:18 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX650 = 0x0fc6,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX650TI = 0x11c6,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX660 = 0x11c0,
|
2013-10-12 01:57:33 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX660M = 0x0fd4,
|
2012-12-18 13:21:18 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX660TI = 0x1183,
|
2012-05-21 20:54:49 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX670 = 0x1189,
|
2013-06-13 19:33:05 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX670MX = 0x11a1,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX675MX_1 = 0x11a7,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX675MX_2 = 0x11a2,
|
2012-05-27 10:02:10 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX680 = 0x1180,
|
2016-09-22 05:56:42 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX690 = 0x1188,
|
2018-10-08 20:25:38 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT720 = 0x128b,
|
2016-06-10 20:15:11 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT730 = 0x1287,
|
2016-05-27 21:56:05 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT730M = 0x0fe1,
|
2016-07-29 14:38:42 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT740M = 0x1292,
|
2014-11-13 22:47:32 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GT750M = 0x0fe9,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT755M = 0x0fcd,
|
2014-04-10 20:47:41 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX750 = 0x1381,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX750TI = 0x1380,
|
2014-04-08 23:16:22 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX760 = 0x1187,
|
2016-09-24 02:58:50 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX760TI = 0x1193,
|
2013-12-05 18:45:28 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX765M = 0x11e2,
|
2013-06-13 23:15:39 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX770M = 0x11e0,
|
2013-08-22 22:30:36 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX770 = 0x1184,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX775M = 0x119d,
|
2014-04-19 08:28:36 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX780 = 0x1004,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX780M = 0x119e,
|
2014-04-23 00:17:45 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX780TI = 0x100a,
|
2016-04-22 11:16:19 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTXTITAN = 0x1005,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTXTITANB = 0x100c,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTXTITANX = 0x17c2,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTXTITANZ = 0x1001,
|
2016-04-06 16:06:54 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_820M = 0x0fed,
|
2016-04-14 20:23:11 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_830M = 0x1340,
|
2016-04-15 20:10:42 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_840M = 0x1341,
|
2016-04-18 18:17:41 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_845M = 0x1344,
|
2016-04-19 21:33:49 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX850M = 0x1391,
|
2016-03-29 19:38:28 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX860M = 0x1392, /* Other PCI ID 0x119a */
|
2016-04-20 18:15:18 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX870M = 0x1199,
|
2016-04-21 20:06:05 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX880M = 0x1198,
|
2017-03-13 15:09:28 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_940M = 0x1347,
|
2016-03-19 13:31:25 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX950 = 0x1402,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX950M = 0x139a,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX960 = 0x1401,
|
2016-03-25 17:52:31 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX960M = 0x139b,
|
2014-11-17 17:12:58 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX970 = 0x13c2,
|
2015-04-09 20:09:23 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX970M = 0x13d8,
|
2016-03-25 17:52:31 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX980 = 0x13c0,
|
2016-09-28 03:17:08 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX980TI = 0x17c8,
|
2021-06-10 12:41:08 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GT1030 = 0x1d01,
|
2016-11-29 18:34:54 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1050 = 0x1c81,
|
2018-03-11 09:41:03 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1050TI = 0x1c82,
|
2020-02-06 20:17:11 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1060_3GB = 0x1c02,
|
2016-08-11 23:58:03 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1060 = 0x1c03,
|
2020-12-02 16:57:53 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1060M = 0x1c20,
|
2016-08-11 23:58:03 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1070 = 0x1b81,
|
|
|
|
CARD_NVIDIA_GEFORCE_GTX1080 = 0x1b80,
|
2020-10-15 00:21:53 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1080M = 0x1be0,
|
2017-05-05 19:28:26 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1080TI = 0x1b06,
|
2017-04-23 21:12:05 +02:00
|
|
|
CARD_NVIDIA_TITANX_PASCAL = 0x1b00,
|
2018-05-11 02:33:30 +02:00
|
|
|
CARD_NVIDIA_TITANV = 0x1d81,
|
2020-02-05 08:28:09 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1650SUPER= 0x2187,
|
2020-03-25 21:51:59 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1660SUPER= 0x21c4,
|
2019-08-05 23:57:43 +02:00
|
|
|
CARD_NVIDIA_GEFORCE_GTX1660TI = 0x2182,
|
2019-03-29 21:04:34 +01:00
|
|
|
CARD_NVIDIA_GEFORCE_RTX2060 = 0x1f08,
|
|
|
|
CARD_NVIDIA_GEFORCE_RTX2070 = 0x1f07,
|
|
|
|
CARD_NVIDIA_GEFORCE_RTX2080 = 0x1e87,
|
|
|
|
CARD_NVIDIA_GEFORCE_RTX2080TI = 0x1e07,
|
2009-10-27 10:10:39 +01:00
|
|
|
|
2019-01-04 16:00:02 +01:00
|
|
|
CARD_REDHAT_VIRGL = 0x1010,
|
|
|
|
|
2014-03-05 10:46:39 +01:00
|
|
|
CARD_VMWARE_SVGA3D = 0x0405,
|
|
|
|
|
2012-01-02 21:45:27 +01:00
|
|
|
CARD_INTEL_830M = 0x3577,
|
|
|
|
CARD_INTEL_855GM = 0x3582,
|
2009-10-27 10:10:39 +01:00
|
|
|
CARD_INTEL_845G = 0x2562,
|
2012-01-02 21:45:27 +01:00
|
|
|
CARD_INTEL_865G = 0x2572,
|
|
|
|
CARD_INTEL_915G = 0x2582,
|
|
|
|
CARD_INTEL_E7221G = 0x258a,
|
|
|
|
CARD_INTEL_915GM = 0x2592,
|
|
|
|
CARD_INTEL_945G = 0x2772,
|
|
|
|
CARD_INTEL_945GM = 0x27a2,
|
|
|
|
CARD_INTEL_945GME = 0x27ae,
|
|
|
|
CARD_INTEL_Q35 = 0x29b2,
|
|
|
|
CARD_INTEL_G33 = 0x29c2,
|
|
|
|
CARD_INTEL_Q33 = 0x29d2,
|
|
|
|
CARD_INTEL_PNVG = 0xa001,
|
|
|
|
CARD_INTEL_PNVM = 0xa011,
|
|
|
|
CARD_INTEL_965Q = 0x2992,
|
|
|
|
CARD_INTEL_965G = 0x2982,
|
|
|
|
CARD_INTEL_946GZ = 0x2972,
|
|
|
|
CARD_INTEL_965GM = 0x2a02,
|
|
|
|
CARD_INTEL_965GME = 0x2a12,
|
2010-11-10 06:32:33 +01:00
|
|
|
CARD_INTEL_GM45 = 0x2a42,
|
2012-01-02 21:45:27 +01:00
|
|
|
CARD_INTEL_IGD = 0x2e02,
|
|
|
|
CARD_INTEL_Q45 = 0x2e12,
|
|
|
|
CARD_INTEL_G45 = 0x2e22,
|
|
|
|
CARD_INTEL_G41 = 0x2e32,
|
|
|
|
CARD_INTEL_B43 = 0x2e92,
|
|
|
|
CARD_INTEL_ILKD = 0x0042,
|
|
|
|
CARD_INTEL_ILKM = 0x0046,
|
|
|
|
CARD_INTEL_SNBD = 0x0122,
|
|
|
|
CARD_INTEL_SNBM = 0x0126,
|
|
|
|
CARD_INTEL_SNBS = 0x010a,
|
|
|
|
CARD_INTEL_IVBD = 0x0162,
|
|
|
|
CARD_INTEL_IVBM = 0x0166,
|
|
|
|
CARD_INTEL_IVBS = 0x015a,
|
2016-06-04 22:07:01 +02:00
|
|
|
CARD_INTEL_HWD = 0x0412,
|
2013-12-05 18:45:27 +01:00
|
|
|
CARD_INTEL_HWM = 0x0416,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_INTEL_HD5000_1 = 0x0a26,
|
|
|
|
CARD_INTEL_HD5000_2 = 0x0422,
|
2017-01-13 14:06:45 +01:00
|
|
|
CARD_INTEL_I5100_1 = 0x0a22,
|
|
|
|
CARD_INTEL_I5100_2 = 0x0a2a,
|
|
|
|
CARD_INTEL_I5100_3 = 0x0a2b,
|
|
|
|
CARD_INTEL_I5100_4 = 0x0a2e,
|
|
|
|
CARD_INTEL_IP5200_1 = 0x0d22,
|
|
|
|
CARD_INTEL_IP5200_2 = 0x0d26,
|
|
|
|
CARD_INTEL_IP5200_3 = 0x0d2a,
|
|
|
|
CARD_INTEL_IP5200_4 = 0x0d2b,
|
|
|
|
CARD_INTEL_IP5200_5 = 0x0d2e,
|
2019-07-29 13:30:51 +02:00
|
|
|
CARD_INTEL_IP5200_6 = 0x0c22,
|
2016-10-14 00:03:35 +02:00
|
|
|
CARD_INTEL_HD5300 = 0x161e,
|
|
|
|
CARD_INTEL_HD5500 = 0x1616,
|
|
|
|
CARD_INTEL_HD5600 = 0x1612,
|
|
|
|
CARD_INTEL_HD6000 = 0x1626,
|
|
|
|
CARD_INTEL_I6100 = 0x162b,
|
2016-06-29 00:59:26 +02:00
|
|
|
CARD_INTEL_IP6200 = 0x1622,
|
2016-09-20 23:23:34 +02:00
|
|
|
CARD_INTEL_IPP6300 = 0x162a,
|
2016-10-14 00:03:35 +02:00
|
|
|
CARD_INTEL_HD510_1 = 0x1902,
|
|
|
|
CARD_INTEL_HD510_2 = 0x1906,
|
|
|
|
CARD_INTEL_HD510_3 = 0x190b,
|
|
|
|
CARD_INTEL_HD515 = 0x191e,
|
|
|
|
CARD_INTEL_HD520_1 = 0x1916,
|
|
|
|
CARD_INTEL_HD520_2 = 0x1921,
|
2016-06-04 22:07:01 +02:00
|
|
|
CARD_INTEL_HD530_1 = 0x1912,
|
|
|
|
CARD_INTEL_HD530_2 = 0x191b,
|
2016-10-14 00:03:35 +02:00
|
|
|
CARD_INTEL_HDP530 = 0x191d,
|
|
|
|
CARD_INTEL_I540 = 0x1926,
|
|
|
|
CARD_INTEL_I550 = 0x1927,
|
|
|
|
CARD_INTEL_I555 = 0x192b,
|
|
|
|
CARD_INTEL_IP555 = 0x192d,
|
|
|
|
CARD_INTEL_IP580_1 = 0x1932,
|
|
|
|
CARD_INTEL_IP580_2 = 0x193b,
|
|
|
|
CARD_INTEL_IPP580_1 = 0x193a,
|
|
|
|
CARD_INTEL_IPP580_2 = 0x193d,
|
2019-08-05 15:55:37 +02:00
|
|
|
CARD_INTEL_UHD617 = 0x87c0,
|
2019-09-26 15:21:47 +02:00
|
|
|
CARD_INTEL_UHD620 = 0x3ea0,
|
2019-11-29 18:46:56 +01:00
|
|
|
CARD_INTEL_HD615 = 0x591e,
|
2019-02-27 16:39:42 +01:00
|
|
|
CARD_INTEL_HD620 = 0x5916,
|
2019-08-05 15:55:37 +02:00
|
|
|
CARD_INTEL_HD630_1 = 0x5912,
|
|
|
|
CARD_INTEL_HD630_2 = 0x591b,
|
2021-05-13 22:34:20 +02:00
|
|
|
CARD_INTEL_UHD630 = 0x3e9b,
|
2009-10-27 10:10:39 +01:00
|
|
|
};
|
|
|
|
|
2010-02-16 09:50:38 +01:00
|
|
|
struct wined3d_fbo_ops
|
|
|
|
{
|
2012-07-24 11:32:25 +02:00
|
|
|
GLboolean (WINE_GLAPI *glIsRenderbuffer)(GLuint renderbuffer);
|
|
|
|
void (WINE_GLAPI *glBindRenderbuffer)(GLenum target, GLuint renderbuffer);
|
|
|
|
void (WINE_GLAPI *glDeleteRenderbuffers)(GLsizei n, const GLuint *renderbuffers);
|
|
|
|
void (WINE_GLAPI *glGenRenderbuffers)(GLsizei n, GLuint *renderbuffers);
|
|
|
|
void (WINE_GLAPI *glRenderbufferStorage)(GLenum target, GLenum internalformat,
|
|
|
|
GLsizei width, GLsizei height);
|
|
|
|
void (WINE_GLAPI *glRenderbufferStorageMultisample)(GLenum target, GLsizei samples,
|
|
|
|
GLenum internalformat, GLsizei width, GLsizei height);
|
|
|
|
void (WINE_GLAPI *glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint *params);
|
|
|
|
GLboolean (WINE_GLAPI *glIsFramebuffer)(GLuint framebuffer);
|
|
|
|
void (WINE_GLAPI *glBindFramebuffer)(GLenum target, GLuint framebuffer);
|
|
|
|
void (WINE_GLAPI *glDeleteFramebuffers)(GLsizei n, const GLuint *framebuffers);
|
|
|
|
void (WINE_GLAPI *glGenFramebuffers)(GLsizei n, GLuint *framebuffers);
|
|
|
|
GLenum (WINE_GLAPI *glCheckFramebufferStatus)(GLenum target);
|
2017-04-06 11:47:51 +02:00
|
|
|
void (WINE_GLAPI *glFramebufferTexture)(GLenum target, GLenum attachment,
|
|
|
|
GLuint texture, GLint level);
|
2012-07-24 11:32:25 +02:00
|
|
|
void (WINE_GLAPI *glFramebufferTexture1D)(GLenum target, GLenum attachment,
|
|
|
|
GLenum textarget, GLuint texture, GLint level);
|
|
|
|
void (WINE_GLAPI *glFramebufferTexture2D)(GLenum target, GLenum attachment,
|
|
|
|
GLenum textarget, GLuint texture, GLint level);
|
|
|
|
void (WINE_GLAPI *glFramebufferTexture3D)(GLenum target, GLenum attachment,
|
|
|
|
GLenum textarget, GLuint texture, GLint level, GLint layer);
|
2016-04-20 11:42:17 +02:00
|
|
|
void (WINE_GLAPI *glFramebufferTextureLayer)(GLenum target, GLenum attachment,
|
|
|
|
GLuint texture, GLint level, GLint layer);
|
2012-07-24 11:32:25 +02:00
|
|
|
void (WINE_GLAPI *glFramebufferRenderbuffer)(GLenum target, GLenum attachment,
|
|
|
|
GLenum renderbuffertarget, GLuint renderbuffer);
|
|
|
|
void (WINE_GLAPI *glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment,
|
|
|
|
GLenum pname, GLint *params);
|
|
|
|
void (WINE_GLAPI *glBlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
|
|
|
|
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
|
|
|
void (WINE_GLAPI *glGenerateMipmap)(GLenum target);
|
2010-02-16 09:50:38 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_gl_limits
|
|
|
|
{
|
|
|
|
UINT buffers;
|
|
|
|
UINT lights;
|
|
|
|
UINT textures;
|
2011-09-01 18:20:19 +02:00
|
|
|
UINT texture_coords;
|
2017-02-01 11:26:17 +01:00
|
|
|
unsigned int uniform_blocks[WINED3D_SHADER_TYPE_COUNT];
|
2017-03-15 12:00:07 +01:00
|
|
|
unsigned int samplers[WINED3D_SHADER_TYPE_COUNT];
|
2017-02-22 13:19:34 +01:00
|
|
|
unsigned int graphics_samplers;
|
|
|
|
unsigned int combined_samplers;
|
2010-02-16 09:50:38 +01:00
|
|
|
UINT general_combiners;
|
2016-10-13 01:04:10 +02:00
|
|
|
UINT user_clip_distances;
|
2019-08-28 18:44:26 +02:00
|
|
|
unsigned int texture_size;
|
2010-02-16 09:50:38 +01:00
|
|
|
UINT texture3d_size;
|
|
|
|
UINT anisotropy;
|
|
|
|
float shininess;
|
2011-08-25 21:05:03 +02:00
|
|
|
UINT samples;
|
2011-08-26 01:12:30 +02:00
|
|
|
UINT vertex_attribs;
|
2010-02-16 09:50:38 +01:00
|
|
|
|
2017-02-14 13:15:07 +01:00
|
|
|
unsigned int texture_buffer_offset_alignment;
|
|
|
|
|
2018-03-01 19:36:52 +01:00
|
|
|
unsigned int framebuffer_width;
|
|
|
|
unsigned int framebuffer_height;
|
2021-11-03 18:15:30 +01:00
|
|
|
unsigned int viewport_subpixel_bits;
|
2018-03-01 19:36:52 +01:00
|
|
|
|
2010-02-16 09:50:38 +01:00
|
|
|
UINT glsl_varyings;
|
|
|
|
UINT glsl_vs_float_constants;
|
|
|
|
UINT glsl_ps_float_constants;
|
|
|
|
|
|
|
|
UINT arb_vs_float_constants;
|
|
|
|
UINT arb_vs_native_constants;
|
|
|
|
UINT arb_vs_instructions;
|
|
|
|
UINT arb_vs_temps;
|
|
|
|
UINT arb_ps_float_constants;
|
|
|
|
UINT arb_ps_local_constants;
|
|
|
|
UINT arb_ps_native_constants;
|
|
|
|
UINT arb_ps_instructions;
|
|
|
|
UINT arb_ps_temps;
|
|
|
|
};
|
|
|
|
|
2017-02-22 13:19:35 +01:00
|
|
|
void wined3d_gl_limits_get_texture_unit_range(const struct wined3d_gl_limits *gl_limits,
|
|
|
|
enum wined3d_shader_type shader_type, unsigned int *base, unsigned int *count) DECLSPEC_HIDDEN;
|
2016-06-22 11:37:32 +02:00
|
|
|
void wined3d_gl_limits_get_uniform_block_range(const struct wined3d_gl_limits *gl_limits,
|
|
|
|
enum wined3d_shader_type shader_type, unsigned int *base, unsigned int *count) DECLSPEC_HIDDEN;
|
|
|
|
|
2010-02-16 09:50:38 +01:00
|
|
|
struct wined3d_gl_info
|
|
|
|
{
|
2015-07-08 15:47:01 +02:00
|
|
|
DWORD selected_gl_version;
|
2010-04-05 21:10:15 +02:00
|
|
|
DWORD glsl_version;
|
2010-02-16 09:50:38 +01:00
|
|
|
struct wined3d_gl_limits limits;
|
2013-02-08 23:19:47 +01:00
|
|
|
DWORD reserved_glsl_constants, reserved_arb_constants;
|
2010-02-16 09:50:38 +01:00
|
|
|
DWORD quirks;
|
|
|
|
BOOL supported[WINED3D_GL_EXT_COUNT];
|
2012-01-10 20:37:02 +01:00
|
|
|
GLint wrap_lookup[WINED3D_TADDRESS_MIRROR_ONCE - WINED3D_TADDRESS_WRAP + 1];
|
2021-11-03 18:15:28 +01:00
|
|
|
float filling_convention_offset;
|
2010-02-16 09:50:38 +01:00
|
|
|
|
2013-04-19 08:34:11 +02:00
|
|
|
HGLRC (WINAPI *p_wglCreateContextAttribsARB)(HDC dc, HGLRC share, const GLint *attribs);
|
2012-07-24 11:32:23 +02:00
|
|
|
struct opengl_funcs gl_ops;
|
2010-02-16 09:50:38 +01:00
|
|
|
struct wined3d_fbo_ops fbo_ops;
|
2019-05-08 15:21:36 +02:00
|
|
|
|
|
|
|
void (WINE_GLAPI *p_glDisableWINE)(GLenum cap);
|
|
|
|
void (WINE_GLAPI *p_glEnableWINE)(GLenum cap);
|
2010-02-16 09:50:38 +01:00
|
|
|
};
|
|
|
|
|
2018-08-17 16:54:09 +02:00
|
|
|
/* The driver names reflect the lowest GPU supported
|
|
|
|
* by a certain driver, so DRIVER_AMD_R300 supports
|
|
|
|
* R3xx, R4xx and R5xx GPUs. */
|
|
|
|
enum wined3d_display_driver
|
|
|
|
{
|
|
|
|
DRIVER_AMD_RAGE_128PRO,
|
|
|
|
DRIVER_AMD_R100,
|
|
|
|
DRIVER_AMD_R300,
|
|
|
|
DRIVER_AMD_R600,
|
|
|
|
DRIVER_AMD_RX,
|
|
|
|
DRIVER_INTEL_GMA800,
|
|
|
|
DRIVER_INTEL_GMA900,
|
|
|
|
DRIVER_INTEL_GMA950,
|
|
|
|
DRIVER_INTEL_GMA3000,
|
|
|
|
DRIVER_INTEL_HD4000,
|
|
|
|
DRIVER_NVIDIA_TNT,
|
|
|
|
DRIVER_NVIDIA_GEFORCE2MX,
|
|
|
|
DRIVER_NVIDIA_GEFORCEFX,
|
|
|
|
DRIVER_NVIDIA_GEFORCE6,
|
|
|
|
DRIVER_NVIDIA_GEFORCE8,
|
2020-07-14 14:10:35 +02:00
|
|
|
DRIVER_NVIDIA_FERMI,
|
|
|
|
DRIVER_NVIDIA_KEPLER,
|
2019-01-04 16:00:02 +01:00
|
|
|
DRIVER_REDHAT_VIRGL,
|
2018-08-17 16:54:09 +02:00
|
|
|
DRIVER_VMWARE,
|
2018-09-18 00:31:18 +02:00
|
|
|
DRIVER_WINE,
|
2018-08-17 16:54:09 +02:00
|
|
|
DRIVER_UNKNOWN,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_gpu_description
|
|
|
|
{
|
|
|
|
enum wined3d_pci_vendor vendor;
|
|
|
|
enum wined3d_pci_device device;
|
|
|
|
const char *description;
|
|
|
|
enum wined3d_display_driver driver;
|
|
|
|
unsigned int vidmem;
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct wined3d_gpu_description *wined3d_get_gpu_description(enum wined3d_pci_vendor vendor,
|
|
|
|
enum wined3d_pci_device device) DECLSPEC_HIDDEN;
|
2019-04-30 13:06:37 +02:00
|
|
|
const struct wined3d_gpu_description *wined3d_get_user_override_gpu_description(enum wined3d_pci_vendor vendor,
|
|
|
|
enum wined3d_pci_device device) DECLSPEC_HIDDEN;
|
2018-08-17 16:54:09 +02:00
|
|
|
enum wined3d_pci_device wined3d_gpu_from_feature_level(enum wined3d_pci_vendor *vendor,
|
|
|
|
enum wined3d_feature_level feature_level) DECLSPEC_HIDDEN;
|
|
|
|
|
2019-04-30 13:06:39 +02:00
|
|
|
/* 512 in Direct3D 8/9, 128 in DXGI. */
|
|
|
|
#define WINED3D_MAX_DEVICE_IDENTIFIER_LENGTH 512
|
|
|
|
|
2009-10-26 10:12:16 +01:00
|
|
|
struct wined3d_driver_info
|
|
|
|
{
|
2009-10-27 10:10:39 +01:00
|
|
|
enum wined3d_pci_vendor vendor;
|
|
|
|
enum wined3d_pci_device device;
|
2009-10-26 10:12:16 +01:00
|
|
|
const char *name;
|
2019-04-30 13:06:39 +02:00
|
|
|
char description[WINED3D_MAX_DEVICE_IDENTIFIER_LENGTH];
|
2014-08-18 08:26:20 +02:00
|
|
|
UINT64 vram_bytes;
|
2018-11-21 10:13:22 +01:00
|
|
|
UINT64 sysmem_bytes;
|
2009-10-26 10:12:16 +01:00
|
|
|
DWORD version_high;
|
|
|
|
DWORD version_low;
|
|
|
|
};
|
|
|
|
|
2020-07-22 19:00:55 +02:00
|
|
|
bool wined3d_driver_info_init(struct wined3d_driver_info *driver_info,
|
2020-07-14 14:10:33 +02:00
|
|
|
const struct wined3d_gpu_description *gpu_description, enum wined3d_feature_level feature_level,
|
2019-05-07 11:03:37 +02:00
|
|
|
UINT64 vram_bytes, UINT64 sysmem_bytes) DECLSPEC_HIDDEN;
|
2018-08-17 16:54:09 +02:00
|
|
|
|
2021-09-30 00:15:20 +02:00
|
|
|
#define UPLOAD_BO_UPLOAD_ON_UNMAP 0x1
|
2021-11-09 18:36:07 +01:00
|
|
|
#define UPLOAD_BO_RENAME_ON_UNMAP 0x2
|
2022-02-25 18:17:31 +01:00
|
|
|
#define UPLOAD_BO_FREE_ON_UNMAP 0x4
|
2021-09-30 00:15:20 +02:00
|
|
|
|
2021-09-28 23:12:50 +02:00
|
|
|
struct upload_bo
|
|
|
|
{
|
|
|
|
struct wined3d_const_bo_address addr;
|
2021-09-30 00:15:20 +02:00
|
|
|
uint32_t flags;
|
2021-09-28 23:12:50 +02:00
|
|
|
};
|
|
|
|
|
2018-08-22 19:43:00 +02:00
|
|
|
struct wined3d_adapter_ops
|
|
|
|
{
|
2019-03-28 09:53:57 +01:00
|
|
|
void (*adapter_destroy)(struct wined3d_adapter *adapter);
|
2019-04-18 11:00:20 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_device)(struct wined3d_device *device);
|
2019-06-05 14:24:07 +02:00
|
|
|
struct wined3d_context *(*adapter_acquire_context)(struct wined3d_device *device,
|
|
|
|
struct wined3d_texture *texture, unsigned int sub_resource_idx);
|
|
|
|
void (*adapter_release_context)(struct wined3d_context *context);
|
2019-03-17 18:51:05 +01:00
|
|
|
void (*adapter_get_wined3d_caps)(const struct wined3d_adapter *adapter, struct wined3d_caps *caps);
|
2019-03-28 09:53:53 +01:00
|
|
|
BOOL (*adapter_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);
|
2019-05-07 12:30:08 +02:00
|
|
|
HRESULT (*adapter_init_3d)(struct wined3d_device *device);
|
|
|
|
void (*adapter_uninit_3d)(struct wined3d_device *device);
|
2019-08-15 23:01:38 +02:00
|
|
|
void *(*adapter_map_bo_address)(struct wined3d_context *context,
|
2020-04-22 15:12:46 +02:00
|
|
|
const struct wined3d_bo_address *data, size_t size, uint32_t map_flags);
|
2019-09-23 13:24:16 +02:00
|
|
|
void (*adapter_unmap_bo_address)(struct wined3d_context *context, const struct wined3d_bo_address *data,
|
2020-04-22 15:12:45 +02:00
|
|
|
unsigned int range_count, const struct wined3d_range *ranges);
|
2019-09-24 16:20:43 +02:00
|
|
|
void (*adapter_copy_bo_address)(struct wined3d_context *context,
|
2022-02-15 00:57:18 +01:00
|
|
|
const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src,
|
|
|
|
unsigned int range_count, const struct wined3d_range *ranges);
|
2021-10-15 06:44:19 +02:00
|
|
|
void (*adapter_flush_bo_address)(struct wined3d_context *context,
|
|
|
|
const struct wined3d_const_bo_address *data, size_t size);
|
2021-11-09 18:36:07 +01:00
|
|
|
bool (*adapter_alloc_bo)(struct wined3d_device *device, struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, struct wined3d_bo_address *addr);
|
|
|
|
void (*adapter_destroy_bo)(struct wined3d_context *context, struct wined3d_bo *bo);
|
2020-10-09 11:56:53 +02:00
|
|
|
HRESULT (*adapter_create_swapchain)(struct wined3d_device *device,
|
|
|
|
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);
|
2019-08-08 00:47:04 +02:00
|
|
|
void (*adapter_destroy_swapchain)(struct wined3d_swapchain *swapchain);
|
2019-08-11 11:35:08 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_buffer)(struct wined3d_buffer *buffer);
|
2019-08-13 10:31:36 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_texture)(struct wined3d_texture *texture);
|
2019-08-11 11:35:10 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_rendertarget_view)(struct wined3d_rendertarget_view *view);
|
2019-08-11 11:35:11 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_shader_resource_view)(struct wined3d_shader_resource_view *view);
|
2019-08-11 11:35:12 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_unordered_access_view)(struct wined3d_unordered_access_view *view);
|
2019-08-14 14:04:39 +02:00
|
|
|
HRESULT (*adapter_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);
|
|
|
|
void (*adapter_destroy_sampler)(struct wined3d_sampler *sampler);
|
2019-08-15 11:50:00 +02:00
|
|
|
HRESULT (*adapter_create_query)(struct wined3d_device *device, enum wined3d_query_type type,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query);
|
|
|
|
void (*adapter_destroy_query)(struct wined3d_query *query);
|
2019-08-15 11:50:01 +02:00
|
|
|
void (*adapter_flush_context)(struct wined3d_context *context);
|
2020-04-27 23:58:25 +02:00
|
|
|
void (*adapter_draw_primitive)(struct wined3d_device *device, const struct wined3d_state *state,
|
|
|
|
const struct wined3d_draw_parameters *parameters);
|
2020-04-27 23:58:24 +02:00
|
|
|
void (*adapter_dispatch_compute)(struct wined3d_device *device, const struct wined3d_state *state,
|
|
|
|
const struct wined3d_dispatch_parameters *parameters);
|
2019-09-24 16:20:42 +02:00
|
|
|
void (*adapter_clear_uav)(struct wined3d_context *context,
|
2021-06-07 16:55:10 +02:00
|
|
|
struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value, bool fp);
|
2021-03-12 17:59:06 +01:00
|
|
|
void (*adapter_generate_mipmap)(struct wined3d_context *context, struct wined3d_shader_resource_view *view);
|
2018-08-22 19:43:00 +02:00
|
|
|
};
|
|
|
|
|
2019-10-30 15:01:29 +01:00
|
|
|
struct wined3d_output
|
|
|
|
{
|
2020-03-19 10:07:46 +01:00
|
|
|
unsigned int ordinal;
|
2020-03-05 16:03:23 +01:00
|
|
|
WCHAR device_name[CCHDEVICENAME];
|
|
|
|
struct wined3d_adapter *adapter;
|
2020-03-06 14:16:16 +01:00
|
|
|
enum wined3d_format_id screen_format;
|
2020-03-05 16:03:23 +01:00
|
|
|
|
2019-10-30 15:01:29 +01:00
|
|
|
D3DKMT_HANDLE kmt_adapter;
|
|
|
|
D3DKMT_HANDLE kmt_device;
|
|
|
|
D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id;
|
|
|
|
};
|
|
|
|
|
2021-03-25 16:46:44 +01:00
|
|
|
HRESULT wined3d_output_get_gamma_ramp(struct wined3d_output *output, struct wined3d_gamma_ramp *ramp) DECLSPEC_HIDDEN;
|
|
|
|
|
2022-02-12 02:42:01 +01:00
|
|
|
#ifdef _WIN64
|
2022-03-03 09:51:34 +01:00
|
|
|
#define MAX_PERSISTENT_MAPPED_BYTES I64_MAX
|
2022-02-12 02:42:01 +01:00
|
|
|
#else
|
|
|
|
#define MAX_PERSISTENT_MAPPED_BYTES (128 * 1024 * 1024)
|
|
|
|
#endif
|
|
|
|
|
2007-06-09 14:27:41 +02:00
|
|
|
/* The adapter structure */
|
2009-10-21 10:33:58 +02:00
|
|
|
struct wined3d_adapter
|
2007-06-09 14:27:41 +02:00
|
|
|
{
|
2019-03-12 16:30:18 +01:00
|
|
|
unsigned int ordinal;
|
2011-08-29 18:58:56 +02:00
|
|
|
|
2009-07-17 10:34:01 +02:00
|
|
|
struct wined3d_gl_info gl_info;
|
2013-04-25 15:20:24 +02:00
|
|
|
struct wined3d_d3d_info d3d_info;
|
2009-10-26 10:12:16 +01:00
|
|
|
struct wined3d_driver_info driver_info;
|
2020-03-03 15:18:14 +01:00
|
|
|
struct wined3d_output *outputs;
|
2020-03-03 15:18:00 +01:00
|
|
|
unsigned int output_count;
|
2014-08-18 08:26:20 +02:00
|
|
|
UINT64 vram_bytes_used;
|
2019-03-12 16:30:18 +01:00
|
|
|
GUID driver_uuid;
|
|
|
|
GUID device_uuid;
|
2009-12-02 10:41:23 +01:00
|
|
|
LUID luid;
|
2010-02-02 12:06:56 +01:00
|
|
|
|
2018-09-20 09:02:00 +02:00
|
|
|
void *formats;
|
|
|
|
size_t format_size;
|
2018-08-30 14:54:49 +02:00
|
|
|
|
2022-02-12 02:42:01 +01:00
|
|
|
ssize_t mapped_size;
|
|
|
|
|
2013-04-25 12:16:47 +02:00
|
|
|
const struct wined3d_vertex_pipe_ops *vertex_pipe;
|
2019-07-31 22:18:06 +02:00
|
|
|
const struct wined3d_fragment_pipe_ops *fragment_pipe;
|
2020-04-22 23:34:55 +02:00
|
|
|
const struct wined3d_state_entry_template *misc_state_template;
|
2011-05-04 22:18:46 +02:00
|
|
|
const struct wined3d_shader_backend_ops *shader_backend;
|
2018-08-22 19:43:00 +02:00
|
|
|
const struct wined3d_adapter_ops *adapter_ops;
|
2007-06-09 14:27:41 +02:00
|
|
|
};
|
|
|
|
|
2020-07-08 09:58:34 +02:00
|
|
|
BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid,
|
2019-04-19 18:34:46 +02:00
|
|
|
const struct wined3d_adapter_ops *adapter_ops) DECLSPEC_HIDDEN;
|
2019-03-28 09:53:57 +01:00
|
|
|
void wined3d_adapter_cleanup(struct wined3d_adapter *adapter) DECLSPEC_HIDDEN;
|
2020-07-08 09:58:34 +02:00
|
|
|
BOOL wined3d_get_primary_adapter_luid(LUID *luid) DECLSPEC_HIDDEN;
|
2019-03-22 09:42:05 +01:00
|
|
|
|
|
|
|
struct wined3d_adapter_gl
|
|
|
|
{
|
|
|
|
struct wined3d_adapter a;
|
2019-03-28 09:53:57 +01:00
|
|
|
|
|
|
|
struct wined3d_pixel_format *pixel_formats;
|
|
|
|
unsigned int pixel_format_count;
|
2019-03-22 09:42:05 +01:00
|
|
|
};
|
|
|
|
|
2019-03-28 09:53:57 +01:00
|
|
|
static inline struct wined3d_adapter_gl *wined3d_adapter_gl(struct wined3d_adapter *adapter)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(adapter, struct wined3d_adapter_gl, a);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline const struct wined3d_adapter_gl *wined3d_adapter_gl_const(const struct wined3d_adapter *adapter)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(adapter, struct wined3d_adapter_gl, a);
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:46:29 +02:00
|
|
|
struct wined3d_adapter *wined3d_adapter_gl_create(unsigned int ordinal,
|
|
|
|
unsigned int wined3d_creation_flags) DECLSPEC_HIDDEN;
|
2018-08-17 16:54:09 +02:00
|
|
|
|
2019-04-01 14:50:26 +02:00
|
|
|
struct wined3d_adapter_vk
|
|
|
|
{
|
|
|
|
struct wined3d_adapter a;
|
2019-04-03 11:11:32 +02:00
|
|
|
|
|
|
|
struct wined3d_vk_info vk_info;
|
2020-10-07 14:57:09 +02:00
|
|
|
unsigned int device_extension_count;
|
|
|
|
const char **device_extensions;
|
2019-04-05 10:52:07 +02:00
|
|
|
VkPhysicalDevice physical_device;
|
2019-04-06 11:37:33 +02:00
|
|
|
|
|
|
|
VkPhysicalDeviceLimits device_limits;
|
2019-12-12 18:33:05 +01:00
|
|
|
VkPhysicalDeviceMemoryProperties memory_properties;
|
2019-04-01 14:50:26 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_adapter_vk *wined3d_adapter_vk(struct wined3d_adapter *adapter)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(adapter, struct wined3d_adapter_vk, a);
|
|
|
|
}
|
|
|
|
|
|
|
|
struct wined3d_adapter *wined3d_adapter_vk_create(unsigned int ordinal,
|
|
|
|
unsigned int wined3d_creation_flags) DECLSPEC_HIDDEN;
|
2020-01-24 17:02:03 +01:00
|
|
|
unsigned int wined3d_adapter_vk_get_memory_type_index(const struct wined3d_adapter_vk *adapter_vk,
|
|
|
|
uint32_t memory_type_mask, VkMemoryPropertyFlags flags) DECLSPEC_HIDDEN;
|
2021-10-06 10:50:11 +02:00
|
|
|
void adapter_vk_copy_bo_address(struct wined3d_context *context, const struct wined3d_bo_address *dst,
|
2022-02-15 00:57:18 +01:00
|
|
|
const struct wined3d_bo_address *src,
|
|
|
|
unsigned int range_count, const struct wined3d_range *ranges) DECLSPEC_HIDDEN;
|
2019-04-01 14:50:26 +02:00
|
|
|
|
2015-07-27 14:29:53 +02:00
|
|
|
struct wined3d_caps_gl_ctx
|
|
|
|
{
|
|
|
|
HDC dc;
|
|
|
|
HWND wnd;
|
|
|
|
HGLRC gl_ctx;
|
|
|
|
HDC restore_dc;
|
|
|
|
HGLRC restore_gl_ctx;
|
|
|
|
|
|
|
|
const struct wined3d_gl_info *gl_info;
|
|
|
|
GLuint test_vbo;
|
|
|
|
GLuint test_program_id;
|
2020-07-14 14:10:33 +02:00
|
|
|
|
|
|
|
const struct wined3d_gpu_description *gpu_description;
|
|
|
|
UINT64 vram_bytes;
|
2015-07-27 14:29:53 +02:00
|
|
|
};
|
|
|
|
|
2018-09-20 09:01:59 +02:00
|
|
|
BOOL wined3d_adapter_gl_init_format_info(struct wined3d_adapter *adapter,
|
2015-07-27 14:29:53 +02:00
|
|
|
struct wined3d_caps_gl_ctx *ctx) DECLSPEC_HIDDEN;
|
2018-09-22 01:26:08 +02:00
|
|
|
BOOL wined3d_adapter_no3d_init_format_info(struct wined3d_adapter *adapter) DECLSPEC_HIDDEN;
|
2019-04-05 10:52:09 +02:00
|
|
|
BOOL wined3d_adapter_vk_init_format_info(struct wined3d_adapter_vk *adapter_vk,
|
|
|
|
const struct wined3d_vk_info *vk_info) DECLSPEC_HIDDEN;
|
2022-02-12 02:42:01 +01:00
|
|
|
ssize_t adapter_adjust_mapped_memory(struct wined3d_adapter *adapter, ssize_t size) DECLSPEC_HIDDEN;
|
2014-08-18 08:26:20 +02:00
|
|
|
UINT64 adapter_adjust_memory(struct wined3d_adapter *adapter, INT64 amount) DECLSPEC_HIDDEN;
|
2011-08-28 23:27:45 +02:00
|
|
|
|
2017-02-27 13:42:00 +01:00
|
|
|
BOOL wined3d_caps_gl_ctx_test_viewport_subpixel_bits(struct wined3d_caps_gl_ctx *ctx) DECLSPEC_HIDDEN;
|
2021-11-03 18:15:28 +01:00
|
|
|
bool wined3d_caps_gl_ctx_test_filling_convention(struct wined3d_caps_gl_ctx *ctx, float offset) DECLSPEC_HIDDEN;
|
2017-02-27 13:42:00 +01:00
|
|
|
|
2015-07-27 14:29:55 +02:00
|
|
|
void install_gl_compat_wrapper(struct wined3d_gl_info *gl_info, enum wined3d_gl_extension ext) DECLSPEC_HIDDEN;
|
2007-06-09 14:27:41 +02:00
|
|
|
|
2018-03-23 11:44:30 +01:00
|
|
|
enum wined3d_projection_type
|
2008-03-22 14:31:52 +01:00
|
|
|
{
|
2018-03-23 11:44:30 +01:00
|
|
|
WINED3D_PROJECTION_NONE = 0,
|
|
|
|
WINED3D_PROJECTION_COUNT3 = 1,
|
|
|
|
WINED3D_PROJECTION_COUNT4 = 2
|
2008-07-30 17:57:32 +02:00
|
|
|
};
|
|
|
|
|
2008-03-22 14:31:52 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* Fixed function pipeline replacements
|
|
|
|
*/
|
2008-12-09 20:02:18 +01:00
|
|
|
#define ARG_UNUSED 0xff
|
2008-03-22 14:31:52 +01:00
|
|
|
struct texture_stage_op
|
|
|
|
{
|
2008-12-03 14:53:43 +01:00
|
|
|
unsigned cop : 8;
|
|
|
|
unsigned carg1 : 8;
|
|
|
|
unsigned carg2 : 8;
|
|
|
|
unsigned carg0 : 8;
|
|
|
|
|
|
|
|
unsigned aop : 8;
|
|
|
|
unsigned aarg1 : 8;
|
|
|
|
unsigned aarg2 : 8;
|
|
|
|
unsigned aarg0 : 8;
|
|
|
|
|
2008-12-10 10:04:40 +01:00
|
|
|
struct color_fixup_desc color_fixup;
|
2008-07-30 17:57:32 +02:00
|
|
|
unsigned tex_type : 3;
|
2018-03-23 11:44:31 +01:00
|
|
|
unsigned tmp_dst : 1;
|
2008-07-30 17:57:32 +02:00
|
|
|
unsigned projected : 2;
|
2008-12-03 14:53:43 +01:00
|
|
|
unsigned padding : 10;
|
2008-03-22 14:31:52 +01:00
|
|
|
};
|
|
|
|
|
2013-05-30 10:05:34 +02:00
|
|
|
struct ffp_frag_settings
|
|
|
|
{
|
2019-02-20 21:53:57 +01:00
|
|
|
struct texture_stage_op op[WINED3D_MAX_TEXTURES];
|
2013-05-30 10:05:34 +02:00
|
|
|
enum wined3d_ffp_ps_fog_mode fog;
|
2015-04-10 12:05:54 +02:00
|
|
|
unsigned char sRGB_write;
|
|
|
|
unsigned char emul_clipplanes;
|
2015-10-07 00:15:08 +02:00
|
|
|
unsigned char texcoords_initialized;
|
|
|
|
unsigned char color_key_enabled : 1;
|
|
|
|
unsigned char pointsprite : 1;
|
2015-11-12 23:06:50 +01:00
|
|
|
unsigned char flatshading : 1;
|
2016-05-20 19:55:52 +02:00
|
|
|
unsigned char alpha_test_func : 3;
|
|
|
|
unsigned char padding : 2;
|
2008-07-12 04:18:06 +02:00
|
|
|
};
|
|
|
|
|
2008-11-07 17:15:29 +01:00
|
|
|
struct ffp_frag_desc
|
2008-03-22 14:31:52 +01:00
|
|
|
{
|
2009-06-03 10:47:26 +02:00
|
|
|
struct wine_rb_entry entry;
|
2008-11-07 17:15:29 +01:00
|
|
|
struct ffp_frag_settings settings;
|
2008-03-22 14:31:52 +01:00
|
|
|
};
|
|
|
|
|
2016-09-01 10:55:49 +02:00
|
|
|
int wined3d_ffp_frag_program_key_compare(const void *key, const struct wine_rb_entry *entry) DECLSPEC_HIDDEN;
|
|
|
|
int wined3d_ffp_vertex_program_key_compare(const void *key, const struct wine_rb_entry *entry) DECLSPEC_HIDDEN;
|
|
|
|
|
2009-09-16 08:37:15 +02:00
|
|
|
extern const struct wined3d_parent_ops wined3d_null_parent_ops DECLSPEC_HIDDEN;
|
2009-06-03 10:47:26 +02:00
|
|
|
|
2021-05-31 21:12:54 +02:00
|
|
|
void wined3d_ffp_get_fs_settings(const struct wined3d_context *context, const struct wined3d_state *state,
|
2011-07-05 22:30:55 +02:00
|
|
|
struct ffp_frag_settings *settings, BOOL ignore_textype) DECLSPEC_HIDDEN;
|
2009-06-03 10:47:26 +02:00
|
|
|
const struct ffp_frag_desc *find_ffp_frag_shader(const struct wine_rb_tree *fragment_shaders,
|
2009-09-11 19:01:19 +02:00
|
|
|
const struct ffp_frag_settings *settings) DECLSPEC_HIDDEN;
|
|
|
|
void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *desc) DECLSPEC_HIDDEN;
|
2013-09-05 10:42:12 +02:00
|
|
|
void wined3d_ftoa(float value, char *s) DECLSPEC_HIDDEN;
|
|
|
|
|
2013-05-29 09:45:35 +02:00
|
|
|
enum wined3d_ffp_vs_fog_mode
|
|
|
|
{
|
|
|
|
WINED3D_FFP_VS_FOG_OFF = 0,
|
|
|
|
WINED3D_FFP_VS_FOG_FOGCOORD = 1,
|
|
|
|
WINED3D_FFP_VS_FOG_DEPTH = 2,
|
|
|
|
WINED3D_FFP_VS_FOG_RANGE = 3,
|
|
|
|
};
|
|
|
|
|
|
|
|
#define WINED3D_FFP_TCI_SHIFT 16
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3D_FFP_TCI_MASK 0xffu
|
2013-05-29 09:45:35 +02:00
|
|
|
|
|
|
|
#define WINED3D_FFP_LIGHT_TYPE_SHIFT(idx) (3 * (idx))
|
2015-08-26 12:46:47 +02:00
|
|
|
#define WINED3D_FFP_LIGHT_TYPE_MASK 0x7u
|
2013-05-29 09:45:35 +02:00
|
|
|
|
|
|
|
struct wined3d_ffp_vs_settings
|
|
|
|
{
|
2017-01-26 13:25:21 +01:00
|
|
|
DWORD point_light_count : 4;
|
|
|
|
DWORD spot_light_count : 4;
|
|
|
|
DWORD directional_light_count : 4;
|
|
|
|
DWORD parallel_point_light_count : 4;
|
2013-05-29 09:45:35 +02:00
|
|
|
DWORD diffuse_source : 2;
|
2015-05-04 23:16:11 +02:00
|
|
|
DWORD emissive_source : 2;
|
2013-05-29 09:45:35 +02:00
|
|
|
DWORD ambient_source : 2;
|
|
|
|
DWORD specular_source : 2;
|
2013-06-14 09:07:12 +02:00
|
|
|
DWORD transformed : 1;
|
2015-07-03 01:04:13 +02:00
|
|
|
DWORD vertexblends : 2;
|
2013-05-29 09:45:37 +02:00
|
|
|
DWORD clipping : 1;
|
2013-05-29 09:45:35 +02:00
|
|
|
DWORD normal : 1;
|
|
|
|
DWORD normalize : 1;
|
|
|
|
DWORD lighting : 1;
|
|
|
|
DWORD localviewer : 1;
|
2017-01-26 13:25:21 +01:00
|
|
|
|
2013-05-29 09:45:36 +02:00
|
|
|
DWORD point_size : 1;
|
2015-06-16 22:45:37 +02:00
|
|
|
DWORD per_vertex_point_size : 1;
|
2013-05-29 09:45:35 +02:00
|
|
|
DWORD fog_mode : 2;
|
2019-02-20 21:53:57 +01:00
|
|
|
DWORD texcoords : 8; /* WINED3D_MAX_TEXTURES */
|
2013-07-22 20:24:29 +02:00
|
|
|
DWORD ortho_fog : 1;
|
2015-11-12 23:06:50 +01:00
|
|
|
DWORD flatshading : 1;
|
2017-01-26 13:25:21 +01:00
|
|
|
DWORD swizzle_map : 16; /* MAX_ATTRIBS, 16 */
|
|
|
|
DWORD padding : 2;
|
2013-05-29 09:45:35 +02:00
|
|
|
|
2019-02-20 21:53:57 +01:00
|
|
|
DWORD texgen[WINED3D_MAX_TEXTURES];
|
2013-05-29 09:45:35 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_ffp_vs_desc
|
|
|
|
{
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
struct wined3d_ffp_vs_settings settings;
|
|
|
|
};
|
|
|
|
|
2015-10-06 14:24:22 +02:00
|
|
|
void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, struct wined3d_ffp_vs_settings *settings) DECLSPEC_HIDDEN;
|
2013-05-29 09:45:35 +02:00
|
|
|
|
2011-02-01 19:39:53 +01:00
|
|
|
struct wined3d
|
2004-09-23 06:34:27 +02:00
|
|
|
{
|
2011-02-01 19:39:53 +01:00
|
|
|
LONG ref;
|
2019-03-22 09:42:05 +01:00
|
|
|
unsigned int flags;
|
|
|
|
unsigned int adapter_count;
|
|
|
|
struct wined3d_adapter *adapters[1];
|
2011-02-01 19:39:53 +01:00
|
|
|
};
|
2004-09-23 06:34:27 +02:00
|
|
|
|
2019-07-29 13:30:53 +02:00
|
|
|
BOOL wined3d_filter_messages(HWND window, BOOL filter) DECLSPEC_HIDDEN;
|
2014-03-20 15:51:45 +01:00
|
|
|
HRESULT wined3d_init(struct wined3d *wined3d, DWORD flags) DECLSPEC_HIDDEN;
|
2009-12-14 20:49:52 +01:00
|
|
|
void wined3d_unregister_window(HWND window) DECLSPEC_HIDDEN;
|
2009-03-11 10:15:09 +01:00
|
|
|
|
2019-04-03 11:11:34 +02:00
|
|
|
BOOL wined3d_get_app_name(char *app_name, unsigned int app_name_size) DECLSPEC_HIDDEN;
|
|
|
|
|
2018-02-08 15:22:44 +01:00
|
|
|
struct wined3d_blend_state
|
|
|
|
{
|
|
|
|
LONG refcount;
|
|
|
|
struct wined3d_blend_state_desc desc;
|
2020-03-18 01:30:38 +01:00
|
|
|
BOOL dual_source;
|
2018-02-08 15:22:44 +01:00
|
|
|
|
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
|
|
|
|
|
|
|
struct wined3d_device *device;
|
2020-03-10 05:07:27 +01:00
|
|
|
struct wine_rb_entry entry;
|
2018-02-08 15:22:44 +01:00
|
|
|
};
|
|
|
|
|
2020-05-18 17:52:49 +02:00
|
|
|
static inline unsigned int wined3d_blend_state_get_writemask(const struct wined3d_blend_state *state,
|
|
|
|
unsigned int index)
|
|
|
|
{
|
|
|
|
if (!state)
|
|
|
|
return 0xf;
|
|
|
|
if (!state->desc.independent)
|
|
|
|
index = 0;
|
|
|
|
return state->desc.rt[index].writemask;
|
|
|
|
}
|
|
|
|
|
2020-09-25 05:43:11 +02:00
|
|
|
struct wined3d_depth_stencil_state
|
|
|
|
{
|
|
|
|
LONG refcount;
|
|
|
|
struct wined3d_depth_stencil_state_desc desc;
|
|
|
|
|
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
|
|
|
|
|
|
|
struct wined3d_device *device;
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
};
|
|
|
|
|
2016-07-27 23:33:41 +02:00
|
|
|
struct wined3d_rasterizer_state
|
|
|
|
{
|
|
|
|
LONG refcount;
|
|
|
|
struct wined3d_rasterizer_state_desc desc;
|
|
|
|
|
2017-04-27 12:02:44 +02:00
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
|
|
|
|
2016-07-27 23:33:41 +02:00
|
|
|
struct wined3d_device *device;
|
2020-03-06 02:28:09 +01:00
|
|
|
struct wine_rb_entry entry;
|
2016-07-27 23:33:41 +02:00
|
|
|
};
|
|
|
|
|
2019-02-12 17:45:05 +01:00
|
|
|
#define LIGHTMAP_SIZE 43
|
|
|
|
#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE)
|
|
|
|
|
|
|
|
struct wined3d_light_state
|
|
|
|
{
|
|
|
|
/* Light hashmap. Collisions are handled using linked lists. */
|
|
|
|
struct list light_map[LIGHTMAP_SIZE];
|
2019-02-22 01:53:54 +01:00
|
|
|
const struct wined3d_light_info *lights[WINED3D_MAX_ACTIVE_LIGHTS];
|
2019-02-12 17:45:05 +01:00
|
|
|
};
|
|
|
|
|
2013-09-30 09:40:39 +02:00
|
|
|
#define WINED3D_STATE_NO_REF 0x00000001
|
2013-09-30 09:40:40 +02:00
|
|
|
#define WINED3D_STATE_INIT_DEFAULT 0x00000002
|
2013-09-30 09:40:39 +02:00
|
|
|
|
2013-08-27 08:44:59 +02:00
|
|
|
struct wined3d_state
|
|
|
|
{
|
2021-03-15 16:11:36 +01:00
|
|
|
enum wined3d_feature_level feature_level;
|
|
|
|
uint32_t flags;
|
2020-03-26 13:25:57 +01:00
|
|
|
struct wined3d_fb_state fb;
|
2013-08-27 08:44:59 +02:00
|
|
|
|
|
|
|
struct wined3d_vertex_declaration *vertex_declaration;
|
2017-03-23 12:15:48 +01:00
|
|
|
struct wined3d_stream_output stream_output[WINED3D_MAX_STREAM_OUTPUT_BUFFERS];
|
2020-02-19 16:53:52 +01:00
|
|
|
struct wined3d_stream_state streams[WINED3D_MAX_STREAMS];
|
2013-08-27 08:44:59 +02:00
|
|
|
struct wined3d_buffer *index_buffer;
|
|
|
|
enum wined3d_format_id index_format;
|
2016-06-02 11:14:13 +02:00
|
|
|
unsigned int index_offset;
|
|
|
|
int base_vertex_index;
|
|
|
|
int load_base_vertex_index; /* Non-indexed drawing needs 0 here, indexed needs base_vertex_index. */
|
2020-05-20 15:42:28 +02:00
|
|
|
enum wined3d_primitive_type primitive_type;
|
2020-05-20 15:42:29 +02:00
|
|
|
unsigned int patch_vertex_count;
|
2014-09-19 10:41:46 +02:00
|
|
|
struct wined3d_query *predicate;
|
|
|
|
BOOL predicate_value;
|
2013-08-27 08:44:59 +02:00
|
|
|
|
2013-10-09 22:57:45 +02:00
|
|
|
struct wined3d_shader *shader[WINED3D_SHADER_TYPE_COUNT];
|
2021-07-15 07:18:35 +02:00
|
|
|
struct wined3d_constant_buffer_state cb[WINED3D_SHADER_TYPE_COUNT][MAX_CONSTANT_BUFFERS];
|
2013-10-09 22:57:47 +02:00
|
|
|
struct wined3d_sampler *sampler[WINED3D_SHADER_TYPE_COUNT][MAX_SAMPLER_OBJECTS];
|
2014-09-16 10:44:16 +02:00
|
|
|
struct wined3d_shader_resource_view *shader_resource_view[WINED3D_SHADER_TYPE_COUNT][MAX_SHADER_RESOURCE_VIEWS];
|
2017-02-09 12:00:36 +01:00
|
|
|
struct wined3d_unordered_access_view *unordered_access_view[WINED3D_PIPELINE_COUNT][MAX_UNORDERED_ACCESS_VIEWS];
|
2013-10-09 22:57:45 +02:00
|
|
|
|
2016-05-17 14:01:45 +02:00
|
|
|
struct wined3d_vec4 vs_consts_f[WINED3D_MAX_VS_CONSTS_F];
|
2020-02-27 13:31:11 +01:00
|
|
|
struct wined3d_ivec4 vs_consts_i[WINED3D_MAX_CONSTS_I];
|
|
|
|
BOOL vs_consts_b[WINED3D_MAX_CONSTS_B];
|
2013-08-27 08:44:59 +02:00
|
|
|
|
2016-05-17 14:01:46 +02:00
|
|
|
struct wined3d_vec4 ps_consts_f[WINED3D_MAX_PS_CONSTS_F];
|
2020-02-27 13:31:11 +01:00
|
|
|
struct wined3d_ivec4 ps_consts_i[WINED3D_MAX_CONSTS_I];
|
|
|
|
BOOL ps_consts_b[WINED3D_MAX_CONSTS_B];
|
2013-08-27 08:44:59 +02:00
|
|
|
|
2019-02-20 21:54:00 +01:00
|
|
|
struct wined3d_texture *textures[WINED3D_MAX_COMBINED_SAMPLERS];
|
|
|
|
DWORD sampler_states[WINED3D_MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
|
2019-02-20 21:53:57 +01:00
|
|
|
DWORD texture_states[WINED3D_MAX_TEXTURES][WINED3D_HIGHEST_TEXTURE_STATE + 1];
|
2013-08-27 08:44:59 +02:00
|
|
|
|
2019-02-22 01:53:56 +01:00
|
|
|
struct wined3d_matrix transforms[WINED3D_HIGHEST_TRANSFORM_STATE + 1];
|
2019-02-22 01:53:55 +01:00
|
|
|
struct wined3d_vec4 clip_planes[WINED3D_MAX_CLIP_DISTANCES];
|
2013-08-27 08:44:59 +02:00
|
|
|
struct wined3d_material material;
|
2018-04-14 11:12:38 +02:00
|
|
|
struct wined3d_viewport viewports[WINED3D_MAX_VIEWPORTS];
|
|
|
|
unsigned int viewport_count;
|
2018-04-23 14:34:03 +02:00
|
|
|
RECT scissor_rects[WINED3D_MAX_VIEWPORTS];
|
|
|
|
unsigned int scissor_rect_count;
|
2013-08-27 08:44:59 +02:00
|
|
|
|
2019-02-12 17:45:05 +01:00
|
|
|
struct wined3d_light_state light_state;
|
2013-08-27 08:44:59 +02:00
|
|
|
|
|
|
|
DWORD render_states[WINEHIGHEST_RENDER_STATE + 1];
|
2018-02-08 15:22:44 +01:00
|
|
|
struct wined3d_blend_state *blend_state;
|
2018-10-18 00:41:13 +02:00
|
|
|
struct wined3d_color blend_factor;
|
2020-09-02 07:27:42 +02:00
|
|
|
unsigned int sample_mask;
|
2020-09-25 05:43:11 +02:00
|
|
|
struct wined3d_depth_stencil_state *depth_stencil_state;
|
2021-02-03 14:12:47 +01:00
|
|
|
unsigned int stencil_ref;
|
2016-07-27 23:33:41 +02:00
|
|
|
struct wined3d_rasterizer_state *rasterizer_state;
|
2013-08-27 08:44:59 +02:00
|
|
|
};
|
|
|
|
|
2021-03-15 16:11:35 +01:00
|
|
|
void state_cleanup(struct wined3d_state *state) DECLSPEC_HIDDEN;
|
2021-03-15 16:11:36 +01:00
|
|
|
void state_init(struct wined3d_state *state, const struct wined3d_d3d_info *d3d_info,
|
|
|
|
uint32_t flags, enum wined3d_feature_level feature_level) DECLSPEC_HIDDEN;
|
2021-03-15 16:11:35 +01:00
|
|
|
void state_unbind_resources(struct wined3d_state *state) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
static inline void wined3d_state_reset(struct wined3d_state *state, const struct wined3d_d3d_info *d3d_info)
|
|
|
|
{
|
2021-03-15 16:11:36 +01:00
|
|
|
enum wined3d_feature_level feature_level = state->feature_level;
|
2021-03-15 16:11:35 +01:00
|
|
|
uint32_t flags = state->flags;
|
|
|
|
|
|
|
|
memset(state, 0, sizeof(*state));
|
2021-03-15 16:11:36 +01:00
|
|
|
state_init(state, d3d_info, flags, feature_level);
|
2021-03-15 16:11:35 +01:00
|
|
|
}
|
|
|
|
|
2020-09-24 06:51:57 +02:00
|
|
|
static inline bool wined3d_state_uses_depth_buffer(const struct wined3d_state *state)
|
|
|
|
{
|
2020-09-25 23:01:22 +02:00
|
|
|
if (!state->depth_stencil_state)
|
|
|
|
return true;
|
2021-01-21 10:55:52 +01:00
|
|
|
return state->depth_stencil_state->desc.depth || state->depth_stencil_state->desc.depth_write
|
|
|
|
|| state->depth_stencil_state->desc.stencil;
|
2020-09-24 06:51:57 +02:00
|
|
|
}
|
|
|
|
|
2018-02-15 13:49:36 +01:00
|
|
|
struct wined3d_dummy_textures
|
|
|
|
{
|
2018-04-02 22:58:23 +02:00
|
|
|
GLuint tex_1d;
|
2018-02-15 13:49:36 +01:00
|
|
|
GLuint tex_2d;
|
|
|
|
GLuint tex_rect;
|
|
|
|
GLuint tex_3d;
|
|
|
|
GLuint tex_cube;
|
|
|
|
GLuint tex_cube_array;
|
2018-04-02 22:58:23 +02:00
|
|
|
GLuint tex_1d_array;
|
2018-02-15 13:49:36 +01:00
|
|
|
GLuint tex_2d_array;
|
|
|
|
GLuint tex_buffer;
|
|
|
|
GLuint tex_2d_ms;
|
|
|
|
GLuint tex_2d_ms_array;
|
|
|
|
};
|
|
|
|
|
2017-02-22 13:19:35 +01:00
|
|
|
#define WINED3D_UNMAPPED_STAGE ~0u
|
2009-03-09 14:31:28 +01:00
|
|
|
|
2013-09-03 09:47:21 +02:00
|
|
|
/* Multithreaded flag. Removed from the public header to signal that
|
|
|
|
* wined3d_device_create() ignores it. */
|
2009-05-01 09:13:54 +02:00
|
|
|
#define WINED3DCREATE_MULTITHREADED 0x00000004
|
|
|
|
|
2020-10-07 14:57:10 +02:00
|
|
|
struct wined3d_so_desc_entry
|
|
|
|
{
|
|
|
|
struct wine_rb_entry entry;
|
|
|
|
struct wined3d_stream_output_desc desc;
|
|
|
|
struct wined3d_stream_output_element elements[1];
|
|
|
|
};
|
|
|
|
|
2011-05-16 23:01:22 +02:00
|
|
|
struct wined3d_device
|
2004-10-07 06:22:21 +02:00
|
|
|
{
|
2011-05-16 23:01:22 +02:00
|
|
|
LONG ref;
|
2004-10-07 06:22:21 +02:00
|
|
|
|
2004-10-08 22:52:33 +02:00
|
|
|
/* WineD3D Information */
|
2011-05-18 22:30:13 +02:00
|
|
|
struct wined3d_device_parent *device_parent;
|
2011-02-01 19:39:54 +01:00
|
|
|
struct wined3d *wined3d;
|
2009-10-21 10:33:58 +02:00
|
|
|
struct wined3d_adapter *adapter;
|
2004-10-07 06:22:21 +02:00
|
|
|
|
2011-05-04 22:18:46 +02:00
|
|
|
const struct wined3d_shader_backend_ops *shader_backend;
|
2008-02-24 11:23:53 +01:00
|
|
|
void *shader_priv;
|
2008-07-11 16:41:28 +02:00
|
|
|
void *fragment_priv;
|
2013-04-25 12:16:47 +02:00
|
|
|
void *vertex_priv;
|
2019-03-03 19:55:27 +01:00
|
|
|
struct wined3d_state_entry state_table[STATE_HIGHEST + 1];
|
2008-07-02 02:43:52 +02:00
|
|
|
/* Array of functions for states which are handled by more than one pipeline part */
|
|
|
|
APPLYSTATEFUNC *multistate_funcs[STATE_HIGHEST + 1];
|
2017-04-04 09:07:43 +02:00
|
|
|
struct wined3d_blitter *blitter;
|
2006-10-08 05:25:01 +02:00
|
|
|
|
2013-09-16 12:43:18 +02:00
|
|
|
BYTE bCursorVisible : 1;
|
|
|
|
BYTE d3d_initialized : 1;
|
|
|
|
BYTE inScene : 1; /* A flag to check for proper BeginScene / EndScene call pairs */
|
|
|
|
BYTE softwareVertexProcessing : 1; /* process vertex shaders using software or hardware */
|
2019-08-05 15:55:35 +02:00
|
|
|
BYTE restore_screensaver : 1;
|
|
|
|
BYTE padding : 3;
|
2008-12-30 14:56:49 +01:00
|
|
|
|
2007-06-08 22:28:04 +02:00
|
|
|
unsigned char surface_alignment; /* Line Alignment of surfaces */
|
2004-10-08 22:52:33 +02:00
|
|
|
|
2013-09-16 12:43:18 +02:00
|
|
|
WORD padding2 : 16;
|
|
|
|
|
2004-10-08 22:52:33 +02:00
|
|
|
/* Internal use fields */
|
2011-11-27 21:34:48 +01:00
|
|
|
struct wined3d_device_creation_parameters create_parms;
|
2009-12-22 18:32:13 +01:00
|
|
|
HWND focus_window;
|
2004-10-08 22:52:33 +02:00
|
|
|
|
2014-08-21 09:55:55 +02:00
|
|
|
struct wined3d_rendertarget_view *back_buffer_view;
|
2011-04-13 19:14:32 +02:00
|
|
|
struct wined3d_swapchain **swapchains;
|
2011-04-06 19:17:53 +02:00
|
|
|
UINT swapchain_count;
|
2018-04-30 20:15:01 +02:00
|
|
|
unsigned int max_frame_latency;
|
2005-06-23 13:05:24 +02:00
|
|
|
|
2007-11-16 20:28:45 +01:00
|
|
|
struct list resources; /* a linked list to track resources created by the device */
|
2008-01-08 20:45:59 +01:00
|
|
|
struct list shaders; /* a linked list to track shaders (pixel and vertex) */
|
2020-10-07 14:57:10 +02:00
|
|
|
struct wine_rb_tree so_descs;
|
2020-09-25 05:43:11 +02:00
|
|
|
struct wine_rb_tree samplers, rasterizer_states, blend_states, depth_stencil_states;
|
2005-07-26 12:34:15 +02:00
|
|
|
|
2005-01-09 18:37:02 +01:00
|
|
|
/* Render Target Support */
|
2014-08-22 12:32:01 +02:00
|
|
|
struct wined3d_rendertarget_view *auto_depth_stencil_view;
|
2005-01-09 18:37:02 +01:00
|
|
|
|
2005-03-02 13:16:10 +01:00
|
|
|
/* Cursor management */
|
|
|
|
UINT xHotSpot;
|
|
|
|
UINT yHotSpot;
|
|
|
|
UINT xScreenSpace;
|
|
|
|
UINT yScreenSpace;
|
2006-07-27 17:39:03 +02:00
|
|
|
UINT cursorWidth, cursorHeight;
|
2013-11-18 10:46:16 +01:00
|
|
|
struct wined3d_texture *cursor_texture;
|
2007-05-15 00:37:53 +02:00
|
|
|
HCURSOR hardwareCursor;
|
2005-03-02 13:16:10 +01:00
|
|
|
|
2013-11-14 10:47:19 +01:00
|
|
|
/* The Wine logo texture */
|
|
|
|
struct wined3d_texture *logo_texture;
|
2007-09-01 21:22:32 +02:00
|
|
|
|
2016-01-05 21:52:30 +01:00
|
|
|
/* Default sampler used to emulate the direct resource access without using wined3d_sampler */
|
2017-03-20 12:13:04 +01:00
|
|
|
struct wined3d_sampler *default_sampler;
|
2017-03-20 12:13:05 +01:00
|
|
|
struct wined3d_sampler *null_sampler;
|
2016-01-05 21:52:30 +01:00
|
|
|
|
2013-09-27 00:15:13 +02:00
|
|
|
/* Command stream */
|
|
|
|
struct wined3d_cs *cs;
|
|
|
|
|
2007-02-12 19:18:22 +01:00
|
|
|
/* Context management */
|
2009-08-03 08:06:51 +02:00
|
|
|
struct wined3d_context **contexts;
|
2011-03-30 20:49:27 +02:00
|
|
|
UINT context_count;
|
2022-02-12 02:42:03 +01:00
|
|
|
|
|
|
|
CRITICAL_SECTION bo_map_lock;
|
2007-02-12 19:18:36 +01:00
|
|
|
};
|
2004-10-07 06:22:21 +02:00
|
|
|
|
2019-04-18 11:00:20 +02:00
|
|
|
void wined3d_device_cleanup(struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2011-05-16 23:01:23 +02:00
|
|
|
BOOL device_context_add(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
|
|
|
|
void device_context_remove(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2019-08-19 13:54:31 +02:00
|
|
|
void wined3d_device_create_default_samplers(struct wined3d_device *device,
|
|
|
|
struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2021-10-07 12:57:26 +02:00
|
|
|
void wined3d_device_destroy_default_samplers(struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2019-04-18 11:00:20 +02:00
|
|
|
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,
|
2018-09-24 01:09:31 +02:00
|
|
|
BYTE surface_alignment, const enum wined3d_feature_level *levels, unsigned int level_count,
|
2020-05-18 17:52:46 +02:00
|
|
|
const BOOL *supported_extensions, struct wined3d_device_parent *device_parent) DECLSPEC_HIDDEN;
|
2011-05-16 23:01:23 +02:00
|
|
|
LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL unicode,
|
2009-12-22 18:32:13 +01:00
|
|
|
UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN;
|
2011-05-16 23:01:22 +02:00
|
|
|
void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
|
|
|
void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2011-06-20 23:21:13 +02:00
|
|
|
void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN;
|
2019-04-12 14:50:47 +02:00
|
|
|
HRESULT wined3d_device_set_implicit_swapchain(struct wined3d_device *device,
|
|
|
|
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_device_uninit_3d(struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2009-12-10 21:41:54 +01:00
|
|
|
|
2022-02-12 02:42:03 +01:00
|
|
|
static inline void wined3d_device_bo_map_lock(struct wined3d_device *device)
|
|
|
|
{
|
|
|
|
EnterCriticalSection(&device->bo_map_lock);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_device_bo_map_unlock(struct wined3d_device *device)
|
|
|
|
{
|
|
|
|
LeaveCriticalSection(&device->bo_map_lock);
|
|
|
|
}
|
|
|
|
|
2019-06-05 14:24:07 +02:00
|
|
|
struct wined3d_device_no3d
|
|
|
|
{
|
|
|
|
struct wined3d_device d;
|
|
|
|
|
|
|
|
struct wined3d_context context_no3d;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_device_no3d *wined3d_device_no3d(struct wined3d_device *device)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(device, struct wined3d_device_no3d, d);
|
|
|
|
}
|
|
|
|
|
2020-05-14 15:03:44 +02:00
|
|
|
struct wined3d_null_resources_vk
|
|
|
|
{
|
|
|
|
struct wined3d_bo_vk bo;
|
2021-01-22 10:45:22 +01:00
|
|
|
VkDescriptorBufferInfo buffer_info;
|
|
|
|
|
2021-03-23 14:21:07 +01:00
|
|
|
struct wined3d_image_vk image_1d;
|
|
|
|
struct wined3d_image_vk image_2d;
|
|
|
|
struct wined3d_image_vk image_2dms;
|
|
|
|
struct wined3d_image_vk image_3d;
|
2020-05-14 15:03:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_null_views_vk
|
|
|
|
{
|
|
|
|
VkBufferView vk_view_buffer_uint;
|
|
|
|
VkBufferView vk_view_buffer_float;
|
2020-05-14 15:03:45 +02:00
|
|
|
|
|
|
|
VkDescriptorImageInfo vk_info_1d;
|
2020-05-14 15:03:46 +02:00
|
|
|
VkDescriptorImageInfo vk_info_2d;
|
|
|
|
VkDescriptorImageInfo vk_info_2dms;
|
2020-05-14 15:03:47 +02:00
|
|
|
VkDescriptorImageInfo vk_info_3d;
|
2020-05-14 15:03:48 +02:00
|
|
|
VkDescriptorImageInfo vk_info_cube;
|
2021-05-05 16:38:50 +02:00
|
|
|
VkDescriptorImageInfo vk_info_1d_array;
|
2020-05-14 15:03:46 +02:00
|
|
|
VkDescriptorImageInfo vk_info_2d_array;
|
|
|
|
VkDescriptorImageInfo vk_info_2dms_array;
|
2021-09-24 23:18:44 +02:00
|
|
|
VkDescriptorImageInfo vk_info_cube_array;
|
2020-05-14 15:03:44 +02:00
|
|
|
};
|
|
|
|
|
2020-04-17 17:51:10 +02:00
|
|
|
#define WINED3D_ALLOCATOR_CHUNK_SIZE (64 * 1024 * 1024)
|
|
|
|
#define WINED3D_ALLOCATOR_CHUNK_ORDER_COUNT 15
|
|
|
|
#define WINED3D_ALLOCATOR_MIN_BLOCK_SIZE (WINED3D_ALLOCATOR_CHUNK_SIZE >> (WINED3D_ALLOCATOR_CHUNK_ORDER_COUNT - 1))
|
2020-04-20 21:00:26 +02:00
|
|
|
#define WINED3D_SLAB_BO_MIN_OBJECT_ALIGN 16
|
2021-04-20 17:21:05 +02:00
|
|
|
#define WINED3D_RETIRED_BO_SIZE_THRESHOLD (64 * 1024 * 1024)
|
2020-04-17 17:51:10 +02:00
|
|
|
|
|
|
|
struct wined3d_allocator_chunk
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
struct list available[WINED3D_ALLOCATOR_CHUNK_ORDER_COUNT];
|
|
|
|
struct wined3d_allocator *allocator;
|
|
|
|
unsigned int map_count;
|
|
|
|
void *map_ptr;
|
|
|
|
};
|
|
|
|
|
|
|
|
void wined3d_allocator_chunk_cleanup(struct wined3d_allocator_chunk *chunk) DECLSPEC_HIDDEN;
|
|
|
|
bool wined3d_allocator_chunk_init(struct wined3d_allocator_chunk *chunk,
|
|
|
|
struct wined3d_allocator *allocator) DECLSPEC_HIDDEN;
|
|
|
|
|
2022-02-01 22:28:29 +01:00
|
|
|
struct wined3d_allocator_chunk_gl
|
|
|
|
{
|
|
|
|
struct wined3d_allocator_chunk c;
|
|
|
|
unsigned int memory_type;
|
|
|
|
GLuint gl_buffer;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_allocator_chunk_gl *wined3d_allocator_chunk_gl(struct wined3d_allocator_chunk *chunk)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(chunk, struct wined3d_allocator_chunk_gl, c);
|
|
|
|
}
|
|
|
|
|
2020-04-17 17:51:10 +02:00
|
|
|
struct wined3d_allocator_chunk_vk
|
|
|
|
{
|
|
|
|
struct wined3d_allocator_chunk c;
|
|
|
|
VkDeviceMemory vk_memory;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_allocator_chunk_vk *wined3d_allocator_chunk_vk(struct wined3d_allocator_chunk *chunk)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(chunk, struct wined3d_allocator_chunk_vk, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
void *wined3d_allocator_chunk_vk_map(struct wined3d_allocator_chunk_vk *chunk_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_allocator_chunk_vk_unmap(struct wined3d_allocator_chunk_vk *chunk_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
struct wined3d_allocator_block
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
struct wined3d_allocator_chunk *chunk;
|
|
|
|
struct wined3d_allocator_block *parent, *sibling;
|
|
|
|
unsigned int order;
|
|
|
|
size_t offset;
|
|
|
|
bool free;
|
|
|
|
};
|
|
|
|
|
|
|
|
void wined3d_allocator_block_free(struct wined3d_allocator_block *block) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
struct wined3d_allocator_pool
|
|
|
|
{
|
|
|
|
struct list chunks;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_allocator_ops
|
|
|
|
{
|
|
|
|
struct wined3d_allocator_chunk *(*allocator_create_chunk)(struct wined3d_allocator *allocator,
|
|
|
|
struct wined3d_context *context, unsigned int memory_type, size_t chunk_size);
|
|
|
|
void (*allocator_destroy_chunk)(struct wined3d_allocator_chunk *chunk);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_allocator
|
|
|
|
{
|
|
|
|
const struct wined3d_allocator_ops *ops;
|
|
|
|
struct wined3d_allocator_pool *pools;
|
|
|
|
size_t pool_count;
|
|
|
|
struct wined3d_allocator_block *free;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_allocator_block *wined3d_allocator_allocate(struct wined3d_allocator *allocator,
|
|
|
|
struct wined3d_context *context, unsigned int memory_type, size_t size) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_allocator_cleanup(struct wined3d_allocator *allocator) DECLSPEC_HIDDEN;
|
|
|
|
bool wined3d_allocator_init(struct wined3d_allocator *allocator,
|
|
|
|
size_t pool_count, const struct wined3d_allocator_ops *allocator_ops) DECLSPEC_HIDDEN;
|
|
|
|
|
2021-10-06 10:50:11 +02:00
|
|
|
struct wined3d_uav_clear_pipelines_vk
|
|
|
|
{
|
|
|
|
VkPipeline buffer;
|
|
|
|
VkPipeline image_1d;
|
|
|
|
VkPipeline image_1d_array;
|
|
|
|
VkPipeline image_2d;
|
|
|
|
VkPipeline image_2d_array;
|
|
|
|
VkPipeline image_3d;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_uav_clear_state_vk
|
|
|
|
{
|
|
|
|
struct wined3d_uav_clear_pipelines_vk float_pipelines;
|
|
|
|
struct wined3d_uav_clear_pipelines_vk uint_pipelines;
|
|
|
|
|
|
|
|
struct wined3d_shader_thread_group_size buffer_group_size;
|
|
|
|
struct wined3d_shader_thread_group_size image_1d_group_size;
|
|
|
|
struct wined3d_shader_thread_group_size image_1d_array_group_size;
|
|
|
|
struct wined3d_shader_thread_group_size image_2d_group_size;
|
|
|
|
struct wined3d_shader_thread_group_size image_2d_array_group_size;
|
|
|
|
struct wined3d_shader_thread_group_size image_3d_group_size;
|
|
|
|
|
|
|
|
struct wined3d_pipeline_layout_vk *image_layout;
|
|
|
|
struct wined3d_pipeline_layout_vk *buffer_layout;
|
|
|
|
};
|
|
|
|
|
2019-08-08 00:47:05 +02:00
|
|
|
struct wined3d_device_vk
|
|
|
|
{
|
|
|
|
struct wined3d_device d;
|
|
|
|
|
|
|
|
struct wined3d_context_vk context_vk;
|
|
|
|
|
|
|
|
VkDevice vk_device;
|
|
|
|
VkQueue vk_queue;
|
2020-01-24 17:02:07 +01:00
|
|
|
uint32_t vk_queue_family_index;
|
2020-05-26 18:10:12 +02:00
|
|
|
uint32_t timestamp_bits;
|
2019-08-08 00:47:05 +02:00
|
|
|
|
|
|
|
struct wined3d_vk_info vk_info;
|
2020-04-17 17:51:10 +02:00
|
|
|
|
2020-05-14 15:03:44 +02:00
|
|
|
struct wined3d_null_resources_vk null_resources_vk;
|
|
|
|
struct wined3d_null_views_vk null_views_vk;
|
|
|
|
|
2021-11-04 05:46:55 +01:00
|
|
|
CRITICAL_SECTION allocator_cs;
|
2020-04-17 17:51:10 +02:00
|
|
|
struct wined3d_allocator allocator;
|
2021-10-06 10:50:11 +02:00
|
|
|
|
|
|
|
struct wined3d_uav_clear_state_vk uav_clear_state;
|
2019-08-08 00:47:05 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_device_vk *wined3d_device_vk(struct wined3d_device *device)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(device, struct wined3d_device_vk, d);
|
|
|
|
}
|
|
|
|
|
2021-11-05 04:34:29 +01:00
|
|
|
static inline struct wined3d_device_vk *wined3d_device_vk_from_allocator(struct wined3d_allocator *allocator)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(allocator, struct wined3d_device_vk, allocator);
|
|
|
|
}
|
|
|
|
|
2021-11-04 05:46:55 +01:00
|
|
|
static inline void wined3d_device_vk_allocator_lock(struct wined3d_device_vk *device_vk)
|
|
|
|
{
|
|
|
|
EnterCriticalSection(&device_vk->allocator_cs);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_device_vk_allocator_unlock(struct wined3d_device_vk *device_vk)
|
|
|
|
{
|
|
|
|
LeaveCriticalSection(&device_vk->allocator_cs);
|
|
|
|
}
|
|
|
|
|
2020-05-14 15:03:44 +02:00
|
|
|
bool wined3d_device_vk_create_null_resources(struct wined3d_device_vk *device_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
bool wined3d_device_vk_create_null_views(struct wined3d_device_vk *device_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_device_vk_destroy_null_resources(struct wined3d_device_vk *device_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_device_vk_destroy_null_views(struct wined3d_device_vk *device_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
|
|
|
|
2021-10-06 10:50:11 +02:00
|
|
|
void wined3d_device_vk_uav_clear_state_init(struct wined3d_device_vk *device_vk) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_device_vk_uav_clear_state_cleanup(struct wined3d_device_vk *device_vk) DECLSPEC_HIDDEN;
|
|
|
|
|
2022-02-01 22:28:29 +01:00
|
|
|
struct wined3d_device_gl
|
|
|
|
{
|
|
|
|
struct wined3d_device d;
|
|
|
|
|
|
|
|
/* Textures for when no other textures are bound. */
|
|
|
|
struct wined3d_dummy_textures dummy_textures;
|
|
|
|
|
2022-02-16 04:28:10 +01:00
|
|
|
CRITICAL_SECTION allocator_cs;
|
2022-02-01 22:28:29 +01:00
|
|
|
struct wined3d_allocator allocator;
|
|
|
|
uint64_t completed_fence_id;
|
|
|
|
uint64_t current_fence_id;
|
2022-03-11 00:56:54 +01:00
|
|
|
uint64_t retired_bo_size;
|
2022-02-01 22:28:29 +01:00
|
|
|
|
|
|
|
struct wined3d_retired_block_gl
|
|
|
|
{
|
|
|
|
struct wined3d_allocator_block *block;
|
|
|
|
uint64_t fence_id;
|
|
|
|
} *retired_blocks;
|
|
|
|
SIZE_T retired_blocks_size;
|
|
|
|
SIZE_T retired_block_count;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_device_gl *wined3d_device_gl(struct wined3d_device *device)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(device, struct wined3d_device_gl, d);
|
|
|
|
}
|
|
|
|
|
2022-02-17 07:13:52 +01:00
|
|
|
static inline struct wined3d_device_gl *wined3d_device_gl_from_allocator(struct wined3d_allocator *allocator)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(allocator, struct wined3d_device_gl, allocator);
|
|
|
|
}
|
|
|
|
|
2022-02-16 04:28:10 +01:00
|
|
|
static inline void wined3d_device_gl_allocator_lock(struct wined3d_device_gl *device_gl)
|
|
|
|
{
|
|
|
|
EnterCriticalSection(&device_gl->allocator_cs);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_device_gl_allocator_unlock(struct wined3d_device_gl *device_gl)
|
|
|
|
{
|
|
|
|
LeaveCriticalSection(&device_gl->allocator_cs);
|
|
|
|
}
|
|
|
|
|
2022-02-17 07:13:52 +01:00
|
|
|
static inline void wined3d_allocator_chunk_gl_lock(struct wined3d_allocator_chunk_gl *chunk_gl)
|
|
|
|
{
|
|
|
|
wined3d_device_gl_allocator_lock(wined3d_device_gl_from_allocator(chunk_gl->c.allocator));
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_allocator_chunk_gl_unlock(struct wined3d_allocator_chunk_gl *chunk_gl)
|
|
|
|
{
|
|
|
|
wined3d_device_gl_allocator_unlock(wined3d_device_gl_from_allocator(chunk_gl->c.allocator));
|
|
|
|
}
|
|
|
|
|
2022-02-16 04:28:09 +01:00
|
|
|
bool wined3d_device_gl_create_bo(struct wined3d_device_gl *device_gl,
|
|
|
|
struct wined3d_context_gl *context_gl, GLsizeiptr size, GLenum binding,
|
|
|
|
GLenum usage, bool coherent, GLbitfield flags, struct wined3d_bo_gl *bo) DECLSPEC_HIDDEN;
|
2022-02-01 22:28:29 +01:00
|
|
|
void wined3d_device_gl_create_primary_opengl_context_cs(void *object) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_device_gl_delete_opengl_contexts_cs(void *object) DECLSPEC_HIDDEN;
|
|
|
|
GLbitfield wined3d_device_gl_get_memory_type_flags(unsigned int memory_type_idx) DECLSPEC_HIDDEN;
|
|
|
|
|
2019-02-05 16:57:25 +01:00
|
|
|
static inline float wined3d_alpha_ref(const struct wined3d_state *state)
|
|
|
|
{
|
|
|
|
return (state->render_states[WINED3D_RS_ALPHAREF] & 0xff) / 255.0f;
|
|
|
|
}
|
|
|
|
|
2018-01-31 16:19:36 +01:00
|
|
|
const char *wined3d_debug_resource_access(DWORD access) DECLSPEC_HIDDEN;
|
2018-10-12 15:39:53 +02:00
|
|
|
const char *wined3d_debug_bind_flags(DWORD bind_flags) DECLSPEC_HIDDEN;
|
2018-10-12 15:39:54 +02:00
|
|
|
const char *wined3d_debug_view_desc(const struct wined3d_view_desc *d,
|
|
|
|
const struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2019-05-02 14:40:48 +02:00
|
|
|
const char *wined3d_debug_vkresult(VkResult vr) DECLSPEC_HIDDEN;
|
2018-01-31 16:19:36 +01:00
|
|
|
|
2021-12-01 13:31:33 +01:00
|
|
|
static inline ULONG wined3d_atomic_decrement_mutex_lock(volatile LONG *refcount)
|
|
|
|
{
|
|
|
|
ULONG count, old_count = *refcount;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
if ((count = old_count) == 1)
|
|
|
|
{
|
|
|
|
wined3d_mutex_lock();
|
|
|
|
count = InterlockedDecrement(refcount);
|
|
|
|
if (count) wined3d_mutex_unlock();
|
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
|
|
|
old_count = InterlockedCompareExchange(refcount, count - 1, count);
|
|
|
|
}
|
|
|
|
while (old_count != count);
|
|
|
|
|
|
|
|
return count - 1;
|
|
|
|
}
|
|
|
|
|
2022-02-18 06:01:39 +01:00
|
|
|
#define CLIENT_BO_DISCARDED ((struct wined3d_bo *)~(UINT_PTR)0)
|
|
|
|
|
2021-10-15 06:44:19 +02:00
|
|
|
struct wined3d_client_resource
|
|
|
|
{
|
|
|
|
/* The resource's persistently mapped address, which we may use to perform
|
|
|
|
* NOOVERWRITE maps from the client thread. */
|
|
|
|
struct wined3d_bo_address addr;
|
|
|
|
|
|
|
|
/* The currently mapped upload BO, if applicable, and box. */
|
|
|
|
struct upload_bo mapped_upload;
|
|
|
|
struct wined3d_box mapped_box;
|
|
|
|
};
|
|
|
|
|
2018-01-30 13:24:36 +01:00
|
|
|
static inline BOOL wined3d_resource_access_is_managed(unsigned int access)
|
|
|
|
{
|
|
|
|
return !(~access & (WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU));
|
|
|
|
}
|
|
|
|
|
2011-02-28 08:05:39 +01:00
|
|
|
struct wined3d_resource_ops
|
|
|
|
{
|
2014-08-21 09:55:52 +02:00
|
|
|
ULONG (*resource_incref)(struct wined3d_resource *resource);
|
|
|
|
ULONG (*resource_decref)(struct wined3d_resource *resource);
|
2016-08-10 18:44:48 +02:00
|
|
|
void (*resource_preload)(struct wined3d_resource *resource);
|
2011-03-01 09:47:56 +01:00
|
|
|
void (*resource_unload)(struct wined3d_resource *resource);
|
2021-06-24 22:29:04 +02:00
|
|
|
HRESULT (*resource_sub_resource_get_desc)(struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, struct wined3d_sub_resource_desc *desc);
|
2021-06-24 22:29:06 +02:00
|
|
|
void (*resource_sub_resource_get_map_pitch)(struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, unsigned int *row_pitch, unsigned int *slice_pitch);
|
2015-11-02 17:12:25 +01:00
|
|
|
HRESULT (*resource_sub_resource_map)(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
2021-06-24 22:29:06 +02:00
|
|
|
void **map_ptr, const struct wined3d_box *box, DWORD flags);
|
2015-11-02 17:12:26 +01:00
|
|
|
HRESULT (*resource_sub_resource_unmap)(struct wined3d_resource *resource, unsigned int sub_resource_idx);
|
2011-02-28 08:05:39 +01:00
|
|
|
};
|
|
|
|
|
2011-03-01 09:47:56 +01:00
|
|
|
struct wined3d_resource
|
2004-10-14 02:32:04 +02:00
|
|
|
{
|
2011-03-01 09:47:56 +01:00
|
|
|
LONG ref;
|
2012-04-25 21:24:22 +02:00
|
|
|
LONG bind_count;
|
2012-05-21 20:48:33 +02:00
|
|
|
LONG map_count;
|
2022-03-09 11:48:30 +01:00
|
|
|
ULONG access_time;
|
2011-05-16 23:01:23 +02:00
|
|
|
struct wined3d_device *device;
|
2012-01-17 21:13:36 +01:00
|
|
|
enum wined3d_resource_type type;
|
2015-04-24 10:33:47 +02:00
|
|
|
enum wined3d_gl_resource_type gl_type;
|
2011-03-08 19:41:07 +01:00
|
|
|
const struct wined3d_format *format;
|
2015-04-22 11:30:15 +02:00
|
|
|
unsigned int format_flags;
|
2012-01-08 21:15:00 +01:00
|
|
|
enum wined3d_multisample_type multisample_type;
|
2013-08-21 15:15:48 +02:00
|
|
|
UINT multisample_quality;
|
|
|
|
DWORD usage;
|
2018-10-30 10:48:47 +01:00
|
|
|
unsigned int bind_flags;
|
2018-01-29 18:40:22 +01:00
|
|
|
unsigned int access;
|
2017-04-07 14:45:14 +02:00
|
|
|
WORD draw_binding;
|
|
|
|
WORD map_binding;
|
2011-03-08 19:41:07 +01:00
|
|
|
UINT width;
|
|
|
|
UINT height;
|
|
|
|
UINT depth;
|
2013-08-21 15:15:48 +02:00
|
|
|
UINT size;
|
|
|
|
DWORD priority;
|
|
|
|
void *heap_memory;
|
2010-08-31 18:41:40 +02:00
|
|
|
|
2022-02-18 06:01:35 +01:00
|
|
|
uint32_t pin_sysmem : 1;
|
|
|
|
|
2021-10-15 06:44:19 +02:00
|
|
|
struct wined3d_client_resource client;
|
|
|
|
|
2010-08-31 18:41:40 +02:00
|
|
|
void *parent;
|
2009-09-17 23:03:33 +02:00
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2011-02-28 08:05:39 +01:00
|
|
|
const struct wined3d_resource_ops *resource_ops;
|
2017-04-07 14:45:14 +02:00
|
|
|
|
|
|
|
struct list resource_list_entry;
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2021-10-07 12:57:27 +02:00
|
|
|
int32_t srv_bind_count_device;
|
|
|
|
int32_t rtv_bind_count_device;
|
2011-03-01 09:47:56 +01:00
|
|
|
};
|
2004-10-14 02:32:04 +02:00
|
|
|
|
2014-08-21 09:55:52 +02:00
|
|
|
static inline ULONG wined3d_resource_incref(struct wined3d_resource *resource)
|
|
|
|
{
|
|
|
|
return resource->resource_ops->resource_incref(resource);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline ULONG wined3d_resource_decref(struct wined3d_resource *resource)
|
|
|
|
{
|
|
|
|
return resource->resource_ops->resource_decref(resource);
|
|
|
|
}
|
|
|
|
|
2021-06-24 22:29:04 +02:00
|
|
|
static inline HRESULT wined3d_resource_get_sub_resource_desc(struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, struct wined3d_sub_resource_desc *desc)
|
|
|
|
{
|
|
|
|
return resource->resource_ops->resource_sub_resource_get_desc(resource, sub_resource_idx, desc);
|
|
|
|
}
|
|
|
|
|
2021-06-24 22:29:06 +02:00
|
|
|
static inline void wined3d_resource_get_sub_resource_map_pitch(struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, unsigned int *row_pitch, unsigned int *slice_pitch)
|
|
|
|
{
|
|
|
|
resource->resource_ops->resource_sub_resource_get_map_pitch(resource, sub_resource_idx, row_pitch, slice_pitch);
|
|
|
|
}
|
|
|
|
|
2011-03-01 09:47:56 +01:00
|
|
|
void resource_cleanup(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2011-05-16 23:01:23 +02:00
|
|
|
HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *device,
|
2015-06-06 17:53:53 +02:00
|
|
|
enum wined3d_resource_type type, const struct wined3d_format *format,
|
2018-10-30 10:48:47 +01:00
|
|
|
enum wined3d_multisample_type multisample_type, unsigned int multisample_quality, unsigned int usage,
|
|
|
|
unsigned int bind_flags, unsigned int access, unsigned int width, unsigned int height, unsigned int depth,
|
2018-02-02 17:58:54 +01:00
|
|
|
unsigned int size, void *parent, const struct wined3d_parent_ops *parent_ops,
|
2011-02-28 08:05:39 +01:00
|
|
|
const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN;
|
2021-09-30 00:15:21 +02:00
|
|
|
void *resource_offset_map_pointer(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
|
|
|
uint8_t *base_memory, const struct wined3d_box *box) DECLSPEC_HIDDEN;
|
2011-03-01 09:47:56 +01:00
|
|
|
void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2021-06-26 01:21:25 +02:00
|
|
|
HRESULT wined3d_resource_check_box_dimensions(struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, const struct wined3d_box *box) DECLSPEC_HIDDEN;
|
2013-09-16 10:57:25 +02:00
|
|
|
void wined3d_resource_free_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2018-08-23 14:34:03 +02:00
|
|
|
const struct wined3d_format *wined3d_resource_get_decompress_format(
|
2018-09-14 21:30:59 +02:00
|
|
|
const struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2019-03-03 19:55:23 +01:00
|
|
|
unsigned int wined3d_resource_get_sample_count(const struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2021-10-15 06:44:16 +02:00
|
|
|
GLbitfield wined3d_resource_gl_map_flags(const struct wined3d_bo_gl *bo, DWORD d3d_flags) DECLSPEC_HIDDEN;
|
2013-09-19 11:02:55 +02:00
|
|
|
GLenum wined3d_resource_gl_legacy_map_flags(DWORD d3d_flags) DECLSPEC_HIDDEN;
|
2020-11-30 15:41:24 +01:00
|
|
|
GLbitfield wined3d_resource_gl_storage_flags(const struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2014-08-19 09:22:29 +02:00
|
|
|
BOOL wined3d_resource_is_offscreen(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2019-08-15 23:01:35 +02:00
|
|
|
BOOL wined3d_resource_prepare_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2014-08-20 13:19:59 +02:00
|
|
|
void wined3d_resource_update_draw_binding(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2008-12-02 18:41:33 +01:00
|
|
|
|
2007-10-22 13:30:14 +02:00
|
|
|
/* Tests show that the start address of resources is 32 byte aligned */
|
2010-03-11 15:41:31 +01:00
|
|
|
#define RESOURCE_ALIGNMENT 16
|
2017-05-25 12:04:03 +02:00
|
|
|
#define WINED3D_CONSTANT_BUFFER_ALIGNMENT 16
|
2004-10-14 02:32:04 +02:00
|
|
|
|
2019-06-17 12:32:14 +02:00
|
|
|
#define WINED3D_LOCATION_DISCARDED 0x00000001
|
|
|
|
#define WINED3D_LOCATION_SYSMEM 0x00000002
|
2022-01-28 03:22:51 +01:00
|
|
|
#define WINED3D_LOCATION_CLEARED 0x00000004
|
2019-06-17 12:32:14 +02:00
|
|
|
#define WINED3D_LOCATION_BUFFER 0x00000008
|
|
|
|
#define WINED3D_LOCATION_TEXTURE_RGB 0x00000010
|
|
|
|
#define WINED3D_LOCATION_TEXTURE_SRGB 0x00000020
|
|
|
|
#define WINED3D_LOCATION_DRAWABLE 0x00000040
|
|
|
|
#define WINED3D_LOCATION_RB_MULTISAMPLE 0x00000080
|
|
|
|
#define WINED3D_LOCATION_RB_RESOLVED 0x00000100
|
|
|
|
|
|
|
|
const char *wined3d_debug_location(DWORD location) DECLSPEC_HIDDEN;
|
|
|
|
|
2018-04-12 13:58:13 +02:00
|
|
|
struct wined3d_blt_info
|
|
|
|
{
|
|
|
|
GLenum bind_target;
|
|
|
|
struct wined3d_vec3 texcoords[4];
|
|
|
|
};
|
|
|
|
|
2011-01-04 17:42:03 +01:00
|
|
|
struct wined3d_texture_ops
|
|
|
|
{
|
2019-08-15 23:01:37 +02:00
|
|
|
BOOL (*texture_prepare_location)(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
|
|
|
struct wined3d_context *context, unsigned int location);
|
2016-03-11 16:01:43 +01:00
|
|
|
BOOL (*texture_load_location)(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
2019-08-15 23:01:37 +02:00
|
|
|
struct wined3d_context *context, unsigned int location);
|
2019-12-06 20:23:47 +01:00
|
|
|
void (*texture_unload_location)(struct wined3d_texture *texture,
|
|
|
|
struct wined3d_context *context, unsigned int location);
|
2019-06-07 14:52:31 +02:00
|
|
|
void (*texture_upload_data)(struct wined3d_context *context, const struct wined3d_const_bo_address *src_bo_addr,
|
|
|
|
const struct wined3d_format *src_format, const struct wined3d_box *src_box, unsigned int src_row_pitch,
|
|
|
|
unsigned int src_slice_pitch, struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx,
|
|
|
|
unsigned int dst_location, unsigned int dst_x, unsigned int dst_y, unsigned int dst_z);
|
2019-06-14 13:17:23 +02:00
|
|
|
void (*texture_download_data)(struct wined3d_context *context, struct wined3d_texture *src_texture,
|
|
|
|
unsigned int src_sub_resource_idx, unsigned int src_location, const struct wined3d_box *src_box,
|
|
|
|
const struct wined3d_bo_address *dst_bo_addr, const struct wined3d_format *dst_format,
|
|
|
|
unsigned int dst_x, unsigned int dst_y, unsigned int dst_z,
|
|
|
|
unsigned int dst_row_pitch, unsigned int dst_slice_pitch);
|
2011-01-04 17:42:03 +01:00
|
|
|
};
|
|
|
|
|
2013-09-09 10:26:18 +02:00
|
|
|
#define WINED3D_TEXTURE_COND_NP2 0x00000001
|
2016-02-18 17:30:01 +01:00
|
|
|
#define WINED3D_TEXTURE_COND_NP2_EMULATED 0x00000002
|
|
|
|
#define WINED3D_TEXTURE_POW2_MAT_IDENT 0x00000004
|
|
|
|
#define WINED3D_TEXTURE_IS_SRGB 0x00000008
|
|
|
|
#define WINED3D_TEXTURE_RGB_ALLOCATED 0x00000010
|
|
|
|
#define WINED3D_TEXTURE_RGB_VALID 0x00000020
|
|
|
|
#define WINED3D_TEXTURE_SRGB_ALLOCATED 0x00000040
|
|
|
|
#define WINED3D_TEXTURE_SRGB_VALID 0x00000080
|
|
|
|
#define WINED3D_TEXTURE_CONVERTED 0x00000100
|
2016-03-09 16:21:53 +01:00
|
|
|
#define WINED3D_TEXTURE_NORMALIZED_COORDS 0x00000400
|
2016-04-13 12:18:47 +02:00
|
|
|
#define WINED3D_TEXTURE_GET_DC_LENIENT 0x00000800
|
2016-04-13 12:18:48 +02:00
|
|
|
#define WINED3D_TEXTURE_DC_IN_USE 0x00001000
|
2016-04-14 19:32:47 +02:00
|
|
|
#define WINED3D_TEXTURE_DISCARD 0x00002000
|
2016-09-01 18:01:12 +02:00
|
|
|
#define WINED3D_TEXTURE_GET_DC 0x00004000
|
2017-11-24 23:30:00 +01:00
|
|
|
#define WINED3D_TEXTURE_GENERATE_MIPMAPS 0x00008000
|
2019-08-19 13:54:27 +02:00
|
|
|
#define WINED3D_TEXTURE_DOWNLOADABLE 0x00010000
|
2015-04-09 22:48:11 +02:00
|
|
|
|
|
|
|
#define WINED3D_TEXTURE_ASYNC_COLOR_KEY 0x00000001
|
2011-03-28 21:58:43 +02:00
|
|
|
|
2011-03-28 21:58:42 +02:00
|
|
|
struct wined3d_texture
|
2004-12-07 15:29:12 +01:00
|
|
|
{
|
2011-03-28 21:58:42 +02:00
|
|
|
struct wined3d_resource resource;
|
2011-01-04 17:42:03 +01:00
|
|
|
const struct wined3d_texture_ops *texture_ops;
|
2014-08-20 13:20:00 +02:00
|
|
|
struct wined3d_swapchain *swapchain;
|
2016-04-13 19:09:54 +02:00
|
|
|
unsigned int pow2_width;
|
|
|
|
unsigned int pow2_height;
|
2010-04-22 18:55:57 +02:00
|
|
|
UINT layer_count;
|
|
|
|
UINT level_count;
|
2016-03-09 16:21:53 +01:00
|
|
|
unsigned int download_count;
|
2016-04-20 19:29:11 +02:00
|
|
|
unsigned int sysmem_count;
|
2011-03-28 21:58:42 +02:00
|
|
|
float pow2_matrix[16];
|
|
|
|
UINT lod;
|
|
|
|
DWORD sampler;
|
2011-03-28 21:58:43 +02:00
|
|
|
DWORD flags;
|
2016-04-18 19:06:27 +02:00
|
|
|
DWORD update_map_binding;
|
2014-01-09 12:17:00 +01:00
|
|
|
|
2016-02-08 18:32:05 +01:00
|
|
|
unsigned int row_pitch;
|
2016-02-09 21:29:58 +01:00
|
|
|
unsigned int slice_pitch;
|
2016-02-08 18:32:04 +01:00
|
|
|
|
2015-04-09 22:48:11 +02:00
|
|
|
/* May only be accessed from the command stream worker thread. */
|
|
|
|
struct wined3d_texture_async
|
|
|
|
{
|
|
|
|
DWORD flags;
|
|
|
|
|
|
|
|
/* Color keys for DDraw */
|
|
|
|
struct wined3d_color_key dst_blt_color_key;
|
|
|
|
struct wined3d_color_key src_blt_color_key;
|
|
|
|
struct wined3d_color_key dst_overlay_color_key;
|
|
|
|
struct wined3d_color_key src_overlay_color_key;
|
|
|
|
struct wined3d_color_key gl_color_key;
|
|
|
|
DWORD color_key_flags;
|
|
|
|
} async;
|
2016-02-16 17:17:25 +01:00
|
|
|
|
2019-12-10 18:56:15 +01:00
|
|
|
struct wined3d_dirty_regions
|
|
|
|
{
|
|
|
|
struct wined3d_box *boxes;
|
|
|
|
SIZE_T boxes_size;
|
|
|
|
unsigned int box_count;
|
|
|
|
} *dirty_regions;
|
|
|
|
|
2018-02-21 07:55:27 +01:00
|
|
|
struct wined3d_overlay_info
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
struct list overlays;
|
2018-03-15 09:08:38 +01:00
|
|
|
struct wined3d_texture *dst_texture;
|
|
|
|
unsigned int dst_sub_resource_idx;
|
2018-02-21 07:55:27 +01:00
|
|
|
RECT src_rect;
|
|
|
|
RECT dst_rect;
|
|
|
|
} *overlay_info;
|
|
|
|
|
2018-03-15 09:08:40 +01:00
|
|
|
struct wined3d_dc_info
|
|
|
|
{
|
|
|
|
HBITMAP bitmap;
|
|
|
|
HDC dc;
|
|
|
|
} *dc_info;
|
|
|
|
|
2016-03-28 18:58:01 +02:00
|
|
|
struct wined3d_texture_sub_resource
|
2016-02-16 17:17:26 +01:00
|
|
|
{
|
2016-04-20 19:29:14 +02:00
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
|
|
|
|
2016-04-20 19:29:12 +02:00
|
|
|
unsigned int offset;
|
|
|
|
unsigned int size;
|
2016-03-02 19:24:18 +01:00
|
|
|
|
2016-04-10 18:09:27 +02:00
|
|
|
unsigned int map_count;
|
2019-09-23 13:24:16 +02:00
|
|
|
uint32_t map_flags;
|
2016-03-28 18:58:01 +02:00
|
|
|
DWORD locations;
|
2022-02-24 03:21:41 +01:00
|
|
|
struct wined3d_bo *bo;
|
2020-06-17 00:54:26 +02:00
|
|
|
|
|
|
|
void *user_memory;
|
2018-10-29 08:17:09 +01:00
|
|
|
} *sub_resources;
|
2011-03-18 19:10:59 +01:00
|
|
|
};
|
2004-12-07 15:29:12 +01:00
|
|
|
|
2019-08-13 10:31:36 +02:00
|
|
|
static inline void *wined3d_texture_allocate_object_memory(SIZE_T s, SIZE_T level_count, SIZE_T layer_count)
|
|
|
|
{
|
|
|
|
struct wined3d_texture *t;
|
|
|
|
|
|
|
|
if (level_count > ((~(SIZE_T)0 - s) / sizeof(*t->sub_resources)) / layer_count)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return heap_alloc_zero(s + level_count * layer_count * sizeof(*t->sub_resources));
|
|
|
|
}
|
|
|
|
|
2016-04-20 19:29:13 +02:00
|
|
|
static inline struct wined3d_texture *texture_from_resource(struct wined3d_resource *resource)
|
2011-03-01 09:47:56 +01:00
|
|
|
{
|
2011-03-18 19:11:00 +01:00
|
|
|
return CONTAINING_RECORD(resource, struct wined3d_texture, resource);
|
2011-03-01 09:47:56 +01:00
|
|
|
}
|
|
|
|
|
2016-03-09 16:21:54 +01:00
|
|
|
static inline unsigned int wined3d_texture_get_level_width(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level)
|
|
|
|
{
|
|
|
|
return max(1, texture->resource.width >> level);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline unsigned int wined3d_texture_get_level_height(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level)
|
|
|
|
{
|
|
|
|
return max(1, texture->resource.height >> level);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline unsigned int wined3d_texture_get_level_depth(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level)
|
|
|
|
{
|
|
|
|
return max(1, texture->resource.depth >> level);
|
|
|
|
}
|
|
|
|
|
2016-04-13 19:09:54 +02:00
|
|
|
static inline unsigned int wined3d_texture_get_level_pow2_width(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level)
|
|
|
|
{
|
|
|
|
return max(1, texture->pow2_width >> level);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline unsigned int wined3d_texture_get_level_pow2_height(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level)
|
|
|
|
{
|
|
|
|
return max(1, texture->pow2_height >> level);
|
|
|
|
}
|
|
|
|
|
2018-03-21 10:30:49 +01:00
|
|
|
static inline void wined3d_texture_get_level_box(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level, struct wined3d_box *box)
|
|
|
|
{
|
|
|
|
wined3d_box_set(box, 0, 0,
|
|
|
|
wined3d_texture_get_level_width(texture, level),
|
|
|
|
wined3d_texture_get_level_height(texture, level),
|
|
|
|
0, wined3d_texture_get_level_depth(texture, level));
|
|
|
|
}
|
|
|
|
|
2020-05-28 20:02:15 +02:00
|
|
|
static inline bool wined3d_texture_is_full_rect(const struct wined3d_texture *texture,
|
|
|
|
unsigned int level, const RECT *r)
|
|
|
|
{
|
|
|
|
unsigned int t;
|
|
|
|
|
|
|
|
t = wined3d_texture_get_level_width(texture, level);
|
|
|
|
if ((r->left && r->right) || abs(r->right - r->left) != t)
|
|
|
|
return false;
|
|
|
|
t = wined3d_texture_get_level_height(texture, level);
|
|
|
|
if ((r->top && r->bottom) || abs(r->bottom - r->top) != t)
|
|
|
|
return false;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2018-03-13 11:23:02 +01:00
|
|
|
HRESULT texture2d_blt(struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx,
|
|
|
|
const struct wined3d_box *dst_box, struct wined3d_texture *src_texture,
|
|
|
|
unsigned int src_sub_resource_idx, const struct wined3d_box *src_box, DWORD flags,
|
|
|
|
const struct wined3d_blt_fx *blt_fx, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN;
|
2018-10-30 10:48:44 +01:00
|
|
|
void texture2d_get_blt_info(const struct wined3d_texture_gl *texture_gl, unsigned int sub_resource_idx,
|
2018-04-12 13:58:13 +02:00
|
|
|
const RECT *rect, struct wined3d_blt_info *info) DECLSPEC_HIDDEN;
|
2018-10-30 10:48:44 +01:00
|
|
|
void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl, unsigned int sub_resource_idx,
|
2018-03-09 07:31:51 +01:00
|
|
|
BOOL srgb, struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2019-06-17 12:32:14 +02:00
|
|
|
void texture2d_read_from_framebuffer(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
|
|
|
struct wined3d_context *context, DWORD src_location, DWORD dst_location) DECLSPEC_HIDDEN;
|
2018-03-06 07:38:28 +01:00
|
|
|
|
2019-08-13 10:31:36 +02:00
|
|
|
void wined3d_texture_cleanup(struct wined3d_texture *texture) DECLSPEC_HIDDEN;
|
2018-10-04 08:16:44 +02:00
|
|
|
void wined3d_texture_download_from_texture(struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx,
|
|
|
|
struct wined3d_texture *src_texture, unsigned int src_sub_resource_idx) DECLSPEC_HIDDEN;
|
2022-02-24 03:21:35 +01:00
|
|
|
void wined3d_texture_get_bo_address(const struct wined3d_texture *texture,
|
|
|
|
unsigned int sub_resource_idx, struct wined3d_bo_address *data, DWORD location) DECLSPEC_HIDDEN;
|
2016-03-23 17:58:23 +01:00
|
|
|
GLenum wined3d_texture_get_gl_buffer(const struct wined3d_texture *texture) DECLSPEC_HIDDEN;
|
2016-03-30 21:30:19 +02:00
|
|
|
void wined3d_texture_invalidate_location(struct wined3d_texture *texture,
|
|
|
|
unsigned int sub_resource_idx, DWORD location) DECLSPEC_HIDDEN;
|
2013-11-22 10:45:02 +01:00
|
|
|
void wined3d_texture_load(struct wined3d_texture *texture,
|
2013-11-22 10:45:04 +01:00
|
|
|
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
|
2016-08-02 12:26:29 +02:00
|
|
|
BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
|
|
|
|
unsigned int sub_resource_idx, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
2016-04-18 19:06:32 +02:00
|
|
|
BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
|
|
|
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
2014-08-20 13:20:00 +02:00
|
|
|
void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
|
|
|
|
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
2021-09-10 15:58:43 +02:00
|
|
|
BOOL wined3d_texture_can_use_pbo(const struct wined3d_texture *texture, const struct wined3d_d3d_info *d3d_info)
|
|
|
|
DECLSPEC_HIDDEN;
|
2019-08-13 10:31:36 +02:00
|
|
|
void wined3d_texture_sub_resources_destroyed(struct wined3d_texture *texture) DECLSPEC_HIDDEN;
|
2018-03-05 08:36:34 +01:00
|
|
|
void wined3d_texture_translate_drawable_coords(const struct wined3d_texture *texture,
|
|
|
|
HWND window, RECT *rect) DECLSPEC_HIDDEN;
|
2022-02-21 06:22:23 +01:00
|
|
|
void wined3d_texture_update_sub_resource(struct wined3d_texture *texture, unsigned int sub_resource_idx,
|
|
|
|
struct wined3d_context *context, const struct upload_bo *upload_bo, const struct wined3d_box *box,
|
|
|
|
unsigned int row_pitch, unsigned int slice_pitch) DECLSPEC_HIDDEN;
|
2018-04-16 15:29:28 +02:00
|
|
|
void wined3d_texture_upload_from_texture(struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx,
|
|
|
|
unsigned int dst_x, unsigned int dst_y, unsigned int dst_z, struct wined3d_texture *src_texture,
|
|
|
|
unsigned int src_sub_resource_idx, const struct wined3d_box *src_box) DECLSPEC_HIDDEN;
|
2016-03-29 16:45:36 +02:00
|
|
|
void wined3d_texture_validate_location(struct wined3d_texture *texture,
|
|
|
|
unsigned int sub_resource_idx, DWORD location) DECLSPEC_HIDDEN;
|
2019-12-10 18:56:15 +01:00
|
|
|
void wined3d_texture_clear_dirty_regions(struct wined3d_texture *texture) DECLSPEC_HIDDEN;
|
2008-12-02 18:41:32 +01:00
|
|
|
|
2019-08-13 10:31:36 +02:00
|
|
|
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) DECLSPEC_HIDDEN;
|
|
|
|
|
2018-10-10 14:33:12 +02:00
|
|
|
void wined3d_gl_texture_swizzle_from_color_fixup(GLint swizzle[4], struct color_fixup_desc fixup) DECLSPEC_HIDDEN;
|
2020-04-30 15:48:37 +02:00
|
|
|
void wined3d_vk_swizzle_from_color_fixup(VkComponentMapping *mapping, struct color_fixup_desc fixup) DECLSPEC_HIDDEN;
|
2018-10-10 14:33:12 +02:00
|
|
|
|
2018-10-30 10:48:43 +01:00
|
|
|
struct gl_texture
|
|
|
|
{
|
|
|
|
struct wined3d_sampler_desc sampler_desc;
|
|
|
|
unsigned int base_level;
|
|
|
|
GLuint name;
|
|
|
|
};
|
|
|
|
|
2018-10-29 08:17:09 +01:00
|
|
|
struct wined3d_texture_gl
|
|
|
|
{
|
|
|
|
struct wined3d_texture t;
|
2018-10-29 08:17:10 +01:00
|
|
|
|
2018-10-30 10:48:43 +01:00
|
|
|
struct gl_texture texture_rgb, texture_srgb;
|
|
|
|
|
2018-10-30 10:48:44 +01:00
|
|
|
GLenum target;
|
|
|
|
|
2018-10-29 08:17:11 +01:00
|
|
|
GLuint rb_multisample;
|
|
|
|
GLuint rb_resolved;
|
|
|
|
|
2018-10-29 08:17:10 +01:00
|
|
|
struct list renderbuffers;
|
|
|
|
const struct wined3d_renderbuffer_entry *current_renderbuffer;
|
2018-10-29 08:17:09 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_texture_gl *wined3d_texture_gl(struct wined3d_texture *texture)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(texture, struct wined3d_texture_gl, t);
|
|
|
|
}
|
|
|
|
|
2018-10-30 10:48:43 +01:00
|
|
|
static inline struct gl_texture *wined3d_texture_gl_get_gl_texture(struct wined3d_texture_gl *texture_gl,
|
|
|
|
BOOL srgb)
|
|
|
|
{
|
|
|
|
return srgb ? &texture_gl->texture_srgb : &texture_gl->texture_rgb;
|
|
|
|
}
|
|
|
|
|
2018-10-30 10:48:44 +01:00
|
|
|
static inline GLenum wined3d_texture_gl_get_sub_resource_target(const struct wined3d_texture_gl *texture_gl,
|
|
|
|
unsigned int sub_resource_idx)
|
|
|
|
{
|
|
|
|
static const GLenum cube_targets[] =
|
|
|
|
{
|
|
|
|
GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
|
|
|
|
GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB,
|
|
|
|
GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB,
|
|
|
|
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB,
|
|
|
|
GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB,
|
|
|
|
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB,
|
|
|
|
};
|
|
|
|
|
|
|
|
return texture_gl->t.resource.usage & WINED3DUSAGE_LEGACY_CUBEMAP
|
|
|
|
? cube_targets[sub_resource_idx / texture_gl->t.level_count] : texture_gl->target;
|
|
|
|
}
|
|
|
|
|
2019-06-17 12:32:14 +02:00
|
|
|
static inline BOOL wined3d_texture_gl_is_multisample_location(const struct wined3d_texture_gl *texture_gl,
|
|
|
|
DWORD location)
|
|
|
|
{
|
|
|
|
if (location == WINED3D_LOCATION_RB_MULTISAMPLE)
|
|
|
|
return TRUE;
|
|
|
|
if (location != WINED3D_LOCATION_TEXTURE_RGB && location != WINED3D_LOCATION_TEXTURE_SRGB)
|
|
|
|
return FALSE;
|
|
|
|
return texture_gl->target == GL_TEXTURE_2D_MULTISAMPLE || texture_gl->target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY;
|
|
|
|
}
|
|
|
|
|
2018-10-30 10:48:43 +01:00
|
|
|
void wined3d_texture_gl_apply_sampler_desc(struct wined3d_texture_gl *texture_gl,
|
2019-06-12 13:29:33 +02:00
|
|
|
const struct wined3d_sampler_desc *sampler_desc, const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2018-10-30 10:48:43 +01:00
|
|
|
void wined3d_texture_gl_bind(struct wined3d_texture_gl *texture_gl,
|
2019-06-12 13:29:34 +02:00
|
|
|
struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
|
2018-10-30 10:48:43 +01:00
|
|
|
void wined3d_texture_gl_bind_and_dirtify(struct wined3d_texture_gl *texture_gl,
|
2019-05-09 16:41:13 +02:00
|
|
|
struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:36 +02:00
|
|
|
HRESULT wined3d_texture_gl_init(struct wined3d_texture_gl *texture_gl, 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) DECLSPEC_HIDDEN;
|
2019-06-12 13:29:32 +02:00
|
|
|
void wined3d_texture_gl_prepare_texture(struct wined3d_texture_gl *texture_gl,
|
|
|
|
struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
|
2018-10-29 08:17:10 +01:00
|
|
|
void wined3d_texture_gl_set_compatible_renderbuffer(struct wined3d_texture_gl *texture_gl,
|
2019-06-13 13:40:35 +02:00
|
|
|
struct wined3d_context_gl *context_gl, unsigned int level,
|
2018-10-29 08:17:10 +01:00
|
|
|
const struct wined3d_rendertarget_info *rt) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:36 +02:00
|
|
|
|
|
|
|
struct wined3d_texture_vk
|
|
|
|
{
|
|
|
|
struct wined3d_texture t;
|
2020-04-20 21:00:23 +02:00
|
|
|
|
2021-03-23 14:21:07 +01:00
|
|
|
struct wined3d_image_vk image;
|
2020-04-20 21:00:24 +02:00
|
|
|
enum VkImageLayout layout;
|
2021-01-19 14:34:57 +01:00
|
|
|
uint32_t bind_mask;
|
2020-04-27 17:48:47 +02:00
|
|
|
|
|
|
|
VkDescriptorImageInfo default_image_info;
|
2019-08-13 10:31:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_texture_vk *wined3d_texture_vk(struct wined3d_texture *texture)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(texture, struct wined3d_texture_vk, t);
|
|
|
|
}
|
|
|
|
|
2021-01-19 14:34:57 +01:00
|
|
|
void wined3d_texture_vk_barrier(struct wined3d_texture_vk *texture_vk,
|
|
|
|
struct wined3d_context_vk *context_vk, uint32_t bind_mask) DECLSPEC_HIDDEN;
|
2020-04-27 17:48:47 +02:00
|
|
|
const VkDescriptorImageInfo *wined3d_texture_vk_get_default_image_info(struct wined3d_texture_vk *texture_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:36 +02:00
|
|
|
HRESULT wined3d_texture_vk_init(struct wined3d_texture_vk *texture_vk, 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) DECLSPEC_HIDDEN;
|
2020-04-27 17:48:46 +02:00
|
|
|
BOOL wined3d_texture_vk_prepare_texture(struct wined3d_texture_vk *texture_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2018-10-29 08:17:10 +01:00
|
|
|
|
2011-05-16 23:01:24 +02:00
|
|
|
struct wined3d_renderbuffer_entry
|
|
|
|
{
|
2007-04-09 01:53:32 +02:00
|
|
|
struct list entry;
|
|
|
|
GLuint id;
|
|
|
|
UINT width;
|
|
|
|
UINT height;
|
2011-05-16 23:01:24 +02:00
|
|
|
};
|
2007-04-09 01:53:32 +02:00
|
|
|
|
2016-02-21 22:29:57 +01:00
|
|
|
struct wined3d_fbo_resource
|
|
|
|
{
|
|
|
|
GLuint object;
|
2016-04-20 11:42:17 +02:00
|
|
|
GLenum target;
|
|
|
|
GLuint level, layer;
|
2016-02-21 22:29:57 +01:00
|
|
|
};
|
|
|
|
|
2016-02-21 22:30:01 +01:00
|
|
|
#define WINED3D_FBO_ENTRY_FLAG_ATTACHED 0x1
|
|
|
|
#define WINED3D_FBO_ENTRY_FLAG_DEPTH 0x2
|
|
|
|
#define WINED3D_FBO_ENTRY_FLAG_STENCIL 0x4
|
|
|
|
|
2008-09-18 14:57:53 +02:00
|
|
|
struct fbo_entry
|
|
|
|
{
|
|
|
|
struct list entry;
|
2016-02-21 22:30:01 +01:00
|
|
|
DWORD flags;
|
2011-08-21 21:34:54 +02:00
|
|
|
DWORD rt_mask;
|
2008-09-18 14:57:53 +02:00
|
|
|
GLuint id;
|
2016-02-21 22:29:57 +01:00
|
|
|
struct wined3d_fbo_entry_key
|
|
|
|
{
|
|
|
|
DWORD rb_namespace;
|
2020-03-24 17:35:23 +01:00
|
|
|
struct wined3d_fbo_resource objects[WINED3D_MAX_RENDER_TARGETS + 1];
|
2016-02-21 22:29:57 +01:00
|
|
|
} key;
|
2008-09-18 14:57:53 +02:00
|
|
|
};
|
|
|
|
|
2012-12-05 21:01:47 +01:00
|
|
|
struct wined3d_sampler
|
|
|
|
{
|
2015-01-15 17:19:06 +01:00
|
|
|
struct wine_rb_entry entry;
|
2012-12-05 21:01:47 +01:00
|
|
|
LONG refcount;
|
2015-01-15 17:19:06 +01:00
|
|
|
struct wined3d_device *device;
|
2012-12-05 21:01:47 +01:00
|
|
|
void *parent;
|
2017-04-26 13:19:54 +02:00
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2015-01-15 17:19:03 +01:00
|
|
|
struct wined3d_sampler_desc desc;
|
2012-12-05 21:01:47 +01:00
|
|
|
};
|
|
|
|
|
2019-08-15 11:49:59 +02:00
|
|
|
struct wined3d_sampler_gl
|
|
|
|
{
|
|
|
|
struct wined3d_sampler s;
|
|
|
|
|
|
|
|
GLuint name;
|
|
|
|
};
|
2017-03-20 12:13:06 +01:00
|
|
|
|
2019-08-15 11:49:59 +02:00
|
|
|
static inline struct wined3d_sampler_gl *wined3d_sampler_gl(struct wined3d_sampler *sampler)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(sampler, struct wined3d_sampler_gl, s);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wined3d_sampler_gl_bind(struct wined3d_sampler_gl *sampler_gl, unsigned int unit,
|
|
|
|
struct wined3d_texture_gl *texture_gl, const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
|
|
|
void wined3d_sampler_gl_init(struct wined3d_sampler_gl *sampler_gl,
|
2019-08-14 14:04:39 +02:00
|
|
|
struct wined3d_device *device, const struct wined3d_sampler_desc *desc,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
|
|
|
|
2020-05-01 12:36:20 +02:00
|
|
|
struct wined3d_sampler_vk
|
|
|
|
{
|
|
|
|
struct wined3d_sampler s;
|
|
|
|
|
|
|
|
VkDescriptorImageInfo vk_image_info;
|
|
|
|
uint64_t command_buffer_id;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_sampler_vk *wined3d_sampler_vk(struct wined3d_sampler *sampler)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(sampler, struct wined3d_sampler_vk, s);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wined3d_sampler_vk_init(struct wined3d_sampler_vk *sampler_vk,
|
2019-08-14 14:04:39 +02:00
|
|
|
struct wined3d_device *device, const struct wined3d_sampler_desc *desc,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
|
|
|
|
2009-03-27 10:25:56 +01:00
|
|
|
struct wined3d_vertex_declaration_element
|
|
|
|
{
|
2010-08-30 20:29:49 +02:00
|
|
|
const struct wined3d_format *format;
|
2009-03-27 10:25:56 +01:00
|
|
|
BOOL ffp_valid;
|
2015-02-13 10:40:48 +01:00
|
|
|
unsigned int input_slot;
|
|
|
|
unsigned int offset;
|
2015-03-24 09:38:23 +01:00
|
|
|
unsigned int output_slot;
|
|
|
|
enum wined3d_input_classification input_slot_class;
|
|
|
|
unsigned int instance_data_step_rate;
|
2009-03-27 10:25:56 +01:00
|
|
|
BYTE method;
|
|
|
|
BYTE usage;
|
|
|
|
BYTE usage_idx;
|
|
|
|
};
|
|
|
|
|
2011-02-02 20:22:50 +01:00
|
|
|
struct wined3d_vertex_declaration
|
|
|
|
{
|
|
|
|
LONG ref;
|
2010-08-31 18:41:40 +02:00
|
|
|
void *parent;
|
2009-09-23 10:05:52 +02:00
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2011-05-16 23:01:23 +02:00
|
|
|
struct wined3d_device *device;
|
2007-03-12 23:21:54 +01:00
|
|
|
|
2009-03-27 10:25:56 +01:00
|
|
|
struct wined3d_vertex_declaration_element *elements;
|
2018-08-24 15:44:05 +02:00
|
|
|
unsigned int element_count;
|
2007-08-03 19:53:25 +02:00
|
|
|
|
2013-05-27 09:22:50 +02:00
|
|
|
BOOL position_transformed;
|
2011-02-02 20:22:50 +01:00
|
|
|
};
|
2005-01-19 20:34:49 +01:00
|
|
|
|
2011-11-07 21:20:01 +01:00
|
|
|
struct wined3d_saved_states
|
|
|
|
{
|
2020-05-12 22:42:55 +02:00
|
|
|
uint32_t vs_consts_f[WINED3D_BITMAP_SIZE(WINED3D_MAX_VS_CONSTS_F)];
|
2020-02-27 13:31:11 +01:00
|
|
|
WORD vertexShaderConstantsI; /* WINED3D_MAX_CONSTS_I, 16 */
|
|
|
|
WORD vertexShaderConstantsB; /* WINED3D_MAX_CONSTS_B, 16 */
|
2020-05-12 22:42:55 +02:00
|
|
|
uint32_t ps_consts_f[WINED3D_BITMAP_SIZE(WINED3D_MAX_PS_CONSTS_F)];
|
2020-02-27 13:31:11 +01:00
|
|
|
WORD pixelShaderConstantsI; /* WINED3D_MAX_CONSTS_I, 16 */
|
|
|
|
WORD pixelShaderConstantsB; /* WINED3D_MAX_CONSTS_B, 16 */
|
2020-05-12 22:42:55 +02:00
|
|
|
uint32_t transform[WINED3D_BITMAP_SIZE(WINED3D_HIGHEST_TRANSFORM_STATE + 1)];
|
2019-02-20 21:53:56 +01:00
|
|
|
WORD streamSource; /* WINED3D_MAX_STREAMS, 16 */
|
|
|
|
WORD streamFreq; /* WINED3D_MAX_STREAMS, 16 */
|
2020-05-12 22:42:55 +02:00
|
|
|
uint32_t renderState[WINED3D_BITMAP_SIZE(WINEHIGHEST_RENDER_STATE + 1)];
|
2019-02-20 21:53:57 +01:00
|
|
|
DWORD textureState[WINED3D_MAX_TEXTURES]; /* WINED3D_HIGHEST_TEXTURE_STATE + 1, 18 */
|
2019-02-20 21:54:00 +01:00
|
|
|
WORD samplerState[WINED3D_MAX_COMBINED_SAMPLERS]; /* WINED3D_HIGHEST_SAMPLER_STATE + 1, 14 */
|
2020-02-28 11:25:03 +01:00
|
|
|
DWORD clipplane; /* WINED3D_MAX_CLIP_DISTANCES, 8 */
|
2019-02-20 21:54:00 +01:00
|
|
|
DWORD textures : 20; /* WINED3D_MAX_COMBINED_SAMPLERS, 20 */
|
2009-10-14 10:55:19 +02:00
|
|
|
DWORD indices : 1;
|
|
|
|
DWORD material : 1;
|
|
|
|
DWORD viewport : 1;
|
|
|
|
DWORD vertexDecl : 1;
|
|
|
|
DWORD pixelShader : 1;
|
|
|
|
DWORD vertexShader : 1;
|
|
|
|
DWORD scissorRect : 1;
|
2019-04-04 18:07:13 +02:00
|
|
|
DWORD store_stream_offset : 1;
|
2020-03-10 05:07:27 +01:00
|
|
|
DWORD alpha_to_coverage : 1;
|
2020-03-02 14:02:45 +01:00
|
|
|
DWORD lights : 1;
|
2020-03-02 14:02:46 +01:00
|
|
|
DWORD transforms : 1;
|
|
|
|
DWORD padding : 1;
|
2011-11-07 21:20:01 +01:00
|
|
|
};
|
2004-10-21 22:59:12 +02:00
|
|
|
|
2007-08-09 17:45:29 +02:00
|
|
|
struct StageState {
|
|
|
|
DWORD stage;
|
|
|
|
DWORD state;
|
|
|
|
};
|
|
|
|
|
2011-01-28 20:05:41 +01:00
|
|
|
struct wined3d_stateblock
|
2004-10-21 22:59:12 +02:00
|
|
|
{
|
2005-07-28 12:16:21 +02:00
|
|
|
LONG ref; /* Note: Ref counting not required */
|
2011-05-16 23:01:23 +02:00
|
|
|
struct wined3d_device *device;
|
2004-10-21 22:59:12 +02:00
|
|
|
|
|
|
|
/* Array indicating whether things have been set or changed */
|
2011-11-07 21:20:01 +01:00
|
|
|
struct wined3d_saved_states changed;
|
2019-12-01 02:19:58 +01:00
|
|
|
|
2019-01-28 05:44:52 +01:00
|
|
|
struct wined3d_stateblock_state stateblock_state;
|
2019-12-01 02:19:58 +01:00
|
|
|
struct wined3d_light_state light_state;
|
2005-07-05 16:05:18 +02:00
|
|
|
|
2007-07-31 15:04:56 +02:00
|
|
|
/* Contained state management */
|
|
|
|
DWORD contained_render_states[WINEHIGHEST_RENDER_STATE + 1];
|
|
|
|
unsigned int num_contained_render_states;
|
2019-02-22 01:53:56 +01:00
|
|
|
DWORD contained_transform_states[WINED3D_HIGHEST_TRANSFORM_STATE + 1];
|
2007-07-31 15:44:13 +02:00
|
|
|
unsigned int num_contained_transform_states;
|
2019-02-20 21:53:57 +01:00
|
|
|
struct StageState contained_tss_states[WINED3D_MAX_TEXTURES * (WINED3D_HIGHEST_TEXTURE_STATE + 1)];
|
2007-08-09 17:45:29 +02:00
|
|
|
unsigned int num_contained_tss_states;
|
2019-02-20 21:54:00 +01:00
|
|
|
struct StageState contained_sampler_states[WINED3D_MAX_COMBINED_SAMPLERS * WINED3D_HIGHEST_SAMPLER_STATE];
|
2007-08-03 20:23:52 +02:00
|
|
|
unsigned int num_contained_sampler_states;
|
2004-10-21 22:59:12 +02:00
|
|
|
};
|
|
|
|
|
2019-01-29 06:09:15 +01:00
|
|
|
void wined3d_stateblock_state_init(struct wined3d_stateblock_state *state,
|
|
|
|
const struct wined3d_device *device, DWORD flags) DECLSPEC_HIDDEN;
|
2019-01-28 05:44:52 +01:00
|
|
|
void wined3d_stateblock_state_cleanup(struct wined3d_stateblock_state *state) DECLSPEC_HIDDEN;
|
|
|
|
|
2019-02-12 17:45:05 +01:00
|
|
|
void wined3d_light_state_enable_light(struct wined3d_light_state *state, const struct wined3d_d3d_info *d3d_info,
|
2017-02-17 14:08:18 +01:00
|
|
|
struct wined3d_light_info *light_info, BOOL enable) DECLSPEC_HIDDEN;
|
2019-02-12 17:45:05 +01:00
|
|
|
struct wined3d_light_info *wined3d_light_state_get_light(const struct wined3d_light_state *state,
|
2017-02-17 14:08:17 +01:00
|
|
|
unsigned int idx) DECLSPEC_HIDDEN;
|
2019-02-12 17:45:06 +01:00
|
|
|
HRESULT wined3d_light_state_set_light(struct wined3d_light_state *state, DWORD light_idx,
|
|
|
|
const struct wined3d_light *params, struct wined3d_light_info **light_info) DECLSPEC_HIDDEN;
|
2019-02-12 17:45:05 +01:00
|
|
|
|
2017-05-21 17:53:42 +02:00
|
|
|
enum wined3d_cs_queue_id
|
|
|
|
{
|
|
|
|
WINED3D_CS_QUEUE_DEFAULT = 0,
|
|
|
|
WINED3D_CS_QUEUE_MAP,
|
|
|
|
WINED3D_CS_QUEUE_COUNT,
|
|
|
|
};
|
|
|
|
|
2016-05-22 18:23:07 +02:00
|
|
|
enum wined3d_push_constants
|
|
|
|
{
|
|
|
|
WINED3D_PUSH_CONSTANTS_VS_F,
|
|
|
|
WINED3D_PUSH_CONSTANTS_PS_F,
|
|
|
|
WINED3D_PUSH_CONSTANTS_VS_I,
|
|
|
|
WINED3D_PUSH_CONSTANTS_PS_I,
|
|
|
|
WINED3D_PUSH_CONSTANTS_VS_B,
|
|
|
|
WINED3D_PUSH_CONSTANTS_PS_B,
|
|
|
|
};
|
|
|
|
|
2017-04-13 00:11:01 +02:00
|
|
|
#define WINED3D_CS_QUERY_POLL_INTERVAL 10u
|
|
|
|
#define WINED3D_CS_QUEUE_SIZE 0x100000u
|
|
|
|
#define WINED3D_CS_SPIN_COUNT 10000000u
|
2022-03-15 17:09:22 +01:00
|
|
|
#define WINED3D_CS_QUEUE_MASK (WINED3D_CS_QUEUE_SIZE - 1)
|
2017-04-13 00:11:01 +02:00
|
|
|
|
|
|
|
struct wined3d_cs_queue
|
|
|
|
{
|
2022-03-09 11:48:29 +01:00
|
|
|
ULONG head, tail;
|
2017-04-13 00:11:01 +02:00
|
|
|
BYTE data[WINED3D_CS_QUEUE_SIZE];
|
|
|
|
};
|
|
|
|
|
2021-03-05 04:29:44 +01:00
|
|
|
struct wined3d_device_context_ops
|
2013-09-27 00:15:13 +02:00
|
|
|
{
|
2021-03-05 04:29:44 +01:00
|
|
|
void *(*require_space)(struct wined3d_device_context *context, size_t size, enum wined3d_cs_queue_id queue_id);
|
|
|
|
void (*submit)(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id);
|
|
|
|
void (*finish)(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id);
|
|
|
|
void (*push_constants)(struct wined3d_device_context *context, enum wined3d_push_constants p,
|
2016-05-22 18:23:07 +02:00
|
|
|
unsigned int start_idx, unsigned int count, const void *constants);
|
2021-10-12 23:15:43 +02:00
|
|
|
bool (*map_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource,
|
|
|
|
unsigned int sub_resource_idx, struct wined3d_map_desc *map_desc,
|
|
|
|
const struct wined3d_box *box, uint32_t flags);
|
2021-09-30 00:15:22 +02:00
|
|
|
bool (*unmap_upload_bo)(struct wined3d_device_context *context, struct wined3d_resource *resource,
|
2021-09-28 23:12:50 +02:00
|
|
|
unsigned int sub_resource_idx, struct wined3d_box *box, struct upload_bo *upload_bo);
|
2021-04-14 04:05:23 +02:00
|
|
|
void (*issue_query)(struct wined3d_device_context *context, struct wined3d_query *query, unsigned int flags);
|
2021-04-14 04:05:26 +02:00
|
|
|
void (*flush)(struct wined3d_device_context *context);
|
2022-03-11 13:02:53 +01:00
|
|
|
void (*reference_resource)(struct wined3d_device_context *context, struct wined3d_resource *resource);
|
|
|
|
void (*reference_command_list)(struct wined3d_device_context *context, struct wined3d_command_list *list);
|
2013-09-27 00:15:13 +02:00
|
|
|
};
|
|
|
|
|
2021-03-05 04:29:44 +01:00
|
|
|
struct wined3d_device_context
|
|
|
|
{
|
|
|
|
const struct wined3d_device_context_ops *ops;
|
2021-03-05 04:29:47 +01:00
|
|
|
struct wined3d_device *device;
|
2021-03-05 04:29:48 +01:00
|
|
|
struct wined3d_state *state;
|
2021-03-05 04:29:44 +01:00
|
|
|
};
|
|
|
|
|
2013-09-27 00:15:13 +02:00
|
|
|
struct wined3d_cs
|
|
|
|
{
|
2021-03-05 04:29:44 +01:00
|
|
|
struct wined3d_device_context c;
|
|
|
|
|
2013-09-30 09:40:39 +02:00
|
|
|
struct wined3d_state state;
|
2017-04-19 23:40:50 +02:00
|
|
|
HMODULE wined3d_module;
|
2017-04-13 00:11:01 +02:00
|
|
|
HANDLE thread;
|
|
|
|
DWORD thread_id;
|
2020-12-03 17:58:54 +01:00
|
|
|
BOOL serialize_commands;
|
2013-09-27 00:15:13 +02:00
|
|
|
|
2017-05-21 17:53:42 +02:00
|
|
|
struct wined3d_cs_queue queue[WINED3D_CS_QUEUE_COUNT];
|
2017-02-17 14:08:15 +01:00
|
|
|
size_t data_size, start, end;
|
2013-09-27 00:15:13 +02:00
|
|
|
void *data;
|
2017-04-13 00:11:01 +02:00
|
|
|
struct list query_poll_list;
|
2017-09-08 18:44:08 +02:00
|
|
|
BOOL queries_flushed;
|
2017-04-13 00:11:01 +02:00
|
|
|
|
|
|
|
HANDLE event;
|
|
|
|
BOOL waiting_for_event;
|
2017-05-02 11:35:30 +02:00
|
|
|
LONG pending_presents;
|
2013-09-27 00:15:13 +02:00
|
|
|
};
|
|
|
|
|
2021-11-01 09:07:18 +01:00
|
|
|
static inline void wined3d_device_context_lock(struct wined3d_device_context *context)
|
|
|
|
{
|
|
|
|
if (context == &context->device->cs->c)
|
|
|
|
wined3d_mutex_lock();
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_device_context_unlock(struct wined3d_device_context *context)
|
|
|
|
{
|
|
|
|
if (context == &context->device->cs->c)
|
|
|
|
wined3d_mutex_unlock();
|
|
|
|
}
|
|
|
|
|
2021-03-15 16:11:36 +01:00
|
|
|
struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device,
|
2021-03-15 16:11:37 +01:00
|
|
|
const enum wined3d_feature_level *levels, unsigned int level_count) DECLSPEC_HIDDEN;
|
2013-09-27 00:15:13 +02:00
|
|
|
void wined3d_cs_destroy(struct wined3d_cs *cs) DECLSPEC_HIDDEN;
|
2017-02-16 00:58:53 +01:00
|
|
|
void wined3d_cs_destroy_object(struct wined3d_cs *cs,
|
|
|
|
void (*callback)(void *object), void *object) DECLSPEC_HIDDEN;
|
2017-04-12 00:08:50 +02:00
|
|
|
void wined3d_cs_emit_add_dirty_texture_region(struct wined3d_cs *cs,
|
|
|
|
struct wined3d_texture *texture, unsigned int layer) DECLSPEC_HIDDEN;
|
2013-09-27 00:15:14 +02:00
|
|
|
void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects,
|
|
|
|
DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) DECLSPEC_HIDDEN;
|
2021-06-07 16:55:10 +02:00
|
|
|
void wined3d_device_context_emit_clear_uav(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value, bool fp) DECLSPEC_HIDDEN;
|
2016-08-26 13:51:18 +02:00
|
|
|
void wined3d_cs_emit_preload_resource(struct wined3d_cs *cs, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2018-03-22 08:48:31 +01:00
|
|
|
void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *swapchain, const RECT *src_rect,
|
|
|
|
const RECT *dst_rect, HWND dst_window_override, unsigned int swap_interval, DWORD flags) DECLSPEC_HIDDEN;
|
2015-04-09 22:48:11 +02:00
|
|
|
void wined3d_cs_emit_set_color_key(struct wined3d_cs *cs, struct wined3d_texture *texture,
|
|
|
|
WORD flags, const struct wined3d_color_key *color_key) DECLSPEC_HIDDEN;
|
2013-10-06 17:33:04 +02:00
|
|
|
void wined3d_cs_emit_set_render_state(struct wined3d_cs *cs,
|
|
|
|
enum wined3d_render_state state, DWORD value) DECLSPEC_HIDDEN;
|
2016-08-05 12:39:01 +02:00
|
|
|
void wined3d_cs_emit_unload_resource(struct wined3d_cs *cs, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
2017-02-16 00:58:53 +01:00
|
|
|
void wined3d_cs_init_object(struct wined3d_cs *cs,
|
|
|
|
void (*callback)(void *object), void *object) DECLSPEC_HIDDEN;
|
2022-02-18 06:01:37 +01:00
|
|
|
void wined3d_cs_map_bo_address(struct wined3d_cs *cs,
|
|
|
|
struct wined3d_bo_address *addr, size_t size, unsigned int flags) DECLSPEC_HIDDEN;
|
2013-09-27 00:15:13 +02:00
|
|
|
|
2018-11-29 14:33:47 +01:00
|
|
|
static inline void wined3d_cs_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id)
|
|
|
|
{
|
2021-03-05 04:29:44 +01:00
|
|
|
cs->c.ops->finish(&cs->c, queue_id);
|
2018-11-29 14:33:47 +01:00
|
|
|
}
|
|
|
|
|
2021-05-12 18:09:59 +02:00
|
|
|
static inline void wined3d_device_context_push_constants(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants)
|
2016-05-22 18:23:07 +02:00
|
|
|
{
|
2021-05-12 18:09:59 +02:00
|
|
|
context->ops->push_constants(context, p, start_idx, count, constants);
|
2016-05-22 18:23:07 +02:00
|
|
|
}
|
|
|
|
|
2021-04-07 03:56:41 +02:00
|
|
|
void wined3d_device_context_emit_blt_sub_resource(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_resource *dst_resource, unsigned int dst_sub_resource_idx, const struct wined3d_box *dst_box,
|
|
|
|
struct wined3d_resource *src_resource, unsigned int src_sub_resource_idx, const struct wined3d_box *src_box,
|
|
|
|
unsigned int flags, const struct wined3d_blt_fx *fx, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN;
|
2021-04-08 04:20:02 +02:00
|
|
|
void wined3d_device_context_emit_clear_rendertarget_view(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_rendertarget_view *view, const RECT *rect, unsigned int flags,
|
|
|
|
const struct wined3d_color *color, float depth, unsigned int stencil) DECLSPEC_HIDDEN;
|
2021-04-06 06:40:21 +02:00
|
|
|
void wined3d_device_context_emit_copy_uav_counter(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_buffer *dst_buffer, unsigned int offset,
|
|
|
|
struct wined3d_unordered_access_view *uav) DECLSPEC_HIDDEN;
|
2021-03-27 20:34:22 +01:00
|
|
|
void wined3d_device_context_emit_draw(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_primitive_type primitive_type, unsigned int patch_vertex_count, int base_vertex_idx,
|
|
|
|
unsigned int start_idx, unsigned int index_count, unsigned int start_instance, unsigned int instance_count,
|
|
|
|
bool indexed) DECLSPEC_HIDDEN;
|
2021-07-06 02:21:59 +02:00
|
|
|
void wined3d_device_context_emit_execute_command_list(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_command_list *list, bool restore_state) DECLSPEC_HIDDEN;
|
2021-04-08 04:19:59 +02:00
|
|
|
void wined3d_device_context_emit_generate_mipmaps(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_shader_resource_view *view) DECLSPEC_HIDDEN;
|
2021-07-01 00:38:33 +02:00
|
|
|
HRESULT wined3d_device_context_emit_map(struct wined3d_device_context *context,
|
2021-10-12 23:15:42 +02:00
|
|
|
struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_map_desc *map_desc,
|
2021-07-01 00:38:33 +02:00
|
|
|
const struct wined3d_box *box, unsigned int flags) DECLSPEC_HIDDEN;
|
2021-05-27 18:14:32 +02:00
|
|
|
void wined3d_device_context_emit_reset_state(struct wined3d_device_context *context, bool invalidate) DECLSPEC_HIDDEN;
|
2021-03-10 03:08:59 +01:00
|
|
|
void wined3d_device_context_emit_set_blend_state(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_blend_state *state, const struct wined3d_color *blend_factor,
|
|
|
|
unsigned int sample_mask) DECLSPEC_HIDDEN;
|
2021-05-13 17:47:49 +02:00
|
|
|
void wined3d_device_context_emit_set_clip_plane(struct wined3d_device_context *context, unsigned int plane_idx,
|
|
|
|
const struct wined3d_vec4 *plane) DECLSPEC_HIDDEN;
|
2021-07-06 04:40:52 +02:00
|
|
|
void wined3d_device_context_emit_set_constant_buffers(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_shader_type type, unsigned int start_idx, unsigned int count,
|
2021-07-15 07:18:35 +02:00
|
|
|
const struct wined3d_constant_buffer_state *buffers) DECLSPEC_HIDDEN;
|
2021-03-11 02:25:15 +01:00
|
|
|
void wined3d_device_context_emit_set_depth_stencil_state(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_depth_stencil_state *state, unsigned int stencil_ref) DECLSPEC_HIDDEN;
|
2021-03-19 05:16:34 +01:00
|
|
|
void wined3d_device_context_emit_set_depth_stencil_view(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_rendertarget_view *view) DECLSPEC_HIDDEN;
|
2021-05-12 18:09:58 +02:00
|
|
|
void wined3d_device_context_emit_set_feature_level(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_feature_level level) DECLSPEC_HIDDEN;
|
2021-03-23 16:39:16 +01:00
|
|
|
void wined3d_device_context_emit_set_index_buffer(struct wined3d_device_context *context, struct wined3d_buffer *buffer,
|
|
|
|
enum wined3d_format_id format_id, unsigned int offset) DECLSPEC_HIDDEN;
|
2021-05-13 17:47:52 +02:00
|
|
|
void wined3d_device_context_emit_set_light(struct wined3d_device_context *context,
|
|
|
|
const struct wined3d_light_info *light) DECLSPEC_HIDDEN;
|
2021-05-13 17:47:51 +02:00
|
|
|
void wined3d_device_context_emit_set_light_enable(struct wined3d_device_context *context, unsigned int idx,
|
|
|
|
BOOL enable) DECLSPEC_HIDDEN;
|
2021-05-13 17:47:50 +02:00
|
|
|
void wined3d_device_context_emit_set_material(struct wined3d_device_context *context,
|
|
|
|
const struct wined3d_material *material) DECLSPEC_HIDDEN;
|
2021-03-19 05:16:37 +01:00
|
|
|
void wined3d_device_context_emit_set_predication(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_query *predicate, BOOL value) DECLSPEC_HIDDEN;
|
2021-03-11 02:25:18 +01:00
|
|
|
void wined3d_device_context_emit_set_rasterizer_state(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_rasterizer_state *rasterizer_state) DECLSPEC_HIDDEN;
|
2021-05-16 23:36:36 +02:00
|
|
|
void wined3d_device_context_emit_set_render_state(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_render_state state, unsigned int value) DECLSPEC_HIDDEN;
|
2021-07-15 07:18:34 +02:00
|
|
|
void wined3d_device_context_emit_set_rendertarget_views(struct wined3d_device_context *context, unsigned int start_idx,
|
|
|
|
unsigned int count, struct wined3d_rendertarget_view *const *views) DECLSPEC_HIDDEN;
|
2021-07-06 04:40:54 +02:00
|
|
|
void wined3d_device_context_emit_set_samplers(struct wined3d_device_context *context, enum wined3d_shader_type type,
|
|
|
|
unsigned int start_idx, unsigned int count, struct wined3d_sampler *const *samplers) DECLSPEC_HIDDEN;
|
2021-05-12 18:10:02 +02:00
|
|
|
void wined3d_device_context_emit_set_sampler_state(struct wined3d_device_context *context, unsigned int sampler_idx,
|
|
|
|
enum wined3d_sampler_state state, unsigned int value) DECLSPEC_HIDDEN;
|
2021-03-16 06:42:21 +01:00
|
|
|
void wined3d_device_context_emit_set_scissor_rects(struct wined3d_device_context *context,
|
|
|
|
unsigned int rect_count, const RECT *rects) DECLSPEC_HIDDEN;
|
2021-03-05 04:29:49 +01:00
|
|
|
void wined3d_device_context_emit_set_shader(struct wined3d_device_context *context, enum wined3d_shader_type type,
|
|
|
|
struct wined3d_shader *shader) DECLSPEC_HIDDEN;
|
2021-07-06 04:40:53 +02:00
|
|
|
void wined3d_device_context_emit_set_shader_resource_views(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_shader_type type, unsigned int start_idx, unsigned int count,
|
|
|
|
struct wined3d_shader_resource_view *const *views) DECLSPEC_HIDDEN;
|
2021-07-15 07:18:29 +02:00
|
|
|
void wined3d_device_context_emit_set_stream_outputs(struct wined3d_device_context *context,
|
|
|
|
const struct wined3d_stream_output outputs[WINED3D_MAX_STREAM_OUTPUT_BUFFERS]) DECLSPEC_HIDDEN;
|
2021-07-15 07:18:32 +02:00
|
|
|
void wined3d_device_context_emit_set_stream_sources(struct wined3d_device_context *context,
|
|
|
|
unsigned int start_idx, unsigned int count, const struct wined3d_stream_state *streams) DECLSPEC_HIDDEN;
|
2021-05-12 18:10:00 +02:00
|
|
|
void wined3d_device_context_emit_set_texture(struct wined3d_device_context *context, unsigned int stage,
|
|
|
|
struct wined3d_texture *texture) DECLSPEC_HIDDEN;
|
2021-05-12 18:10:01 +02:00
|
|
|
void wined3d_device_context_emit_set_texture_state(struct wined3d_device_context *context, unsigned int stage,
|
|
|
|
enum wined3d_texture_stage_state state, unsigned int value) DECLSPEC_HIDDEN;
|
2021-05-13 17:47:48 +02:00
|
|
|
void wined3d_device_context_emit_set_transform(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_transform_state state, const struct wined3d_matrix *matrix) DECLSPEC_HIDDEN;
|
2021-07-07 03:43:43 +02:00
|
|
|
void wined3d_device_context_emit_set_unordered_access_views(struct wined3d_device_context *context,
|
|
|
|
enum wined3d_pipeline pipeline, unsigned int start_idx, unsigned int count,
|
|
|
|
struct wined3d_unordered_access_view *const *views, const unsigned int *initial_count) DECLSPEC_HIDDEN;
|
2021-03-25 00:19:25 +01:00
|
|
|
void wined3d_device_context_emit_set_vertex_declaration(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_vertex_declaration *declaration) DECLSPEC_HIDDEN;
|
2021-03-16 06:42:18 +01:00
|
|
|
void wined3d_device_context_emit_set_viewports(struct wined3d_device_context *context, unsigned int viewport_count,
|
|
|
|
const struct wined3d_viewport *viewports) DECLSPEC_HIDDEN;
|
2021-07-01 00:38:30 +02:00
|
|
|
void wined3d_device_context_emit_update_sub_resource(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box,
|
|
|
|
const void *data, unsigned int row_pitch, unsigned int slice_pitch) DECLSPEC_HIDDEN;
|
2021-07-01 00:38:33 +02:00
|
|
|
HRESULT wined3d_device_context_emit_unmap(struct wined3d_device_context *context,
|
|
|
|
struct wined3d_resource *resource, unsigned int sub_resource_idx) DECLSPEC_HIDDEN;
|
2021-03-05 04:29:49 +01:00
|
|
|
|
2022-03-11 13:02:53 +01:00
|
|
|
static inline void wined3d_resource_reference(struct wined3d_resource *resource)
|
2017-04-13 00:11:01 +02:00
|
|
|
{
|
|
|
|
const struct wined3d_cs *cs = resource->device->cs;
|
2022-03-09 11:48:30 +01:00
|
|
|
resource->access_time = cs->queue[WINED3D_CS_QUEUE_DEFAULT].head;
|
|
|
|
}
|
|
|
|
|
2022-03-11 13:02:54 +01:00
|
|
|
static inline BOOL wined3d_ge_wrap(ULONG x, ULONG y)
|
|
|
|
{
|
|
|
|
return (x - y) < UINT_MAX / 2;
|
|
|
|
}
|
|
|
|
C_ASSERT(WINED3D_CS_QUEUE_SIZE < UINT_MAX / 4);
|
|
|
|
|
2022-03-09 11:48:30 +01:00
|
|
|
static inline void wined3d_resource_wait_idle(const struct wined3d_resource *resource)
|
|
|
|
{
|
|
|
|
const struct wined3d_cs *cs = resource->device->cs;
|
|
|
|
ULONG access_time, tail, head;
|
2017-04-13 00:11:01 +02:00
|
|
|
|
|
|
|
if (!cs->thread || cs->thread_id == GetCurrentThreadId())
|
|
|
|
return;
|
|
|
|
|
2022-03-09 11:48:30 +01:00
|
|
|
access_time = resource->access_time;
|
|
|
|
head = cs->queue[WINED3D_CS_QUEUE_DEFAULT].head;
|
|
|
|
|
|
|
|
/* The basic idea is that a resource is busy if tail < access_time <= head.
|
|
|
|
* But we have to be careful about wrap-around of the head and tail. The
|
2022-03-11 13:02:54 +01:00
|
|
|
* wined3d_ge_wrap function considers x >= y if x - y is smaller than half the
|
2022-03-09 11:48:30 +01:00
|
|
|
* UINT range. Head is at most WINED3D_CS_QUEUE_SIZE ahead of tail, because
|
|
|
|
* otherwise the queue memory is considered full and queue_require_space
|
2022-03-11 13:02:54 +01:00
|
|
|
* stalls. Thus wined3d_ge_wrap(head, tail) is always true. The C_ASSERT above
|
|
|
|
* ensures this in case we decide to grow the queue size in the future.
|
2022-03-09 11:48:30 +01:00
|
|
|
*
|
|
|
|
* It is possible that a resource has not been used for a long time and is idle, but the head and
|
|
|
|
* tail wrapped around in such a way that the previously set access time falls between head and tail.
|
|
|
|
* In this case we will incorrectly wait for the resource. Because we use the entire 32 bits of the
|
|
|
|
* counters and not just the bits needed to address the actual queue memory, this should happen rarely.
|
|
|
|
* If it turns out to be a problem we can switch to 64 bit counters or attempt to somehow mark the
|
|
|
|
* access time of resources invalid. CS packets are at least 4 byte aligned, so we could use the lower
|
|
|
|
* 2 bits in access_time for such a marker.
|
|
|
|
*
|
|
|
|
* Note that the access time is set before the command is submitted, so we have to wait until the
|
|
|
|
* tail is bigger than access_time, not equal. */
|
|
|
|
|
2022-03-11 13:02:54 +01:00
|
|
|
if (!wined3d_ge_wrap(head, access_time))
|
2022-03-09 11:48:30 +01:00
|
|
|
return;
|
|
|
|
|
2022-03-11 13:02:55 +01:00
|
|
|
for (;;)
|
2022-03-09 11:48:30 +01:00
|
|
|
{
|
|
|
|
tail = *(volatile ULONG *)&cs->queue[WINED3D_CS_QUEUE_DEFAULT].tail;
|
|
|
|
if (head == tail) /* Queue empty. */
|
|
|
|
break;
|
|
|
|
|
2022-03-11 13:02:54 +01:00
|
|
|
if (!wined3d_ge_wrap(access_time, tail) && access_time != tail)
|
2022-03-09 11:48:30 +01:00
|
|
|
break;
|
|
|
|
|
2021-01-21 05:35:48 +01:00
|
|
|
YieldProcessor();
|
2022-03-09 11:48:30 +01:00
|
|
|
}
|
2017-04-13 00:11:01 +02:00
|
|
|
}
|
|
|
|
|
2009-03-06 14:56:23 +01:00
|
|
|
/* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other
|
|
|
|
* fixed function semantics as D3DCOLOR or FLOAT16 */
|
|
|
|
enum wined3d_buffer_conversion_type
|
|
|
|
{
|
|
|
|
CONV_NONE,
|
|
|
|
CONV_D3DCOLOR,
|
|
|
|
CONV_POSITIONT,
|
|
|
|
};
|
|
|
|
|
2009-02-23 09:16:02 +01:00
|
|
|
struct wined3d_buffer
|
|
|
|
{
|
2011-03-01 09:47:56 +01:00
|
|
|
struct wined3d_resource resource;
|
2019-08-08 00:47:07 +02:00
|
|
|
const struct wined3d_buffer_ops *buffer_ops;
|
2009-02-23 09:16:02 +01:00
|
|
|
|
2018-10-30 10:48:46 +01:00
|
|
|
unsigned int structure_byte_stride;
|
2009-03-06 14:56:23 +01:00
|
|
|
DWORD flags;
|
2017-04-07 14:45:13 +02:00
|
|
|
DWORD locations;
|
2014-01-15 22:02:15 +01:00
|
|
|
void *map_ptr;
|
2021-11-08 23:34:41 +01:00
|
|
|
struct wined3d_bo *buffer_object;
|
2021-10-20 07:12:00 +02:00
|
|
|
struct wined3d_bo_user bo_user;
|
2009-03-06 14:56:23 +01:00
|
|
|
|
2020-02-27 13:31:10 +01:00
|
|
|
struct wined3d_range *maps;
|
2017-02-28 14:42:36 +01:00
|
|
|
SIZE_T maps_size, modified_areas;
|
2009-03-06 14:56:23 +01:00
|
|
|
|
|
|
|
/* conversion stuff */
|
2009-12-24 16:35:07 +01:00
|
|
|
UINT decl_change_count, full_conversion_count;
|
2009-03-06 14:56:23 +01:00
|
|
|
UINT draw_count;
|
|
|
|
UINT stride; /* 0 if no conversion */
|
|
|
|
enum wined3d_buffer_conversion_type *conversion_map; /* NULL if no conversion */
|
2017-04-07 14:45:13 +02:00
|
|
|
UINT conversion_stride; /* 0 if no shifted conversion */
|
2009-02-23 09:16:02 +01:00
|
|
|
};
|
|
|
|
|
2011-03-01 09:47:56 +01:00
|
|
|
static inline struct wined3d_buffer *buffer_from_resource(struct wined3d_resource *resource)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(resource, struct wined3d_buffer, resource);
|
|
|
|
}
|
|
|
|
|
2019-08-11 11:35:08 +02:00
|
|
|
void wined3d_buffer_cleanup(struct wined3d_buffer *buffer) DECLSPEC_HIDDEN;
|
2020-04-30 15:48:38 +02:00
|
|
|
void wined3d_buffer_copy(struct wined3d_buffer *dst_buffer, unsigned int dst_offset,
|
|
|
|
struct wined3d_buffer *src_buffer, unsigned int src_offset, unsigned int size) DECLSPEC_HIDDEN;
|
2021-06-18 18:13:27 +02:00
|
|
|
void wined3d_buffer_copy_bo_address(struct wined3d_buffer *dst_buffer, struct wined3d_context *context,
|
|
|
|
unsigned int dst_offset, const struct wined3d_const_bo_address *src_addr, unsigned int size) DECLSPEC_HIDDEN;
|
2021-06-18 18:13:26 +02:00
|
|
|
DWORD wined3d_buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *context,
|
|
|
|
struct wined3d_bo_address *data) DECLSPEC_HIDDEN;
|
2016-10-16 21:46:48 +02:00
|
|
|
void wined3d_buffer_invalidate_location(struct wined3d_buffer *buffer, DWORD location) DECLSPEC_HIDDEN;
|
2016-10-16 21:46:46 +02:00
|
|
|
void wined3d_buffer_load(struct wined3d_buffer *buffer, struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state) DECLSPEC_HIDDEN;
|
2017-01-26 13:07:31 +01:00
|
|
|
BOOL wined3d_buffer_load_location(struct wined3d_buffer *buffer,
|
|
|
|
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
2016-10-16 21:46:47 +02:00
|
|
|
BYTE *wined3d_buffer_load_sysmem(struct wined3d_buffer *buffer, struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2020-04-30 15:48:38 +02:00
|
|
|
BOOL wined3d_buffer_prepare_location(struct wined3d_buffer *buffer,
|
|
|
|
struct wined3d_context *context, unsigned int location) DECLSPEC_HIDDEN;
|
2021-11-08 23:34:44 +01:00
|
|
|
void wined3d_buffer_update_sub_resource(struct wined3d_buffer *buffer, struct wined3d_context *context,
|
|
|
|
const struct upload_bo *upload_bo, unsigned int offset, unsigned int size) DECLSPEC_HIDDEN;
|
2009-02-23 09:16:02 +01:00
|
|
|
|
2019-08-11 11:35:08 +02:00
|
|
|
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) DECLSPEC_HIDDEN;
|
|
|
|
|
2018-10-26 15:13:07 +02:00
|
|
|
struct wined3d_buffer_gl
|
|
|
|
{
|
|
|
|
struct wined3d_buffer b;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_buffer_gl *wined3d_buffer_gl(struct wined3d_buffer *buffer)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(buffer, struct wined3d_buffer_gl, b);
|
|
|
|
}
|
|
|
|
|
2020-04-21 20:07:09 +02:00
|
|
|
static inline const struct wined3d_buffer_gl *wined3d_buffer_gl_const(const struct wined3d_buffer *buffer)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(buffer, struct wined3d_buffer_gl, b);
|
|
|
|
}
|
|
|
|
|
2022-02-18 06:01:37 +01:00
|
|
|
GLenum wined3d_buffer_gl_binding_from_bind_flags(const struct wined3d_gl_info *gl_info,
|
|
|
|
uint32_t bind_flags) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:08 +02:00
|
|
|
HRESULT wined3d_buffer_gl_init(struct wined3d_buffer_gl *buffer_gl, 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) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
struct wined3d_buffer_vk
|
|
|
|
{
|
|
|
|
struct wined3d_buffer b;
|
2020-01-24 17:02:03 +01:00
|
|
|
|
2020-05-12 22:42:59 +02:00
|
|
|
VkDescriptorBufferInfo buffer_info;
|
2021-01-19 14:34:57 +01:00
|
|
|
uint32_t bind_mask;
|
2019-08-11 11:35:08 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_buffer_vk *wined3d_buffer_vk(struct wined3d_buffer *buffer)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(buffer, struct wined3d_buffer_vk, b);
|
|
|
|
}
|
|
|
|
|
2021-01-19 14:34:57 +01:00
|
|
|
void wined3d_buffer_vk_barrier(struct wined3d_buffer_vk *buffer_vk,
|
|
|
|
struct wined3d_context_vk *context_vk, uint32_t bind_mask) DECLSPEC_HIDDEN;
|
2020-05-12 22:42:59 +02:00
|
|
|
const VkDescriptorBufferInfo *wined3d_buffer_vk_get_buffer_info(struct wined3d_buffer_vk *buffer_vk) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:08 +02:00
|
|
|
HRESULT wined3d_buffer_vk_init(struct wined3d_buffer_vk *buffer_vk, 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) DECLSPEC_HIDDEN;
|
|
|
|
|
2021-01-19 14:34:57 +01:00
|
|
|
static inline void wined3d_resource_vk_barrier(struct wined3d_resource *resource,
|
|
|
|
struct wined3d_context_vk *context_vk, uint32_t bind_mask)
|
|
|
|
{
|
|
|
|
if (resource->type == WINED3D_RTYPE_BUFFER)
|
|
|
|
wined3d_buffer_vk_barrier(wined3d_buffer_vk(buffer_from_resource(resource)), context_vk, bind_mask);
|
|
|
|
else
|
|
|
|
wined3d_texture_vk_barrier(wined3d_texture_vk(texture_from_resource(resource)), context_vk, bind_mask);
|
|
|
|
}
|
|
|
|
|
2009-02-24 07:43:02 +01:00
|
|
|
struct wined3d_rendertarget_view
|
|
|
|
{
|
|
|
|
LONG refcount;
|
|
|
|
|
2011-03-01 09:47:56 +01:00
|
|
|
struct wined3d_resource *resource;
|
2010-08-31 18:41:40 +02:00
|
|
|
void *parent;
|
2014-08-21 09:55:55 +02:00
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2014-08-21 09:55:53 +02:00
|
|
|
|
|
|
|
const struct wined3d_format *format;
|
2015-04-23 11:28:15 +02:00
|
|
|
unsigned int format_flags;
|
2014-08-21 09:55:53 +02:00
|
|
|
unsigned int sub_resource_idx;
|
2017-04-10 12:27:43 +02:00
|
|
|
unsigned int layer_count;
|
2014-08-21 09:55:53 +02:00
|
|
|
|
|
|
|
unsigned int width;
|
|
|
|
unsigned int height;
|
2017-04-10 12:27:40 +02:00
|
|
|
|
|
|
|
struct wined3d_view_desc desc;
|
2009-02-24 07:43:02 +01:00
|
|
|
};
|
|
|
|
|
2019-08-11 11:35:10 +02:00
|
|
|
void wined3d_rendertarget_view_cleanup(struct wined3d_rendertarget_view *view) DECLSPEC_HIDDEN;
|
2016-11-04 13:43:44 +01:00
|
|
|
void wined3d_rendertarget_view_get_drawable_size(const struct wined3d_rendertarget_view *view,
|
|
|
|
const struct wined3d_context *context, unsigned int *width, unsigned int *height) DECLSPEC_HIDDEN;
|
2017-04-18 11:24:14 +02:00
|
|
|
void wined3d_rendertarget_view_invalidate_location(struct wined3d_rendertarget_view *view,
|
|
|
|
DWORD location) DECLSPEC_HIDDEN;
|
2017-04-18 11:24:11 +02:00
|
|
|
void wined3d_rendertarget_view_load_location(struct wined3d_rendertarget_view *view,
|
|
|
|
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
2017-04-18 11:24:12 +02:00
|
|
|
void wined3d_rendertarget_view_prepare_location(struct wined3d_rendertarget_view *view,
|
|
|
|
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
|
2017-04-18 11:24:13 +02:00
|
|
|
void wined3d_rendertarget_view_validate_location(struct wined3d_rendertarget_view *view,
|
|
|
|
DWORD location) DECLSPEC_HIDDEN;
|
2016-11-04 13:43:44 +01:00
|
|
|
|
2019-08-11 11:35:10 +02:00
|
|
|
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) DECLSPEC_HIDDEN;
|
|
|
|
|
2018-11-13 14:10:16 +01:00
|
|
|
struct wined3d_rendertarget_view_gl
|
|
|
|
{
|
|
|
|
struct wined3d_rendertarget_view v;
|
|
|
|
struct wined3d_gl_view gl_view;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_rendertarget_view_gl *wined3d_rendertarget_view_gl(
|
|
|
|
struct wined3d_rendertarget_view *view)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(view, struct wined3d_rendertarget_view_gl, v);
|
|
|
|
}
|
|
|
|
|
2019-08-11 11:35:10 +02:00
|
|
|
HRESULT wined3d_rendertarget_view_gl_init(struct wined3d_rendertarget_view_gl *view_gl,
|
|
|
|
const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
struct wined3d_rendertarget_view_vk
|
|
|
|
{
|
|
|
|
struct wined3d_rendertarget_view v;
|
2020-04-27 17:48:46 +02:00
|
|
|
|
|
|
|
VkImageView vk_image_view;
|
|
|
|
uint64_t command_buffer_id;
|
2019-08-11 11:35:10 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_rendertarget_view_vk *wined3d_rendertarget_view_vk(
|
|
|
|
struct wined3d_rendertarget_view *view)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(view, struct wined3d_rendertarget_view_vk, v);
|
|
|
|
}
|
|
|
|
|
2021-01-19 14:34:57 +01:00
|
|
|
static inline void wined3d_rendertarget_view_vk_barrier(struct wined3d_rendertarget_view_vk *rtv_vk,
|
|
|
|
struct wined3d_context_vk *context_vk, uint32_t bind_mask)
|
|
|
|
{
|
|
|
|
wined3d_resource_vk_barrier(rtv_vk->v.resource, context_vk, bind_mask);
|
|
|
|
}
|
|
|
|
|
2020-05-18 17:52:49 +02:00
|
|
|
static inline VkImageView wined3d_rendertarget_view_vk_get_image_view(struct wined3d_rendertarget_view_vk *rtv_vk,
|
|
|
|
struct wined3d_context_vk *context_vk)
|
|
|
|
{
|
|
|
|
struct wined3d_texture_vk *texture_vk;
|
|
|
|
|
|
|
|
if (rtv_vk->vk_image_view)
|
|
|
|
return rtv_vk->vk_image_view;
|
|
|
|
|
|
|
|
texture_vk = wined3d_texture_vk(wined3d_texture_from_resource(rtv_vk->v.resource));
|
|
|
|
return wined3d_texture_vk_get_default_image_info(texture_vk, context_vk)->imageView;
|
|
|
|
}
|
|
|
|
|
2019-08-11 11:35:10 +02:00
|
|
|
HRESULT wined3d_rendertarget_view_vk_init(struct wined3d_rendertarget_view_vk *view_vk,
|
|
|
|
const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
|
|
|
|
2014-09-16 10:44:15 +02:00
|
|
|
struct wined3d_shader_resource_view
|
|
|
|
{
|
|
|
|
LONG refcount;
|
|
|
|
|
2014-12-01 08:45:43 +01:00
|
|
|
struct wined3d_resource *resource;
|
2014-09-16 10:44:15 +02:00
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2016-06-07 13:24:39 +02:00
|
|
|
|
2017-02-16 00:58:54 +01:00
|
|
|
const struct wined3d_format *format;
|
|
|
|
|
2017-04-10 12:27:40 +02:00
|
|
|
struct wined3d_view_desc desc;
|
2014-09-16 10:44:15 +02:00
|
|
|
};
|
|
|
|
|
2019-08-11 11:35:11 +02:00
|
|
|
void wined3d_shader_resource_view_cleanup(struct wined3d_shader_resource_view *view) DECLSPEC_HIDDEN;
|
2018-11-13 14:10:17 +01:00
|
|
|
|
|
|
|
struct wined3d_shader_resource_view_gl
|
|
|
|
{
|
|
|
|
struct wined3d_shader_resource_view v;
|
2020-12-04 15:45:33 +01:00
|
|
|
struct wined3d_bo_user bo_user;
|
2018-11-13 14:10:17 +01:00
|
|
|
struct wined3d_gl_view gl_view;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_shader_resource_view_gl *wined3d_shader_resource_view_gl(
|
|
|
|
struct wined3d_shader_resource_view *view)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(view, struct wined3d_shader_resource_view_gl, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wined3d_shader_resource_view_gl_bind(struct wined3d_shader_resource_view_gl *view_gl, unsigned int unit,
|
2019-08-15 11:49:59 +02:00
|
|
|
struct wined3d_sampler_gl *sampler_gl, struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2021-03-12 17:59:06 +01:00
|
|
|
void wined3d_shader_resource_view_gl_generate_mipmap(struct wined3d_shader_resource_view_gl *srv_gl,
|
|
|
|
struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:11 +02:00
|
|
|
HRESULT wined3d_shader_resource_view_gl_init(struct wined3d_shader_resource_view_gl *view_gl,
|
|
|
|
const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2020-12-04 15:45:33 +01:00
|
|
|
void wined3d_shader_resource_view_gl_update(struct wined3d_shader_resource_view_gl *srv_gl,
|
|
|
|
struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:11 +02:00
|
|
|
|
2020-04-30 15:48:37 +02:00
|
|
|
struct wined3d_view_vk
|
|
|
|
{
|
2020-12-04 15:45:32 +01:00
|
|
|
struct wined3d_bo_user bo_user;
|
2020-04-30 15:48:38 +02:00
|
|
|
union
|
|
|
|
{
|
|
|
|
VkBufferView vk_buffer_view;
|
|
|
|
VkDescriptorImageInfo vk_image_info;
|
|
|
|
} u;
|
2020-04-30 15:48:37 +02:00
|
|
|
uint64_t command_buffer_id;
|
|
|
|
};
|
|
|
|
|
2019-08-11 11:35:11 +02:00
|
|
|
struct wined3d_shader_resource_view_vk
|
|
|
|
{
|
|
|
|
struct wined3d_shader_resource_view v;
|
2020-04-30 15:48:37 +02:00
|
|
|
struct wined3d_view_vk view_vk;
|
2019-08-11 11:35:11 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_shader_resource_view_vk *wined3d_shader_resource_view_vk(
|
|
|
|
struct wined3d_shader_resource_view *view)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(view, struct wined3d_shader_resource_view_vk, v);
|
|
|
|
}
|
|
|
|
|
2021-01-19 14:34:57 +01:00
|
|
|
static inline void wined3d_shader_resource_view_vk_barrier(struct wined3d_shader_resource_view_vk *srv_vk,
|
|
|
|
struct wined3d_context_vk *context_vk, uint32_t bind_mask)
|
|
|
|
{
|
|
|
|
wined3d_resource_vk_barrier(srv_vk->v.resource, context_vk, bind_mask);
|
|
|
|
}
|
|
|
|
|
2021-03-12 17:59:06 +01:00
|
|
|
void wined3d_shader_resource_view_vk_generate_mipmap(struct wined3d_shader_resource_view_vk *srv_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:11 +02:00
|
|
|
HRESULT wined3d_shader_resource_view_vk_init(struct wined3d_shader_resource_view_vk *view_vk,
|
|
|
|
const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2020-05-13 16:46:50 +02:00
|
|
|
void wined3d_shader_resource_view_vk_update(struct wined3d_shader_resource_view_vk *view_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2016-06-07 13:24:39 +02:00
|
|
|
|
2016-06-24 11:46:02 +02:00
|
|
|
struct wined3d_unordered_access_view
|
|
|
|
{
|
|
|
|
LONG refcount;
|
|
|
|
|
|
|
|
struct wined3d_resource *resource;
|
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
|
|
|
|
2017-04-10 12:27:40 +02:00
|
|
|
const struct wined3d_format *format;
|
|
|
|
|
|
|
|
struct wined3d_view_desc desc;
|
2021-11-15 23:30:19 +01:00
|
|
|
struct wined3d_bo *counter_bo;
|
2016-06-24 11:46:02 +02:00
|
|
|
};
|
|
|
|
|
2019-08-11 11:35:12 +02:00
|
|
|
void wined3d_unordered_access_view_cleanup(struct wined3d_unordered_access_view *view) DECLSPEC_HIDDEN;
|
2017-08-04 19:53:48 +02:00
|
|
|
void wined3d_unordered_access_view_copy_counter(struct wined3d_unordered_access_view *view,
|
|
|
|
struct wined3d_buffer *buffer, unsigned int offset, struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2016-11-23 14:36:07 +01:00
|
|
|
void wined3d_unordered_access_view_invalidate_location(struct wined3d_unordered_access_view *view,
|
|
|
|
DWORD location) DECLSPEC_HIDDEN;
|
2017-08-04 19:53:50 +02:00
|
|
|
void wined3d_unordered_access_view_set_counter(struct wined3d_unordered_access_view *view,
|
|
|
|
unsigned int value) DECLSPEC_HIDDEN;
|
2016-11-23 14:36:07 +01:00
|
|
|
|
2018-11-13 14:10:18 +01:00
|
|
|
struct wined3d_unordered_access_view_gl
|
|
|
|
{
|
|
|
|
struct wined3d_unordered_access_view v;
|
2020-12-04 15:45:33 +01:00
|
|
|
struct wined3d_bo_user bo_user;
|
2018-11-13 14:10:18 +01:00
|
|
|
struct wined3d_gl_view gl_view;
|
2020-04-21 20:07:09 +02:00
|
|
|
struct wined3d_bo_gl counter_bo;
|
2018-11-13 14:10:18 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_unordered_access_view_gl *wined3d_unordered_access_view_gl(
|
|
|
|
struct wined3d_unordered_access_view *view)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(view, struct wined3d_unordered_access_view_gl, v);
|
|
|
|
}
|
|
|
|
|
2021-06-07 16:55:10 +02:00
|
|
|
void wined3d_unordered_access_view_gl_clear(struct wined3d_unordered_access_view_gl *view_gl,
|
|
|
|
const struct wined3d_uvec4 *clear_value, struct wined3d_context_gl *context_gl, bool fp) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:12 +02:00
|
|
|
HRESULT wined3d_unordered_access_view_gl_init(struct wined3d_unordered_access_view_gl *view_gl,
|
|
|
|
const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2020-12-04 15:45:33 +01:00
|
|
|
void wined3d_unordered_access_view_gl_update(struct wined3d_unordered_access_view_gl *uav_gl,
|
|
|
|
struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:12 +02:00
|
|
|
|
|
|
|
struct wined3d_unordered_access_view_vk
|
|
|
|
{
|
|
|
|
struct wined3d_unordered_access_view v;
|
2020-04-30 15:48:39 +02:00
|
|
|
struct wined3d_view_vk view_vk;
|
2020-04-30 15:48:41 +02:00
|
|
|
|
|
|
|
VkBufferView vk_counter_view;
|
|
|
|
struct wined3d_bo_vk counter_bo;
|
2019-08-11 11:35:12 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_unordered_access_view_vk *wined3d_unordered_access_view_vk(
|
|
|
|
struct wined3d_unordered_access_view *view)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(view, struct wined3d_unordered_access_view_vk, v);
|
|
|
|
}
|
|
|
|
|
2021-01-19 14:34:57 +01:00
|
|
|
static inline void wined3d_unordered_access_view_vk_barrier(struct wined3d_unordered_access_view_vk *uav_vk,
|
|
|
|
struct wined3d_context_vk *context_vk, uint32_t bind_mask)
|
|
|
|
{
|
|
|
|
wined3d_resource_vk_barrier(uav_vk->v.resource, context_vk, bind_mask);
|
|
|
|
}
|
|
|
|
|
2021-06-07 16:55:10 +02:00
|
|
|
void wined3d_unordered_access_view_vk_clear(struct wined3d_unordered_access_view_vk *view_vk,
|
|
|
|
const struct wined3d_uvec4 *clear_value, struct wined3d_context_vk *context_vk, bool fp) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:12 +02:00
|
|
|
HRESULT wined3d_unordered_access_view_vk_init(struct wined3d_unordered_access_view_vk *view_vk,
|
|
|
|
const struct wined3d_view_desc *desc, struct wined3d_resource *resource,
|
|
|
|
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2020-05-13 16:46:52 +02:00
|
|
|
void wined3d_unordered_access_view_vk_update(struct wined3d_unordered_access_view_vk *view_vk,
|
|
|
|
struct wined3d_context_vk *context_vk) DECLSPEC_HIDDEN;
|
2019-08-11 11:35:12 +02:00
|
|
|
|
2019-07-29 13:30:54 +02:00
|
|
|
struct wined3d_swapchain_state
|
|
|
|
{
|
2020-10-28 07:38:44 +01:00
|
|
|
struct wined3d *wined3d;
|
2019-07-29 13:30:55 +02:00
|
|
|
struct wined3d_swapchain_desc desc;
|
2020-10-09 11:56:53 +02:00
|
|
|
struct wined3d_swapchain_state_parent *parent;
|
2019-07-29 13:30:55 +02:00
|
|
|
|
2019-07-31 22:29:49 +02:00
|
|
|
struct wined3d_display_mode original_mode, d3d_mode;
|
|
|
|
RECT original_window_rect;
|
|
|
|
|
2019-07-29 13:30:54 +02:00
|
|
|
/* Window styles to restore when switching fullscreen mode. */
|
|
|
|
LONG style;
|
|
|
|
LONG exstyle;
|
2019-07-31 22:29:46 +02:00
|
|
|
HWND device_window;
|
2019-07-29 13:30:54 +02:00
|
|
|
};
|
|
|
|
|
2020-10-12 10:41:01 +02:00
|
|
|
void wined3d_swapchain_state_cleanup(struct wined3d_swapchain_state *state) DECLSPEC_HIDDEN;
|
2020-10-28 07:38:44 +01:00
|
|
|
void wined3d_swapchain_state_register(struct wined3d_swapchain_state *state) DECLSPEC_HIDDEN;
|
2019-07-31 22:29:45 +02:00
|
|
|
void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_state *state,
|
2019-07-29 13:30:54 +02:00
|
|
|
HWND window, const RECT *window_rect) DECLSPEC_HIDDEN;
|
|
|
|
HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state *state,
|
2020-05-07 09:52:12 +02:00
|
|
|
HWND window, int x, int y, int width, int height) DECLSPEC_HIDDEN;
|
2019-07-29 13:30:54 +02:00
|
|
|
|
2011-04-13 19:14:30 +02:00
|
|
|
struct wined3d_swapchain_ops
|
|
|
|
{
|
2016-03-17 16:30:03 +01:00
|
|
|
void (*swapchain_present)(struct wined3d_swapchain *swapchain,
|
2019-03-17 18:51:04 +01:00
|
|
|
const RECT *src_rect, const RECT *dst_rect, unsigned int swap_interval, DWORD flags);
|
2016-05-18 17:43:29 +02:00
|
|
|
void (*swapchain_frontbuffer_updated)(struct wined3d_swapchain *swapchain);
|
2011-04-13 19:14:30 +02:00
|
|
|
};
|
2005-06-23 13:05:24 +02:00
|
|
|
|
2011-04-13 19:14:31 +02:00
|
|
|
struct wined3d_swapchain
|
2005-06-23 13:05:24 +02:00
|
|
|
{
|
2011-04-13 19:14:31 +02:00
|
|
|
LONG ref;
|
2010-08-31 18:41:40 +02:00
|
|
|
void *parent;
|
2011-04-07 18:46:01 +02:00
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
2011-04-13 19:14:30 +02:00
|
|
|
const struct wined3d_swapchain_ops *swapchain_ops;
|
2011-05-16 23:01:23 +02:00
|
|
|
struct wined3d_device *device;
|
2005-06-23 13:05:24 +02:00
|
|
|
|
2014-08-20 13:20:03 +02:00
|
|
|
struct wined3d_texture **back_buffers;
|
2014-08-20 13:20:02 +02:00
|
|
|
struct wined3d_texture *front_buffer;
|
2011-11-21 18:48:41 +01:00
|
|
|
struct wined3d_gamma_ramp orig_gamma;
|
2021-09-10 21:32:48 +02:00
|
|
|
bool reapply_mode;
|
2010-08-30 20:29:49 +02:00
|
|
|
const struct wined3d_format *ds_format;
|
2014-06-28 10:49:32 +02:00
|
|
|
struct wined3d_palette *palette;
|
2016-03-01 19:31:48 +01:00
|
|
|
RECT front_buffer_update;
|
2018-03-22 08:48:32 +01:00
|
|
|
unsigned int swap_interval;
|
2018-04-30 20:15:01 +02:00
|
|
|
unsigned int max_frame_latency;
|
2005-06-23 13:05:24 +02:00
|
|
|
|
2010-05-21 12:45:40 +02:00
|
|
|
LONG prev_time, frames; /* Performance tracking */
|
2007-01-10 11:27:26 +01:00
|
|
|
|
2019-07-29 13:30:54 +02:00
|
|
|
struct wined3d_swapchain_state state;
|
2011-04-13 19:14:31 +02:00
|
|
|
HWND win_handle;
|
2009-12-14 20:49:52 +01:00
|
|
|
};
|
2005-06-23 13:05:24 +02:00
|
|
|
|
2014-11-13 20:39:25 +01:00
|
|
|
void wined3d_swapchain_activate(struct wined3d_swapchain *swapchain, BOOL activate) DECLSPEC_HIDDEN;
|
2019-08-08 00:47:04 +02:00
|
|
|
void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
2020-03-05 16:04:29 +01:00
|
|
|
struct wined3d_output * wined3d_swapchain_get_output(const struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
2011-08-23 20:08:08 +02:00
|
|
|
void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
|
2018-04-30 20:15:01 +02:00
|
|
|
void swapchain_set_max_frame_latency(struct wined3d_swapchain *swapchain,
|
|
|
|
const struct wined3d_device *device) DECLSPEC_HIDDEN;
|
2007-06-02 22:21:57 +02:00
|
|
|
|
2019-08-08 00:47:04 +02:00
|
|
|
HRESULT wined3d_swapchain_no3d_init(struct wined3d_swapchain *swapchain_no3d,
|
|
|
|
struct wined3d_device *device, struct wined3d_swapchain_desc *desc,
|
2020-10-09 11:56:53 +02:00
|
|
|
struct wined3d_swapchain_state_parent *state_parent, void *parent,
|
|
|
|
const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2019-08-08 00:47:04 +02:00
|
|
|
|
2019-08-13 10:31:37 +02:00
|
|
|
struct wined3d_swapchain_gl
|
|
|
|
{
|
|
|
|
struct wined3d_swapchain s;
|
2019-08-13 10:31:38 +02:00
|
|
|
|
2019-08-13 10:31:39 +02:00
|
|
|
struct wined3d_context_gl **contexts;
|
|
|
|
SIZE_T contexts_size;
|
|
|
|
SIZE_T context_count;
|
|
|
|
|
2019-08-13 10:31:38 +02:00
|
|
|
HDC backup_dc;
|
|
|
|
HWND backup_wnd;
|
2019-08-13 10:31:37 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_swapchain_gl *wined3d_swapchain_gl(struct wined3d_swapchain *swapchain)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(swapchain, struct wined3d_swapchain_gl, s);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wined3d_swapchain_gl_cleanup(struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:39 +02:00
|
|
|
void wined3d_swapchain_gl_destroy_contexts(struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:38 +02:00
|
|
|
HDC wined3d_swapchain_gl_get_backup_dc(struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:39 +02:00
|
|
|
struct wined3d_context_gl *wined3d_swapchain_gl_get_context(struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
|
2019-08-13 10:31:37 +02:00
|
|
|
HRESULT wined3d_swapchain_gl_init(struct wined3d_swapchain_gl *swapchain_gl,
|
2019-08-08 00:47:04 +02:00
|
|
|
struct wined3d_device *device, struct wined3d_swapchain_desc *desc,
|
2020-10-09 11:56:53 +02:00
|
|
|
struct wined3d_swapchain_state_parent *state_parent, void *parent,
|
|
|
|
const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2019-08-08 00:47:04 +02:00
|
|
|
|
2020-05-29 18:03:35 +02:00
|
|
|
struct wined3d_swapchain_vk
|
|
|
|
{
|
|
|
|
struct wined3d_swapchain s;
|
|
|
|
|
|
|
|
VkSwapchainKHR vk_swapchain;
|
|
|
|
VkSurfaceKHR vk_surface;
|
|
|
|
VkImage *vk_images;
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
VkSemaphore available;
|
|
|
|
VkSemaphore presentable;
|
|
|
|
uint64_t command_buffer_id;
|
|
|
|
} *vk_semaphores;
|
|
|
|
unsigned int current, image_count;
|
2021-03-17 13:35:19 +01:00
|
|
|
unsigned int width, height;
|
2020-05-29 18:03:35 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct wined3d_swapchain_vk *wined3d_swapchain_vk(struct wined3d_swapchain *swapchain)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(swapchain, struct wined3d_swapchain_vk, s);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wined3d_swapchain_vk_cleanup(struct wined3d_swapchain_vk *swapchain_vk) DECLSPEC_HIDDEN;
|
|
|
|
HRESULT wined3d_swapchain_vk_init(struct wined3d_swapchain_vk *swapchain_vk,
|
2019-08-08 00:47:04 +02:00
|
|
|
struct wined3d_device *device, struct wined3d_swapchain_desc *desc,
|
2020-10-09 11:56:53 +02:00
|
|
|
struct wined3d_swapchain_state_parent *state_parent, void *parent,
|
|
|
|
const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
2019-08-08 00:47:04 +02:00
|
|
|
|
2004-10-21 22:59:12 +02:00
|
|
|
/*****************************************************************************
|
2009-08-27 10:04:56 +02:00
|
|
|
* Utility function prototypes
|
2004-10-21 22:59:12 +02:00
|
|
|
*/
|
2004-12-13 14:35:38 +01:00
|
|
|
|
|
|
|
/* Trace routines */
|
2018-10-23 10:48:38 +02:00
|
|
|
const char *debug_bo_address(const struct wined3d_bo_address *address) DECLSPEC_HIDDEN;
|
2016-02-03 22:23:00 +01:00
|
|
|
const char *debug_box(const struct wined3d_box *box) DECLSPEC_HIDDEN;
|
2016-03-15 10:52:47 +01:00
|
|
|
const char *debug_color(const struct wined3d_color *color) DECLSPEC_HIDDEN;
|
2018-10-23 10:48:38 +02:00
|
|
|
const char *debug_const_bo_address(const struct wined3d_const_bo_address *address) DECLSPEC_HIDDEN;
|
2016-01-01 18:08:05 +01:00
|
|
|
const char *debug_d3dshaderinstructionhandler(enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx) DECLSPEC_HIDDEN;
|
2010-08-23 18:28:10 +02:00
|
|
|
const char *debug_d3dformat(enum wined3d_format_id format_id) DECLSPEC_HIDDEN;
|
2011-12-12 20:53:59 +01:00
|
|
|
const char *debug_d3ddevicetype(enum wined3d_device_type device_type) DECLSPEC_HIDDEN;
|
2012-01-17 21:13:36 +01:00
|
|
|
const char *debug_d3dresourcetype(enum wined3d_resource_type resource_type) DECLSPEC_HIDDEN;
|
2009-09-11 19:01:19 +02:00
|
|
|
const char *debug_d3dusage(DWORD usage) DECLSPEC_HIDDEN;
|
2012-01-18 21:46:21 +01:00
|
|
|
const char *debug_d3ddeclmethod(enum wined3d_decl_method method) DECLSPEC_HIDDEN;
|
2012-01-18 21:46:22 +01:00
|
|
|
const char *debug_d3ddeclusage(enum wined3d_decl_usage usage) DECLSPEC_HIDDEN;
|
2015-03-24 09:38:23 +01:00
|
|
|
const char *debug_d3dinput_classification(enum wined3d_input_classification classification) DECLSPEC_HIDDEN;
|
2011-12-11 21:43:32 +01:00
|
|
|
const char *debug_d3dprimitivetype(enum wined3d_primitive_type primitive_type) DECLSPEC_HIDDEN;
|
2011-12-19 21:00:09 +01:00
|
|
|
const char *debug_d3drenderstate(enum wined3d_render_state state) DECLSPEC_HIDDEN;
|
2012-01-08 21:14:59 +01:00
|
|
|
const char *debug_d3dsamplerstate(enum wined3d_sampler_state state) DECLSPEC_HIDDEN;
|
2010-01-28 23:40:23 +01:00
|
|
|
const char *debug_d3dstate(DWORD state) DECLSPEC_HIDDEN;
|
2012-01-12 21:43:12 +01:00
|
|
|
const char *debug_d3dtexturefiltertype(enum wined3d_texture_filter_type filter_type) DECLSPEC_HIDDEN;
|
2012-01-09 22:16:51 +01:00
|
|
|
const char *debug_d3dtexturestate(enum wined3d_texture_stage_state state) DECLSPEC_HIDDEN;
|
2016-04-25 17:19:33 +02:00
|
|
|
const char *debug_d3dtop(enum wined3d_texture_op d3dtop) DECLSPEC_HIDDEN;
|
2012-01-11 21:27:32 +01:00
|
|
|
const char *debug_d3dtstype(enum wined3d_transform_state tstype) DECLSPEC_HIDDEN;
|
2016-02-21 22:29:56 +01:00
|
|
|
const char *debug_fboattachment(GLenum attachment) DECLSPEC_HIDDEN;
|
2009-09-11 19:01:19 +02:00
|
|
|
const char *debug_fbostatus(GLenum status) DECLSPEC_HIDDEN;
|
|
|
|
const char *debug_glerror(GLenum error) DECLSPEC_HIDDEN;
|
2016-05-17 14:01:48 +02:00
|
|
|
const char *debug_ivec4(const struct wined3d_ivec4 *v) DECLSPEC_HIDDEN;
|
2017-05-12 15:09:20 +02:00
|
|
|
const char *debug_uvec4(const struct wined3d_uvec4 *v) DECLSPEC_HIDDEN;
|
2016-03-29 12:14:53 +02:00
|
|
|
const char *debug_shader_type(enum wined3d_shader_type shader_type) DECLSPEC_HIDDEN;
|
2016-04-25 17:19:33 +02:00
|
|
|
const char *debug_vec4(const struct wined3d_vec4 *v) DECLSPEC_HIDDEN;
|
2018-09-24 01:09:31 +02:00
|
|
|
const char *wined3d_debug_feature_level(enum wined3d_feature_level level) DECLSPEC_HIDDEN;
|
2009-09-11 19:01:19 +02:00
|
|
|
void dump_color_fixup_desc(struct color_fixup_desc fixup) DECLSPEC_HIDDEN;
|
2004-12-13 14:35:38 +01:00
|
|
|
|
2010-09-23 11:48:02 +02:00
|
|
|
BOOL is_invalid_op(const struct wined3d_state *state, int stage,
|
2012-01-10 20:37:01 +01:00
|
|
|
enum wined3d_texture_op op, DWORD arg1, DWORD arg2, DWORD arg3) DECLSPEC_HIDDEN;
|
2010-09-23 11:48:03 +02:00
|
|
|
void set_tex_op_nvrc(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state,
|
2012-01-10 20:37:01 +01:00
|
|
|
BOOL is_alpha, int stage, enum wined3d_texture_op op, DWORD arg1, DWORD arg2, DWORD arg3,
|
2010-09-23 11:48:03 +02:00
|
|
|
INT texture_idx, DWORD dst) DECLSPEC_HIDDEN;
|
2018-10-30 10:48:44 +01:00
|
|
|
void texture_activate_dimensions(struct wined3d_texture *texture,
|
2010-09-23 21:33:27 +02:00
|
|
|
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
|
2011-07-14 01:02:48 +02:00
|
|
|
void sampler_texdim(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void tex_alphaop(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void apply_pixelshader(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2015-04-09 22:48:16 +02:00
|
|
|
void state_alpha_test(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2011-07-14 01:02:48 +02:00
|
|
|
void state_fogcolor(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void state_fogdensity(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void state_fogstartend(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void state_fog_fragpart(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2015-04-14 11:16:22 +02:00
|
|
|
void state_nop(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2012-11-11 18:52:38 +01:00
|
|
|
void state_srgbwrite(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2009-09-11 19:01:19 +02:00
|
|
|
|
2013-05-29 09:45:35 +02:00
|
|
|
void state_clipping(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void clipplane(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void state_pointsprite_w(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
|
|
|
void state_pointsprite(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2015-11-12 23:06:50 +01:00
|
|
|
void state_shademode(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
2013-05-29 09:45:35 +02:00
|
|
|
|
2006-05-12 22:21:31 +02:00
|
|
|
/* Math utils */
|
2011-11-17 20:11:41 +01:00
|
|
|
void multiply_matrix(struct wined3d_matrix *dest, const struct wined3d_matrix *src1,
|
|
|
|
const struct wined3d_matrix *src2) DECLSPEC_HIDDEN;
|
2005-07-07 22:35:05 +02:00
|
|
|
|
2013-11-04 10:02:43 +01:00
|
|
|
void wined3d_release_dc(HWND window, HDC dc) DECLSPEC_HIDDEN;
|
|
|
|
|
2011-10-31 19:48:13 +01:00
|
|
|
struct wined3d_shader_lconst
|
|
|
|
{
|
2006-07-10 06:51:03 +02:00
|
|
|
struct list entry;
|
|
|
|
unsigned int idx;
|
|
|
|
DWORD value[4];
|
2011-10-31 19:48:13 +01:00
|
|
|
};
|
2006-07-10 06:51:03 +02:00
|
|
|
|
2011-05-10 21:18:48 +02:00
|
|
|
struct wined3d_shader_limits
|
|
|
|
{
|
2006-06-12 08:59:16 +02:00
|
|
|
unsigned int sampler;
|
2006-05-08 23:09:21 +02:00
|
|
|
unsigned int constant_int;
|
|
|
|
unsigned int constant_float;
|
|
|
|
unsigned int constant_bool;
|
2006-06-12 08:57:07 +02:00
|
|
|
unsigned int packed_output;
|
|
|
|
unsigned int packed_input;
|
2011-05-10 21:18:48 +02:00
|
|
|
};
|
2006-05-08 23:09:21 +02:00
|
|
|
|
2022-02-11 02:02:34 +01:00
|
|
|
#define wined3d_lock_init(lock, name) wined3d_lock_init_(lock, __FILE__ ": " name)
|
|
|
|
static inline void wined3d_lock_init_(CRITICAL_SECTION *lock, const char *name)
|
|
|
|
{
|
|
|
|
InitializeCriticalSection(lock);
|
|
|
|
if (lock->DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
|
|
|
|
lock->DebugInfo->Spare[0] = (DWORD_PTR)name;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_lock_cleanup(CRITICAL_SECTION *lock)
|
|
|
|
{
|
|
|
|
if (lock->DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
|
|
|
|
lock->DebugInfo->Spare[0] = 0;
|
|
|
|
DeleteCriticalSection(lock);
|
|
|
|
}
|
|
|
|
|
2007-11-28 12:55:11 +01:00
|
|
|
#ifdef __GNUC__
|
|
|
|
#define PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
|
|
|
|
#else
|
|
|
|
#define PRINTF_ATTR(fmt,args)
|
|
|
|
#endif
|
|
|
|
|
2015-04-24 22:25:43 +02:00
|
|
|
struct wined3d_string_buffer_list
|
|
|
|
{
|
|
|
|
struct list list;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct wined3d_string_buffer *string_buffer_get(struct wined3d_string_buffer_list *list) DECLSPEC_HIDDEN;
|
|
|
|
void string_buffer_sprintf(struct wined3d_string_buffer *buffer, const char *format, ...) PRINTF_ATTR(2, 3) DECLSPEC_HIDDEN;
|
|
|
|
void string_buffer_release(struct wined3d_string_buffer_list *list, struct wined3d_string_buffer *buffer) DECLSPEC_HIDDEN;
|
|
|
|
void string_buffer_list_init(struct wined3d_string_buffer_list *list) DECLSPEC_HIDDEN;
|
|
|
|
void string_buffer_list_cleanup(struct wined3d_string_buffer_list *list) DECLSPEC_HIDDEN;
|
|
|
|
|
2015-04-24 22:25:41 +02:00
|
|
|
int shader_addline(struct wined3d_string_buffer *buffer, const char *fmt, ...) PRINTF_ATTR(2,3) DECLSPEC_HIDDEN;
|
2015-04-29 23:34:28 +02:00
|
|
|
BOOL string_buffer_resize(struct wined3d_string_buffer *buffer, int rc) DECLSPEC_HIDDEN;
|
2015-04-24 22:25:41 +02:00
|
|
|
int shader_vaddline(struct wined3d_string_buffer *buffer, const char *fmt, va_list args) DECLSPEC_HIDDEN;
|
2006-05-08 21:44:25 +02:00
|
|
|
|
2017-05-18 15:19:58 +02:00
|
|
|
struct wined3d_shader_phase
|
|
|
|
{
|
|
|
|
const DWORD *start;
|
|
|
|
const DWORD *end;
|
2017-05-20 13:45:59 +02:00
|
|
|
unsigned int instance_count;
|
2017-05-20 13:46:03 +02:00
|
|
|
unsigned int temporary_count;
|
2017-05-18 15:19:58 +02:00
|
|
|
};
|
2006-07-07 08:27:38 +02:00
|
|
|
|
2011-03-29 19:21:50 +02:00
|
|
|
struct wined3d_vertex_shader
|
|
|
|
{
|
|
|
|
struct wined3d_shader_attribute attributes[MAX_ATTRIBS];
|
|
|
|
};
|
|
|
|
|
2017-05-16 15:00:24 +02:00
|
|
|
struct wined3d_hull_shader
|
|
|
|
{
|
2017-05-18 15:19:58 +02:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct wined3d_shader_phase *control_point;
|
|
|
|
unsigned int fork_count;
|
|
|
|
unsigned int join_count;
|
|
|
|
struct wined3d_shader_phase *fork;
|
|
|
|
SIZE_T fork_size;
|
|
|
|
struct wined3d_shader_phase *join;
|
|
|
|
SIZE_T join_size;
|
|
|
|
} phases;
|
2017-05-17 15:42:34 +02:00
|
|
|
unsigned int output_vertex_count;
|
2017-05-16 15:00:24 +02:00
|
|
|
enum wined3d_tessellator_output_primitive tessellator_output_primitive;
|
|
|
|
enum wined3d_tessellator_partitioning tessellator_partitioning;
|
|
|
|
};
|
|
|
|
|
2017-05-17 15:42:34 +02:00
|
|
|
struct wined3d_domain_shader
|
|
|
|
{
|
|
|
|
enum wined3d_tessellator_domain tessellator_domain;
|
|
|
|
};
|
|
|
|
|
2012-11-14 23:05:59 +01:00
|
|
|
struct wined3d_geometry_shader
|
|
|
|
{
|
|
|
|
enum wined3d_primitive_type input_type;
|
|
|
|
enum wined3d_primitive_type output_type;
|
2017-04-21 10:59:52 +02:00
|
|
|
unsigned int vertices_out;
|
|
|
|
unsigned int instance_count;
|
2017-03-28 12:00:06 +02:00
|
|
|
|
2020-10-07 14:57:10 +02:00
|
|
|
const struct wined3d_stream_output_desc *so_desc;
|
2012-11-14 23:05:59 +01:00
|
|
|
};
|
|
|
|
|
2011-03-29 19:21:52 +02:00
|
|
|
struct wined3d_pixel_shader
|
|
|
|
{
|
|
|
|
/* Pixel shader input semantics */
|
|
|
|
DWORD input_reg_map[MAX_REG_INPUT];
|
2017-02-21 00:40:06 +01:00
|
|
|
DWORD input_reg_used; /* MAX_REG_INPUT, 32 */
|
2011-03-29 19:21:52 +02:00
|
|
|
unsigned int declared_in_count;
|
|
|
|
|
|
|
|
/* Some information about the shader behavior */
|
|
|
|
BOOL color0_mov;
|
|
|
|
DWORD color0_reg;
|
2017-07-24 00:15:55 +02:00
|
|
|
|
|
|
|
BOOL force_early_depth_stencil;
|
2017-09-10 14:25:40 +02:00
|
|
|
enum wined3d_shader_register_type depth_output;
|
2017-10-18 00:25:09 +02:00
|
|
|
DWORD interpolation_mode[WINED3D_PACKED_INTERPOLATION_SIZE];
|
2011-03-29 19:21:52 +02:00
|
|
|
};
|
|
|
|
|
2017-02-09 12:00:34 +01:00
|
|
|
struct wined3d_compute_shader
|
|
|
|
{
|
|
|
|
struct wined3d_shader_thread_group_size thread_group_size;
|
|
|
|
};
|
|
|
|
|
2011-03-30 20:49:25 +02:00
|
|
|
struct wined3d_shader
|
|
|
|
{
|
2011-03-30 20:49:24 +02:00
|
|
|
LONG ref;
|
2014-10-16 01:32:20 +02:00
|
|
|
const struct wined3d_shader_limits *limits;
|
2018-10-05 14:10:17 +02:00
|
|
|
const DWORD *function;
|
|
|
|
unsigned int functionLength;
|
|
|
|
void *byte_code;
|
|
|
|
unsigned int byte_code_size;
|
2011-03-30 20:49:24 +02:00
|
|
|
BOOL load_local_constsF;
|
|
|
|
const struct wined3d_shader_frontend *frontend;
|
|
|
|
void *frontend_data;
|
|
|
|
void *backend_data;
|
|
|
|
|
|
|
|
void *parent;
|
|
|
|
const struct wined3d_parent_ops *parent_ops;
|
|
|
|
|
|
|
|
/* Programs this shader is linked with */
|
|
|
|
struct list linked_programs;
|
|
|
|
|
|
|
|
/* Immediate constants (override global ones) */
|
|
|
|
struct list constantsB;
|
|
|
|
struct list constantsF;
|
|
|
|
struct list constantsI;
|
|
|
|
struct wined3d_shader_reg_maps reg_maps;
|
2013-04-02 14:54:01 +02:00
|
|
|
BOOL lconst_inf_or_nan;
|
2011-03-30 20:49:24 +02:00
|
|
|
|
2015-03-23 09:17:13 +01:00
|
|
|
struct wined3d_shader_signature input_signature;
|
2015-03-23 09:17:12 +01:00
|
|
|
struct wined3d_shader_signature output_signature;
|
2017-05-12 15:09:17 +02:00
|
|
|
struct wined3d_shader_signature patch_constant_signature;
|
2011-03-30 20:49:24 +02:00
|
|
|
|
|
|
|
/* Pointer to the parent device */
|
2011-05-16 23:01:22 +02:00
|
|
|
struct wined3d_device *device;
|
2011-03-30 20:49:24 +02:00
|
|
|
struct list shader_list_entry;
|
2011-03-29 19:21:50 +02:00
|
|
|
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct wined3d_vertex_shader vs;
|
2017-05-16 15:00:24 +02:00
|
|
|
struct wined3d_hull_shader hs;
|
2017-05-17 15:42:34 +02:00
|
|
|
struct wined3d_domain_shader ds;
|
2012-11-14 23:05:59 +01:00
|
|
|
struct wined3d_geometry_shader gs;
|
2011-03-29 19:21:52 +02:00
|
|
|
struct wined3d_pixel_shader ps;
|
2017-02-09 12:00:34 +01:00
|
|
|
struct wined3d_compute_shader cs;
|
2011-03-29 19:21:50 +02:00
|
|
|
} u;
|
2011-03-30 20:49:25 +02:00
|
|
|
};
|
2006-03-30 19:14:31 +02:00
|
|
|
|
2019-07-03 16:56:40 +02:00
|
|
|
enum wined3d_shader_resource_type pixelshader_get_resource_type(const struct wined3d_shader_reg_maps *reg_maps,
|
2019-07-03 16:56:41 +02:00
|
|
|
unsigned int resource_idx, DWORD tex_types) DECLSPEC_HIDDEN;
|
2013-09-11 11:31:18 +02:00
|
|
|
void find_ps_compile_args(const struct wined3d_state *state, const struct wined3d_shader *shader,
|
|
|
|
BOOL position_transformed, struct ps_compile_args *args,
|
2015-10-06 14:24:21 +02:00
|
|
|
const struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2011-03-29 19:21:52 +02:00
|
|
|
|
2022-01-26 15:43:41 +01:00
|
|
|
bool vshader_get_input(const struct wined3d_shader *shader,
|
|
|
|
uint8_t usage_req, uint8_t usage_idx_req, unsigned int *regnum) DECLSPEC_HIDDEN;
|
2013-09-11 11:31:17 +02:00
|
|
|
void find_vs_compile_args(const struct wined3d_state *state, const struct wined3d_shader *shader,
|
2021-05-31 21:12:57 +02:00
|
|
|
struct vs_compile_args *args, const struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2011-03-29 19:21:50 +02:00
|
|
|
|
2017-05-16 15:00:24 +02:00
|
|
|
void find_ds_compile_args(const struct wined3d_state *state, const struct wined3d_shader *shader,
|
|
|
|
struct ds_compile_args *args, const struct wined3d_context *context) DECLSPEC_HIDDEN;
|
|
|
|
|
2016-05-20 19:55:56 +02:00
|
|
|
void find_gs_compile_args(const struct wined3d_state *state, const struct wined3d_shader *shader,
|
2017-10-18 00:25:08 +02:00
|
|
|
struct gs_compile_args *args, const struct wined3d_context *context) DECLSPEC_HIDDEN;
|
2016-05-20 19:55:56 +02:00
|
|
|
|
2015-04-24 22:25:41 +02:00
|
|
|
void string_buffer_clear(struct wined3d_string_buffer *buffer) DECLSPEC_HIDDEN;
|
|
|
|
BOOL string_buffer_init(struct wined3d_string_buffer *buffer) DECLSPEC_HIDDEN;
|
|
|
|
void string_buffer_free(struct wined3d_string_buffer *buffer) DECLSPEC_HIDDEN;
|
2010-12-06 20:33:02 +01:00
|
|
|
unsigned int shader_find_free_input_register(const struct wined3d_shader_reg_maps *reg_maps,
|
|
|
|
unsigned int max) DECLSPEC_HIDDEN;
|
2017-05-20 13:45:56 +02:00
|
|
|
HRESULT shader_generate_code(const struct wined3d_shader *shader, struct wined3d_string_buffer *buffer,
|
|
|
|
const struct wined3d_shader_reg_maps *reg_maps, void *backend_ctx,
|
|
|
|
const DWORD *start, const DWORD *end) DECLSPEC_HIDDEN;
|
2012-01-18 21:46:22 +01:00
|
|
|
BOOL shader_match_semantic(const char *semantic_name, enum wined3d_decl_usage usage) DECLSPEC_HIDDEN;
|
2006-05-10 04:33:24 +02:00
|
|
|
|
2009-05-07 16:36:08 +02:00
|
|
|
static inline BOOL shader_is_scalar(const struct wined3d_shader_register *reg)
|
2009-04-07 11:09:11 +02:00
|
|
|
{
|
2009-05-07 16:36:08 +02:00
|
|
|
switch (reg->type)
|
2009-04-07 11:09:11 +02:00
|
|
|
{
|
2007-04-12 23:55:31 +02:00
|
|
|
case WINED3DSPR_RASTOUT:
|
2009-04-07 11:09:11 +02:00
|
|
|
/* oFog & oPts */
|
2012-10-14 18:40:36 +02:00
|
|
|
if (reg->idx[0].offset)
|
|
|
|
return TRUE;
|
2007-04-12 23:55:31 +02:00
|
|
|
/* oPos */
|
|
|
|
return FALSE;
|
|
|
|
|
2018-05-17 13:17:37 +02:00
|
|
|
case WINED3DSPR_CONSTBOOL: /* b# */
|
2007-04-12 23:55:31 +02:00
|
|
|
case WINED3DSPR_DEPTHOUT: /* oDepth */
|
2017-09-10 14:25:39 +02:00
|
|
|
case WINED3DSPR_DEPTHOUTGE:
|
|
|
|
case WINED3DSPR_DEPTHOUTLE:
|
2007-04-12 23:55:31 +02:00
|
|
|
case WINED3DSPR_LOOP: /* aL */
|
2018-08-15 11:09:50 +02:00
|
|
|
case WINED3DSPR_OUTPOINTID:
|
2007-04-12 23:55:31 +02:00
|
|
|
case WINED3DSPR_PREDICATE: /* p0 */
|
2012-10-15 22:26:19 +02:00
|
|
|
case WINED3DSPR_PRIMID: /* primID */
|
2018-09-18 16:05:57 +02:00
|
|
|
case WINED3DSPR_COVERAGE: /* vCoverage */
|
2018-05-17 13:17:37 +02:00
|
|
|
case WINED3DSPR_SAMPLEMASK: /* oMask */
|
2007-04-12 23:55:31 +02:00
|
|
|
return TRUE;
|
|
|
|
|
2008-02-11 12:04:57 +01:00
|
|
|
case WINED3DSPR_MISCTYPE:
|
2012-10-14 18:40:36 +02:00
|
|
|
switch (reg->idx[0].offset)
|
2009-04-07 11:09:11 +02:00
|
|
|
{
|
2008-02-11 12:04:57 +01:00
|
|
|
case 0: /* vPos */
|
|
|
|
return FALSE;
|
|
|
|
case 1: /* vFace */
|
|
|
|
return TRUE;
|
|
|
|
default:
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2009-05-07 16:36:08 +02:00
|
|
|
case WINED3DSPR_IMMCONST:
|
2010-10-08 13:12:18 +02:00
|
|
|
return reg->immconst_type == WINED3D_IMMCONST_SCALAR;
|
2009-05-07 16:36:08 +02:00
|
|
|
|
2007-04-12 23:55:31 +02:00
|
|
|
default:
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-10-26 09:11:05 +02:00
|
|
|
static inline void shader_get_position_fixup(const struct wined3d_context *context,
|
2018-04-14 11:12:38 +02:00
|
|
|
const struct wined3d_state *state, unsigned int fixup_count, float *position_fixup)
|
2010-10-26 09:11:05 +02:00
|
|
|
{
|
2021-11-03 18:15:30 +01:00
|
|
|
float center_offset, x = 0.0f, y = 0.0f;
|
2018-04-14 11:12:38 +02:00
|
|
|
unsigned int i;
|
2015-03-30 09:17:05 +02:00
|
|
|
|
2021-11-03 18:15:28 +01:00
|
|
|
/* See get_projection_matrix() in utils.c for a discussion of the position fixup.
|
|
|
|
* This function here also applies to d3d10+ which does not need adjustment for
|
|
|
|
* integer pixel centers, but it may need the filling convention offset. */
|
2016-10-10 10:22:33 +02:00
|
|
|
if (context->d3d_info->wined3d_creation_flags & WINED3D_PIXEL_CENTER_INTEGER)
|
2021-11-03 18:15:28 +01:00
|
|
|
center_offset = 1.0f;
|
2015-03-30 09:17:05 +02:00
|
|
|
else
|
2021-11-03 18:15:28 +01:00
|
|
|
center_offset = 0.0f;
|
|
|
|
|
|
|
|
center_offset += context->d3d_info->filling_convention_offset;
|
2015-03-30 09:17:05 +02:00
|
|
|
|
2018-04-14 11:12:38 +02:00
|
|
|
for (i = 0; i < fixup_count; ++i)
|
2010-10-26 09:11:05 +02:00
|
|
|
{
|
2018-04-14 11:12:38 +02:00
|
|
|
position_fixup[4 * i ] = 1.0f;
|
|
|
|
position_fixup[4 * i + 1] = 1.0f;
|
2021-11-03 18:15:30 +01:00
|
|
|
if (!context->d3d_info->subpixel_viewport)
|
|
|
|
{
|
|
|
|
double dummy;
|
|
|
|
x = modf(state->viewports[i].x, &dummy) * 2.0f;
|
|
|
|
y = modf(state->viewports[i].y, &dummy) * 2.0f;
|
|
|
|
}
|
|
|
|
position_fixup[4 * i + 2] = (center_offset + x) / state->viewports[i].width;
|
|
|
|
position_fixup[4 * i + 3] = -(center_offset + y) / state->viewports[i].height;
|
2018-04-14 11:12:38 +02:00
|
|
|
|
|
|
|
if (context->render_offscreen)
|
|
|
|
{
|
|
|
|
position_fixup[4 * i + 1] *= -1.0f;
|
|
|
|
position_fixup[4 * i + 3] *= -1.0f;
|
|
|
|
}
|
2010-10-26 09:11:05 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-30 20:49:26 +02:00
|
|
|
static inline BOOL shader_constant_is_local(const struct wined3d_shader *shader, DWORD reg)
|
2011-03-30 20:49:24 +02:00
|
|
|
{
|
2011-10-31 19:48:13 +01:00
|
|
|
struct wined3d_shader_lconst *lconst;
|
2011-03-30 20:49:24 +02:00
|
|
|
|
|
|
|
if (shader->load_local_constsF)
|
|
|
|
return FALSE;
|
2008-02-14 14:15:49 +01:00
|
|
|
|
2011-10-31 19:48:13 +01:00
|
|
|
LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry)
|
2011-03-30 20:49:24 +02:00
|
|
|
{
|
|
|
|
if (lconst->idx == reg)
|
|
|
|
return TRUE;
|
2008-02-14 14:15:49 +01:00
|
|
|
}
|
|
|
|
|
2011-03-30 20:49:24 +02:00
|
|
|
return FALSE;
|
2008-02-14 14:15:49 +01:00
|
|
|
}
|
|
|
|
|
2015-03-18 21:07:34 +01:00
|
|
|
void get_identity_matrix(struct wined3d_matrix *mat) DECLSPEC_HIDDEN;
|
2015-03-18 21:07:35 +01:00
|
|
|
void get_modelview_matrix(const struct wined3d_context *context, const struct wined3d_state *state,
|
2015-07-03 01:04:13 +02:00
|
|
|
unsigned int index, struct wined3d_matrix *mat) DECLSPEC_HIDDEN;
|
2015-03-20 13:50:53 +01:00
|
|
|
void get_projection_matrix(const struct wined3d_context *context, const struct wined3d_state *state,
|
|
|
|
struct wined3d_matrix *mat) DECLSPEC_HIDDEN;
|
2015-03-20 13:50:55 +01:00
|
|
|
void get_texture_matrix(const struct wined3d_context *context, const struct wined3d_state *state,
|
|
|
|
unsigned int tex, struct wined3d_matrix *mat) DECLSPEC_HIDDEN;
|
2015-05-28 23:23:03 +02:00
|
|
|
void get_pointsize_minmax(const struct wined3d_context *context, const struct wined3d_state *state,
|
|
|
|
float *out_min, float *out_max) DECLSPEC_HIDDEN;
|
2015-05-28 23:23:04 +02:00
|
|
|
void get_pointsize(const struct wined3d_context *context, const struct wined3d_state *state,
|
|
|
|
float *out_pointsize, float *out_att) DECLSPEC_HIDDEN;
|
2015-06-05 00:37:32 +02:00
|
|
|
void get_fog_start_end(const struct wined3d_context *context, const struct wined3d_state *state,
|
|
|
|
float *start, float *end) DECLSPEC_HIDDEN;
|
2015-03-18 21:07:34 +01:00
|
|
|
|
2009-06-17 23:24:25 +02:00
|
|
|
/* Using additional shader constants (uniforms in GLSL / program environment
|
|
|
|
* or local parameters in ARB) is costly:
|
|
|
|
* ARB only knows float4 parameters and GLSL compiler are not really smart
|
|
|
|
* when it comes to efficiently pack float2 uniforms, so no space is wasted
|
|
|
|
* (in fact most compilers map a float2 to a full float4 uniform).
|
|
|
|
*
|
|
|
|
* For NP2 texcoord fixup we only need 2 floats (width and height) for each
|
|
|
|
* 2D texture used in the shader. We therefore pack fixup info for 2 textures
|
|
|
|
* into a single shader constant (uniform / program parameter).
|
|
|
|
*
|
|
|
|
* This structure is shared between the GLSL and the ARB backend.*/
|
|
|
|
struct ps_np2fixup_info {
|
2019-02-20 21:53:58 +01:00
|
|
|
unsigned char idx[WINED3D_MAX_FRAGMENT_SAMPLERS]; /* indices to the real constant */
|
2009-06-17 23:24:25 +02:00
|
|
|
WORD active; /* bitfield indicating if we can apply the fixup */
|
|
|
|
WORD num_consts;
|
|
|
|
};
|
|
|
|
|
2015-07-27 14:29:53 +02:00
|
|
|
void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLuint id, BOOL program) DECLSPEC_HIDDEN;
|
|
|
|
void shader_glsl_validate_link(const struct wined3d_gl_info *gl_info, GLuint program) DECLSPEC_HIDDEN;
|
|
|
|
|
2011-02-02 20:22:52 +01:00
|
|
|
struct wined3d_palette
|
|
|
|
{
|
|
|
|
LONG ref;
|
2011-05-16 23:01:23 +02:00
|
|
|
struct wined3d_device *device;
|
2006-04-21 00:00:30 +02:00
|
|
|
|
2014-05-02 13:43:24 +02:00
|
|
|
unsigned int size;
|
2014-05-07 18:02:14 +02:00
|
|
|
RGBQUAD colors[256];
|
2010-11-15 13:43:33 +01:00
|
|
|
DWORD flags;
|
2006-04-17 17:04:59 +02:00
|
|
|
};
|
|
|
|
|
2006-04-18 23:04:51 +02:00
|
|
|
/* DirectDraw utility functions */
|
2010-08-23 18:28:10 +02:00
|
|
|
extern enum wined3d_format_id pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN;
|
2006-04-18 23:04:51 +02:00
|
|
|
|
2006-06-21 10:36:14 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* Pixel format management
|
|
|
|
*/
|
2008-12-03 14:53:42 +01:00
|
|
|
|
2009-05-01 09:13:54 +02:00
|
|
|
/* WineD3D pixel format flags */
|
2010-04-29 00:09:00 +02:00
|
|
|
#define WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING 0x00000001
|
|
|
|
#define WINED3DFMT_FLAG_FILTERING 0x00000002
|
2020-09-29 23:06:16 +02:00
|
|
|
#define WINED3DFMT_FLAG_UNORDERED_ACCESS 0x00000004
|
2020-06-05 13:49:28 +02:00
|
|
|
#define WINED3DFMT_FLAG_DEPTH_STENCIL 0x00000008
|
2010-04-29 00:09:00 +02:00
|
|
|
#define WINED3DFMT_FLAG_RENDERTARGET 0x00000010
|
2017-09-08 18:44:07 +02:00
|
|
|
#define WINED3DFMT_FLAG_EXTENSION 0x00000020
|
2010-04-29 00:09:00 +02:00
|
|
|
#define WINED3DFMT_FLAG_FBO_ATTACHABLE 0x00000040
|
2010-07-26 12:06:32 +02:00
|
|
|
#define WINED3DFMT_FLAG_FBO_ATTACHABLE_SRGB 0x00000080
|
2018-08-06 23:04:58 +02:00
|
|
|
#define WINED3DFMT_FLAG_DECOMPRESS 0x00000100
|
2010-04-29 00:09:00 +02:00
|
|
|
#define WINED3DFMT_FLAG_FLOAT 0x00000200
|
|
|
|
#define WINED3DFMT_FLAG_BUMPMAP 0x00000400
|
2010-04-29 00:09:01 +02:00
|
|
|
#define WINED3DFMT_FLAG_SRGB_READ 0x00000800
|
2010-04-29 00:09:02 +02:00
|
|
|
#define WINED3DFMT_FLAG_SRGB_WRITE 0x00001000
|
2010-04-29 00:09:03 +02:00
|
|
|
#define WINED3DFMT_FLAG_VTF 0x00002000
|
2010-05-17 11:14:48 +02:00
|
|
|
#define WINED3DFMT_FLAG_SHADOW 0x00004000
|
2010-07-26 12:06:32 +02:00
|
|
|
#define WINED3DFMT_FLAG_COMPRESSED 0x00008000
|
2010-08-15 23:21:46 +02:00
|
|
|
#define WINED3DFMT_FLAG_BROKEN_PITCH 0x00010000
|
2011-10-14 16:27:53 +02:00
|
|
|
#define WINED3DFMT_FLAG_BLOCKS 0x00020000
|
2012-02-13 18:40:13 +01:00
|
|
|
#define WINED3DFMT_FLAG_HEIGHT_SCALE 0x00040000
|
2013-01-28 11:15:38 +01:00
|
|
|
#define WINED3DFMT_FLAG_TEXTURE 0x00080000
|
2013-09-06 00:11:12 +02:00
|
|
|
#define WINED3DFMT_FLAG_BLOCKS_NO_VERIFY 0x00100000
|
2016-01-26 00:34:00 +01:00
|
|
|
#define WINED3DFMT_FLAG_INTEGER 0x00200000
|
2018-02-13 15:54:13 +01:00
|
|
|
#define WINED3DFMT_FLAG_GEN_MIPMAP 0x00400000
|
2018-09-09 22:32:47 +02:00
|
|
|
#define WINED3DFMT_FLAG_NORMALISED 0x00800000
|
2018-09-13 23:07:49 +02:00
|
|
|
#define WINED3DFMT_FLAG_VERTEX_ATTRIBUTE 0x01000000
|
2018-09-22 01:26:08 +02:00
|
|
|
#define WINED3DFMT_FLAG_BLIT 0x02000000
|
2018-11-18 19:39:16 +01:00
|
|
|
#define WINED3DFMT_FLAG_MAPPABLE 0x04000000
|
2021-02-10 00:24:02 +01:00
|
|
|
#define WINED3DFMT_FLAG_CAST_TO_BLOCK 0x08000000
|
2022-01-21 18:52:18 +01:00
|
|
|
#define WINED3DFMT_FLAG_INDEX_BUFFER 0x10000000
|
2009-05-01 09:13:54 +02:00
|
|
|
|
2012-03-07 18:38:52 +01:00
|
|
|
struct wined3d_rational
|
|
|
|
{
|
|
|
|
UINT numerator;
|
|
|
|
UINT denominator;
|
|
|
|
};
|
|
|
|
|
2014-10-08 08:47:18 +02:00
|
|
|
struct wined3d_color_key_conversion
|
|
|
|
{
|
|
|
|
enum wined3d_format_id dst_format;
|
2018-03-30 14:51:12 +02:00
|
|
|
void (*convert)(const BYTE *src, unsigned int src_pitch, BYTE *dst, unsigned int dst_pitch,
|
|
|
|
unsigned int width, unsigned int height, const struct wined3d_color_key *colour_key);
|
2014-10-08 08:47:18 +02:00
|
|
|
};
|
|
|
|
|
2021-10-06 10:50:11 +02:00
|
|
|
enum wined3d_channel_type
|
|
|
|
{
|
|
|
|
WINED3D_CHANNEL_TYPE_NONE,
|
|
|
|
WINED3D_CHANNEL_TYPE_UNORM,
|
|
|
|
WINED3D_CHANNEL_TYPE_SNORM,
|
|
|
|
WINED3D_CHANNEL_TYPE_UINT,
|
|
|
|
WINED3D_CHANNEL_TYPE_SINT,
|
|
|
|
WINED3D_CHANNEL_TYPE_FLOAT,
|
|
|
|
WINED3D_CHANNEL_TYPE_DEPTH,
|
|
|
|
WINED3D_CHANNEL_TYPE_STENCIL,
|
|
|
|
WINED3D_CHANNEL_TYPE_UNUSED,
|
|
|
|
};
|
|
|
|
|
2010-08-30 20:29:49 +02:00
|
|
|
struct wined3d_format
|
2008-12-03 14:53:42 +01:00
|
|
|
{
|
2010-08-25 20:46:51 +02:00
|
|
|
enum wined3d_format_id id;
|
|
|
|
|
2016-04-14 19:32:46 +02:00
|
|
|
D3DDDIFORMAT ddi_format;
|
2018-09-09 22:32:48 +02:00
|
|
|
unsigned int component_count;
|
2012-08-15 00:38:25 +02:00
|
|
|
DWORD red_size;
|
|
|
|
DWORD green_size;
|
|
|
|
DWORD blue_size;
|
|
|
|
DWORD alpha_size;
|
|
|
|
DWORD red_offset;
|
|
|
|
DWORD green_offset;
|
|
|
|
DWORD blue_offset;
|
|
|
|
DWORD alpha_offset;
|
2009-03-13 10:44:17 +01:00
|
|
|
UINT byte_count;
|
2011-05-12 21:05:29 +02:00
|
|
|
BYTE depth_size;
|
|
|
|
BYTE stencil_size;
|
2009-03-13 10:44:17 +01:00
|
|
|
|
2009-06-10 09:44:04 +02:00
|
|
|
UINT block_width;
|
|
|
|
UINT block_height;
|
|
|
|
UINT block_byte_count;
|
|
|
|
|
2009-03-27 10:25:56 +01:00
|
|
|
enum wined3d_ffp_emit_idx emit_idx;
|
|
|
|
|
2010-04-08 22:49:45 +02:00
|
|
|
UINT conv_byte_count;
|
2016-01-28 00:15:43 +01:00
|
|
|
DWORD multisample_types;
|
2015-04-24 10:33:47 +02:00
|
|
|
unsigned int flags[WINED3D_GL_RES_TYPE_COUNT];
|
2017-12-06 11:00:32 +01:00
|
|
|
float depth_bias_scale;
|
2012-03-07 18:38:52 +01:00
|
|
|
struct wined3d_rational height_scale;
|
2008-12-03 14:53:43 +01:00
|
|
|
struct color_fixup_desc color_fixup;
|
2018-01-05 18:53:12 +01:00
|
|
|
void (*upload)(const BYTE *src, BYTE *dst, unsigned int src_row_pitch, unsigned int src_slice_pitch,
|
|
|
|
unsigned int dst_row_pitch, unsigned dst_slice_pitch,
|
|
|
|
unsigned int width, unsigned int height, unsigned int depth);
|
|
|
|
void (*download)(const BYTE *src, BYTE *dst, unsigned int src_row_pitch, unsigned int src_slice_pitch,
|
|
|
|
unsigned int dst_row_pitch, unsigned dst_slice_pitch,
|
|
|
|
unsigned int width, unsigned int height, unsigned int depth);
|
2018-08-06 23:04:58 +02:00
|
|
|
void (*decompress)(const BYTE *src, BYTE *dst, unsigned int src_row_pitch, unsigned int src_slice_pitch,
|
|
|
|
unsigned int dst_row_pitch, unsigned dst_slice_pitch,
|
|
|
|
unsigned int width, unsigned int height, unsigned int depth);
|
2016-06-07 13:24:37 +02:00
|
|
|
|
2016-06-07 13:24:39 +02:00
|
|
|
enum wined3d_format_id typeless_id;
|
2008-12-03 14:53:42 +01:00
|
|
|
};
|
|
|
|
|
2018-08-23 14:34:03 +02:00
|
|
|
const struct wined3d_format *wined3d_get_format(const struct wined3d_adapter *adapter,
|
2018-10-31 10:31:50 +01:00
|
|
|
enum wined3d_format_id format_id, unsigned int bind_flags) DECLSPEC_HIDDEN;
|
2021-10-06 10:50:11 +02:00
|
|
|
enum wined3d_format_id wined3d_get_typed_format_id(const struct wined3d_adapter *adapter,
|
|
|
|
const struct wined3d_format *format, enum wined3d_channel_type channel_type) DECLSPEC_HIDDEN;
|
2016-02-09 21:29:56 +01:00
|
|
|
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) DECLSPEC_HIDDEN;
|
2010-08-30 20:29:49 +02:00
|
|
|
UINT wined3d_format_calculate_size(const struct wined3d_format *format,
|
2013-08-21 15:15:47 +02:00
|
|
|
UINT alignment, UINT width, UINT height, UINT depth) DECLSPEC_HIDDEN;
|
2016-02-19 17:28:43 +01:00
|
|
|
DWORD wined3d_format_convert_from_float(const struct wined3d_format *format,
|
2011-11-15 21:18:27 +01:00
|
|
|
const struct wined3d_color *color) DECLSPEC_HIDDEN;
|
2020-04-20 21:00:24 +02:00
|
|
|
void wined3d_format_copy_data(const struct wined3d_format *format, const uint8_t *src,
|
|
|
|
unsigned int src_row_pitch, unsigned int src_slice_pitch, uint8_t *dst, unsigned int dst_row_pitch,
|
|
|
|
unsigned int dst_slice_pitch, unsigned int w, unsigned int h, unsigned int d) DECLSPEC_HIDDEN;
|
2015-08-23 21:59:33 +02:00
|
|
|
void wined3d_format_get_float_color_key(const struct wined3d_format *format,
|
|
|
|
const struct wined3d_color_key *key, struct wined3d_color *float_colors) DECLSPEC_HIDDEN;
|
2017-11-06 10:55:21 +01:00
|
|
|
BOOL wined3d_format_is_depth_view(enum wined3d_format_id resource_format_id,
|
|
|
|
enum wined3d_format_id view_format_id) DECLSPEC_HIDDEN;
|
2014-10-08 08:47:18 +02:00
|
|
|
const struct wined3d_color_key_conversion * wined3d_format_get_color_key_conversion(
|
|
|
|
const struct wined3d_texture *texture, BOOL need_alpha_ck) DECLSPEC_HIDDEN;
|
2021-06-07 16:55:09 +02:00
|
|
|
uint32_t wined3d_format_pack(const struct wined3d_format *format, const struct wined3d_uvec4 *value) DECLSPEC_HIDDEN;
|
2017-11-27 20:17:32 +01:00
|
|
|
BOOL wined3d_formats_are_srgb_variants(enum wined3d_format_id format1,
|
|
|
|
enum wined3d_format_id format2) DECLSPEC_HIDDEN;
|
2007-03-12 23:22:00 +01:00
|
|
|
|
2018-09-21 14:41:50 +02:00
|
|
|
struct wined3d_format_gl
|
|
|
|
{
|
|
|
|
struct wined3d_format f;
|
|
|
|
|
|
|
|
GLenum vtx_type;
|
|
|
|
GLint vtx_format;
|
2018-09-21 14:41:51 +02:00
|
|
|
|
2018-09-22 01:26:09 +02:00
|
|
|
GLint internal;
|
|
|
|
GLint srgb_internal;
|
|
|
|
GLint rt_internal;
|
|
|
|
GLint format;
|
|
|
|
GLint type;
|
|
|
|
|
2018-09-21 14:41:51 +02:00
|
|
|
GLenum view_class;
|
2018-09-21 14:41:50 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline const struct wined3d_format_gl *wined3d_format_gl(const struct wined3d_format *format)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(format, struct wined3d_format_gl, f);
|
|
|
|
}
|
|
|
|
|
2019-04-05 10:52:09 +02:00
|
|
|
struct wined3d_format_vk
|
|
|
|
{
|
|
|
|
struct wined3d_format f;
|
|
|
|
|
|
|
|
VkFormat vk_format;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline const struct wined3d_format_vk *wined3d_format_vk(const struct wined3d_format *format)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(format, struct wined3d_format_vk, f);
|
|
|
|
}
|
|
|
|
|
2017-02-28 14:42:36 +01:00
|
|
|
BOOL wined3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size) DECLSPEC_HIDDEN;
|
|
|
|
|
2016-06-16 11:59:37 +02:00
|
|
|
static inline BOOL wined3d_format_is_typeless(const struct wined3d_format *format)
|
|
|
|
{
|
|
|
|
return format->id == format->typeless_id && format->id != WINED3DFMT_UNKNOWN;
|
|
|
|
}
|
|
|
|
|
2010-09-28 12:00:23 +02:00
|
|
|
static inline BOOL use_vs(const struct wined3d_state *state)
|
2008-12-30 14:56:49 +01:00
|
|
|
{
|
2013-09-03 09:47:21 +02:00
|
|
|
/* Check state->vertex_declaration to allow this to be used before the
|
|
|
|
* stream info is validated, for example in device_update_tex_unit_map(). */
|
2016-05-24 10:17:49 +02:00
|
|
|
return state->shader[WINED3D_SHADER_TYPE_VERTEX]
|
|
|
|
&& (!state->vertex_declaration || !state->vertex_declaration->position_transformed);
|
2007-03-12 23:22:00 +01:00
|
|
|
}
|
|
|
|
|
2010-09-28 12:00:24 +02:00
|
|
|
static inline BOOL use_ps(const struct wined3d_state *state)
|
2008-12-30 14:56:49 +01:00
|
|
|
{
|
2013-10-09 22:57:45 +02:00
|
|
|
return !!state->shader[WINED3D_SHADER_TYPE_PIXEL];
|
2007-03-12 23:22:00 +01:00
|
|
|
}
|
|
|
|
|
2020-04-17 17:51:08 +02:00
|
|
|
static inline BOOL use_transform_feedback(const struct wined3d_state *state)
|
|
|
|
{
|
|
|
|
const struct wined3d_shader *shader;
|
|
|
|
|
|
|
|
if (!(shader = state->shader[WINED3D_SHADER_TYPE_GEOMETRY]))
|
|
|
|
return FALSE;
|
2020-10-07 14:57:10 +02:00
|
|
|
return !!shader->u.gs.so_desc;
|
2020-04-17 17:51:08 +02:00
|
|
|
}
|
|
|
|
|
2011-07-14 01:02:48 +02:00
|
|
|
static inline void context_apply_state(struct wined3d_context *context,
|
|
|
|
const struct wined3d_state *state, DWORD state_id)
|
|
|
|
{
|
2019-03-03 19:55:27 +01:00
|
|
|
const struct wined3d_state_entry *state_table = context->state_table;
|
|
|
|
unsigned int rep = state_table[state_id].representative;
|
2011-07-24 21:48:11 +02:00
|
|
|
state_table[rep].apply(context, state, rep);
|
2011-07-14 01:02:48 +02:00
|
|
|
}
|
|
|
|
|
2019-02-20 11:07:11 +01:00
|
|
|
static inline BOOL is_srgb_enabled(const DWORD *sampler_states)
|
|
|
|
{
|
|
|
|
/* Only use the LSB of the WINED3D_SAMP_SRGB_TEXTURE value. This matches
|
|
|
|
* the behaviour of the AMD Windows driver.
|
|
|
|
*
|
|
|
|
* Might & Magic: Heroes VI - Shades of Darkness sets
|
|
|
|
* WINED3D_SAMP_SRGB_TEXTURE to a large value that looks like a
|
|
|
|
* pointer—presumably by accident—and expects sRGB decoding to be
|
|
|
|
* disabled. */
|
|
|
|
return sampler_states[WINED3D_SAMP_SRGB_TEXTURE] & 0x1;
|
|
|
|
}
|
|
|
|
|
2017-01-27 19:52:55 +01:00
|
|
|
static inline BOOL needs_separate_srgb_gl_texture(const struct wined3d_context *context,
|
|
|
|
const struct wined3d_texture *texture)
|
|
|
|
{
|
2019-09-20 15:38:27 +02:00
|
|
|
if (!(context->d3d_info->wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if (!context->d3d_info->srgb_read_control
|
|
|
|
&& (texture->resource.bind_flags & WINED3D_BIND_SHADER_RESOURCE)
|
|
|
|
&& (texture->resource.format_flags & WINED3DFMT_FLAG_SRGB_READ))
|
|
|
|
return TRUE;
|
2017-01-27 19:52:55 +01:00
|
|
|
|
2019-09-20 15:38:27 +02:00
|
|
|
if (!context->d3d_info->srgb_write_control
|
|
|
|
&& (texture->resource.bind_flags & WINED3D_BIND_RENDER_TARGET)
|
|
|
|
&& (texture->resource.format_flags & WINED3DFMT_FLAG_SRGB_WRITE))
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
return FALSE;
|
2017-01-27 19:52:55 +01:00
|
|
|
}
|
|
|
|
|
2020-03-18 14:01:25 +01:00
|
|
|
static inline BOOL needs_srgb_write(const struct wined3d_d3d_info *d3d_info,
|
2016-02-08 00:04:37 +01:00
|
|
|
const struct wined3d_state *state, const struct wined3d_fb_state *fb)
|
|
|
|
{
|
2020-03-18 14:01:25 +01:00
|
|
|
return (!(d3d_info->wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL)
|
2016-02-08 00:04:37 +01:00
|
|
|
|| state->render_states[WINED3D_RS_SRGBWRITEENABLE])
|
2016-03-22 13:41:48 +01:00
|
|
|
&& fb->render_targets[0] && fb->render_targets[0]->format_flags & WINED3DFMT_FLAG_SRGB_WRITE;
|
2016-02-08 00:04:37 +01:00
|
|
|
}
|
|
|
|
|
2018-10-30 10:48:43 +01:00
|
|
|
static inline GLuint wined3d_texture_gl_get_texture_name(const struct wined3d_texture_gl *texture_gl,
|
2017-01-27 19:52:55 +01:00
|
|
|
const struct wined3d_context *context, BOOL srgb)
|
|
|
|
{
|
2018-10-30 10:48:43 +01:00
|
|
|
return srgb && needs_separate_srgb_gl_texture(context, &texture_gl->t)
|
|
|
|
? texture_gl->texture_srgb.name : texture_gl->texture_rgb.name;
|
2017-01-27 19:52:55 +01:00
|
|
|
}
|
|
|
|
|
2021-03-31 12:27:39 +02:00
|
|
|
static inline GLuint wined3d_gl_get_internal_format(struct wined3d_resource *resource,
|
|
|
|
const struct wined3d_format_gl *format_gl, bool srgb)
|
|
|
|
{
|
|
|
|
if (srgb)
|
|
|
|
return format_gl->srgb_internal;
|
|
|
|
else if (resource->bind_flags & WINED3D_BIND_RENDER_TARGET && wined3d_resource_is_offscreen(resource))
|
|
|
|
return format_gl->rt_internal;
|
|
|
|
else
|
|
|
|
return format_gl->internal;
|
|
|
|
}
|
|
|
|
|
2019-05-07 11:03:38 +02:00
|
|
|
static inline BOOL can_use_texture_swizzle(const struct wined3d_d3d_info *d3d_info, const struct wined3d_format *format)
|
2016-03-23 21:19:10 +01:00
|
|
|
{
|
2019-05-07 11:03:38 +02:00
|
|
|
return d3d_info->texture_swizzle && !is_complex_fixup(format->color_fixup) && !is_scaling_fixup(format->color_fixup);
|
2016-03-23 21:19:10 +01:00
|
|
|
}
|
|
|
|
|
2017-11-07 14:29:17 +01:00
|
|
|
static inline BOOL is_rasterization_disabled(const struct wined3d_shader *geometry_shader)
|
|
|
|
{
|
2020-10-07 14:57:10 +02:00
|
|
|
return geometry_shader && geometry_shader->u.gs.so_desc
|
|
|
|
&& geometry_shader->u.gs.so_desc->rasterizer_stream_idx == WINED3D_NO_RASTERIZER_STREAM;
|
2017-11-07 14:29:17 +01:00
|
|
|
}
|
|
|
|
|
2021-06-07 16:55:08 +02:00
|
|
|
static inline uint32_t wined3d_mask_from_size(unsigned int size)
|
|
|
|
{
|
|
|
|
return size < 32 ? (1u << size) - 1 : ~0u;
|
|
|
|
}
|
|
|
|
|
2017-10-18 00:25:09 +02:00
|
|
|
static inline DWORD wined3d_extract_bits(const DWORD *bitstream,
|
|
|
|
unsigned int offset, unsigned int count)
|
|
|
|
{
|
|
|
|
const unsigned int word_bit_count = sizeof(*bitstream) * CHAR_BIT;
|
|
|
|
const unsigned int idx = offset / word_bit_count;
|
|
|
|
const unsigned int shift = offset % word_bit_count;
|
|
|
|
DWORD mask = (1u << count) - 1;
|
|
|
|
DWORD ret;
|
|
|
|
|
|
|
|
ret = (bitstream[idx] >> shift) & mask;
|
|
|
|
if (shift + count > word_bit_count)
|
|
|
|
{
|
|
|
|
const unsigned int extracted_bit_count = word_bit_count - shift;
|
|
|
|
const unsigned int remaining_bit_count = count - extracted_bit_count;
|
|
|
|
mask = (1u << remaining_bit_count) - 1;
|
|
|
|
ret |= (bitstream[idx + 1] & mask) << extracted_bit_count;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_insert_bits(DWORD *bitstream,
|
|
|
|
unsigned int offset, unsigned int count, DWORD bits)
|
|
|
|
{
|
|
|
|
const unsigned int word_bit_count = sizeof(*bitstream) * CHAR_BIT;
|
|
|
|
const unsigned int idx = offset / word_bit_count;
|
|
|
|
const unsigned int shift = offset % word_bit_count;
|
|
|
|
DWORD mask = (1u << count) - 1;
|
|
|
|
|
|
|
|
bitstream[idx] |= (bits & mask) << shift;
|
|
|
|
if (shift + count > word_bit_count)
|
|
|
|
{
|
|
|
|
const unsigned int inserted_bit_count = word_bit_count - shift;
|
|
|
|
const unsigned int remaining_bit_count = count - inserted_bit_count;
|
|
|
|
mask = (1u << remaining_bit_count) - 1;
|
|
|
|
bitstream[idx + 1] |= (bits >> inserted_bit_count) & mask;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-27 23:22:42 +02:00
|
|
|
static inline void wined3d_from_cs(const struct wined3d_cs *cs)
|
2017-04-13 00:11:01 +02:00
|
|
|
{
|
|
|
|
if (cs->thread)
|
|
|
|
assert(cs->thread_id == GetCurrentThreadId());
|
|
|
|
}
|
|
|
|
|
2021-07-06 02:32:13 +02:00
|
|
|
static inline void wined3d_not_from_cs(const struct wined3d_cs *cs)
|
2017-04-13 00:11:01 +02:00
|
|
|
{
|
2021-07-06 02:32:13 +02:00
|
|
|
assert(cs->thread_id != GetCurrentThreadId());
|
2017-04-13 00:11:01 +02:00
|
|
|
}
|
|
|
|
|
2019-05-15 17:06:50 +02:00
|
|
|
static inline enum wined3d_material_color_source validate_material_colour_source(WORD use_map,
|
|
|
|
enum wined3d_material_color_source source)
|
|
|
|
{
|
|
|
|
if (source == WINED3D_MCS_COLOR1 && use_map & (1u << WINED3D_FFP_DIFFUSE))
|
|
|
|
return source;
|
|
|
|
if (source == WINED3D_MCS_COLOR2 && use_map & (1u << WINED3D_FFP_SPECULAR))
|
|
|
|
return source;
|
|
|
|
return WINED3D_MCS_MATERIAL;
|
|
|
|
}
|
|
|
|
|
2019-05-20 22:57:31 +02:00
|
|
|
static inline void wined3d_get_material_colour_source(enum wined3d_material_color_source *diffuse,
|
|
|
|
enum wined3d_material_color_source *emissive, enum wined3d_material_color_source *ambient,
|
|
|
|
enum wined3d_material_color_source *specular, const struct wined3d_state *state,
|
|
|
|
const struct wined3d_stream_info *si)
|
|
|
|
{
|
|
|
|
if (!state->render_states[WINED3D_RS_LIGHTING])
|
|
|
|
{
|
|
|
|
*diffuse = WINED3D_MCS_COLOR1;
|
|
|
|
*specular = WINED3D_MCS_COLOR2;
|
|
|
|
*emissive = *ambient = WINED3D_MCS_MATERIAL;
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!state->render_states[WINED3D_RS_COLORVERTEX])
|
|
|
|
{
|
|
|
|
*diffuse = *emissive = *ambient = *specular = WINED3D_MCS_MATERIAL;
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
*diffuse = validate_material_colour_source(si->use_map, state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE]);
|
|
|
|
*emissive = validate_material_colour_source(si->use_map, state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE]);
|
|
|
|
*ambient = validate_material_colour_source(si->use_map, state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE]);
|
|
|
|
*specular = validate_material_colour_source(si->use_map, state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE]);
|
|
|
|
}
|
|
|
|
|
2019-05-20 22:57:33 +02:00
|
|
|
static inline void wined3d_vec4_transform(struct wined3d_vec4 *dst,
|
|
|
|
const struct wined3d_vec4 *v, const struct wined3d_matrix *m)
|
|
|
|
{
|
|
|
|
struct wined3d_vec4 tmp;
|
|
|
|
|
|
|
|
tmp.x = v->x * m->_11 + v->y * m->_21 + v->z * m->_31 + v->w * m->_41;
|
|
|
|
tmp.y = v->x * m->_12 + v->y * m->_22 + v->z * m->_32 + v->w * m->_42;
|
|
|
|
tmp.z = v->x * m->_13 + v->y * m->_23 + v->z * m->_33 + v->w * m->_43;
|
|
|
|
tmp.w = v->x * m->_14 + v->y * m->_24 + v->z * m->_34 + v->w * m->_44;
|
|
|
|
|
|
|
|
*dst = tmp;
|
|
|
|
}
|
|
|
|
|
2019-05-15 17:06:52 +02:00
|
|
|
BOOL invert_matrix(struct wined3d_matrix *out, const struct wined3d_matrix *m) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
void compute_normal_matrix(float *normal_matrix, BOOL legacy_lighting,
|
|
|
|
const struct wined3d_matrix *modelview) DECLSPEC_HIDDEN;
|
|
|
|
|
2019-06-05 14:24:07 +02:00
|
|
|
static inline struct wined3d_context *context_acquire(struct wined3d_device *device,
|
|
|
|
struct wined3d_texture *texture, unsigned int sub_resource_idx)
|
|
|
|
{
|
|
|
|
wined3d_from_cs(device->cs);
|
|
|
|
|
|
|
|
return device->adapter->adapter_ops->adapter_acquire_context(device, texture, sub_resource_idx);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void context_release(struct wined3d_context *context)
|
|
|
|
{
|
|
|
|
context->device->adapter->adapter_ops->adapter_release_context(context);
|
|
|
|
}
|
|
|
|
|
2019-06-10 12:11:49 +02:00
|
|
|
static inline float wined3d_get_float_state(const struct wined3d_state *state, enum wined3d_render_state rs)
|
|
|
|
{
|
|
|
|
union
|
|
|
|
{
|
|
|
|
DWORD d;
|
|
|
|
float f;
|
|
|
|
}
|
|
|
|
tmpvalue;
|
|
|
|
|
|
|
|
tmpvalue.d = state->render_states[rs];
|
|
|
|
return tmpvalue.f;
|
|
|
|
}
|
|
|
|
|
2019-08-15 23:01:38 +02:00
|
|
|
static inline void *wined3d_context_map_bo_address(struct wined3d_context *context,
|
2020-04-22 15:12:46 +02:00
|
|
|
const struct wined3d_bo_address *data, size_t size, uint32_t map_flags)
|
2019-08-15 23:01:38 +02:00
|
|
|
{
|
2020-04-22 15:12:46 +02:00
|
|
|
return context->device->adapter->adapter_ops->adapter_map_bo_address(context, data, size, map_flags);
|
2019-08-15 23:01:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_context_unmap_bo_address(struct wined3d_context *context,
|
2020-04-22 15:12:45 +02:00
|
|
|
const struct wined3d_bo_address *data, unsigned int range_count, const struct wined3d_range *ranges)
|
2019-08-15 23:01:38 +02:00
|
|
|
{
|
2020-04-22 15:12:45 +02:00
|
|
|
context->device->adapter->adapter_ops->adapter_unmap_bo_address(context, data, range_count, ranges);
|
2019-08-15 23:01:38 +02:00
|
|
|
}
|
|
|
|
|
2019-09-24 16:20:43 +02:00
|
|
|
static inline void wined3d_context_copy_bo_address(struct wined3d_context *context,
|
2022-02-15 00:57:18 +01:00
|
|
|
const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src,
|
|
|
|
unsigned int range_count, const struct wined3d_range *ranges)
|
2019-09-24 16:20:43 +02:00
|
|
|
{
|
2022-02-15 00:57:18 +01:00
|
|
|
context->device->adapter->adapter_ops->adapter_copy_bo_address(context, dst, src, range_count, ranges);
|
2019-09-24 16:20:43 +02:00
|
|
|
}
|
|
|
|
|
2021-10-15 06:44:19 +02:00
|
|
|
static inline void wined3d_context_flush_bo_address(struct wined3d_context *context,
|
|
|
|
const struct wined3d_const_bo_address *data, size_t size)
|
|
|
|
{
|
|
|
|
context->device->adapter->adapter_ops->adapter_flush_bo_address(context, data, size);
|
|
|
|
}
|
|
|
|
|
2021-11-09 18:36:07 +01:00
|
|
|
static inline void wined3d_context_destroy_bo(struct wined3d_context *context, struct wined3d_bo *bo)
|
|
|
|
{
|
|
|
|
context->device->adapter->adapter_ops->adapter_destroy_bo(context, bo);
|
|
|
|
}
|
|
|
|
|
2020-04-27 17:48:47 +02:00
|
|
|
static inline void wined3d_context_vk_reference_bo(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_bo_vk *bo)
|
2020-04-23 23:51:22 +02:00
|
|
|
{
|
|
|
|
bo->command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2021-03-23 14:21:07 +01:00
|
|
|
static inline void wined3d_context_vk_reference_image(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_image_vk *image)
|
|
|
|
{
|
|
|
|
image->command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2020-04-27 17:48:47 +02:00
|
|
|
static inline void wined3d_context_vk_reference_texture(const struct wined3d_context_vk *context_vk,
|
2020-04-23 23:51:23 +02:00
|
|
|
struct wined3d_texture_vk *texture_vk)
|
|
|
|
{
|
2021-03-23 14:21:07 +01:00
|
|
|
wined3d_context_vk_reference_image(context_vk, &texture_vk->image);
|
2020-04-23 23:51:23 +02:00
|
|
|
}
|
|
|
|
|
2021-01-19 14:34:56 +01:00
|
|
|
static inline void wined3d_context_vk_reference_resource(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_resource *resource)
|
|
|
|
{
|
|
|
|
if (resource->type == WINED3D_RTYPE_BUFFER)
|
2021-11-08 23:34:41 +01:00
|
|
|
wined3d_context_vk_reference_bo(context_vk, wined3d_bo_vk(buffer_from_resource(resource)->buffer_object));
|
2021-01-19 14:34:56 +01:00
|
|
|
else
|
|
|
|
wined3d_context_vk_reference_texture(context_vk, wined3d_texture_vk(texture_from_resource(resource)));
|
|
|
|
}
|
|
|
|
|
2020-05-26 18:10:11 +02:00
|
|
|
static inline void wined3d_context_vk_reference_query(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_query_vk *query_vk)
|
|
|
|
{
|
|
|
|
query_vk->command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2020-05-13 16:46:51 +02:00
|
|
|
static inline void wined3d_context_vk_reference_sampler(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_sampler_vk *sampler_vk)
|
|
|
|
{
|
|
|
|
sampler_vk->command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2020-04-27 17:48:47 +02:00
|
|
|
static inline void wined3d_context_vk_reference_rendertarget_view(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_rendertarget_view_vk *rtv_vk)
|
|
|
|
{
|
2021-01-19 14:34:56 +01:00
|
|
|
wined3d_context_vk_reference_resource(context_vk, rtv_vk->v.resource);
|
2020-04-27 17:48:47 +02:00
|
|
|
rtv_vk->command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2020-05-13 16:46:49 +02:00
|
|
|
static inline void wined3d_context_vk_reference_shader_resource_view(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_shader_resource_view_vk *srv_vk)
|
|
|
|
{
|
2021-01-19 14:34:56 +01:00
|
|
|
wined3d_context_vk_reference_resource(context_vk, srv_vk->v.resource);
|
2020-05-13 16:46:49 +02:00
|
|
|
srv_vk->view_vk.command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2020-05-13 16:46:52 +02:00
|
|
|
static inline void wined3d_context_vk_reference_unordered_access_view(const struct wined3d_context_vk *context_vk,
|
|
|
|
struct wined3d_unordered_access_view_vk *uav_vk)
|
|
|
|
{
|
2021-01-19 14:34:56 +01:00
|
|
|
wined3d_context_vk_reference_resource(context_vk, uav_vk->v.resource);
|
2020-05-13 16:46:52 +02:00
|
|
|
uav_vk->view_vk.command_buffer_id = context_vk->current_command_buffer.id;
|
|
|
|
}
|
|
|
|
|
2019-10-31 14:23:40 +01:00
|
|
|
static inline BOOL wined3d_dsv_srv_conflict(const struct wined3d_rendertarget_view *dsv,
|
|
|
|
const struct wined3d_format *srv_format)
|
|
|
|
{
|
2019-12-03 17:35:57 +01:00
|
|
|
return !srv_format || (srv_format->red_size && !(dsv->desc.flags & WINED3D_VIEW_READ_ONLY_DEPTH))
|
|
|
|
|| (srv_format->green_size && !(dsv->desc.flags & WINED3D_VIEW_READ_ONLY_STENCIL));
|
2019-10-31 14:23:40 +01:00
|
|
|
}
|
|
|
|
|
2020-09-29 13:24:54 +02:00
|
|
|
static inline unsigned int wined3d_bind_layer_count(const struct wined3d_texture *texture)
|
|
|
|
{
|
|
|
|
return texture->resource.type == WINED3D_RTYPE_TEXTURE_3D ? texture->resource.depth : texture->layer_count;
|
|
|
|
}
|
|
|
|
|
2020-09-24 14:15:12 +02:00
|
|
|
static inline bool wined3d_srv_all_subresources(const struct wined3d_shader_resource_view *srv)
|
|
|
|
{
|
|
|
|
struct wined3d_texture *texture;
|
|
|
|
|
|
|
|
if (srv->resource->type == WINED3D_RTYPE_BUFFER)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
if (srv->desc.u.texture.layer_idx || srv->desc.u.texture.level_idx)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
texture = texture_from_resource(srv->resource);
|
|
|
|
return srv->desc.u.texture.level_count == texture->level_count
|
2020-09-29 13:24:54 +02:00
|
|
|
&& srv->desc.u.texture.layer_count == wined3d_bind_layer_count(texture);
|
2020-09-24 14:15:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool wined3d_rtv_all_subresources(const struct wined3d_rendertarget_view *rtv)
|
|
|
|
{
|
|
|
|
struct wined3d_texture *texture;
|
|
|
|
|
|
|
|
if (rtv->resource->type == WINED3D_RTYPE_BUFFER)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
if (rtv->sub_resource_idx)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
texture = texture_from_resource(rtv->resource);
|
2020-09-29 13:24:54 +02:00
|
|
|
return texture->level_count == 1 && rtv->layer_count == wined3d_bind_layer_count(texture);
|
2020-09-24 14:15:12 +02:00
|
|
|
}
|
|
|
|
|
2020-09-29 13:24:55 +02:00
|
|
|
static inline void wined3d_srv_bind_count_inc(struct wined3d_shader_resource_view *srv)
|
|
|
|
{
|
2021-10-07 12:57:27 +02:00
|
|
|
InterlockedIncrement(&srv->resource->srv_bind_count_device);
|
2020-09-24 14:15:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void wined3d_srv_bind_count_dec(struct wined3d_shader_resource_view *srv)
|
|
|
|
{
|
2021-10-07 12:57:27 +02:00
|
|
|
InterlockedDecrement(&srv->resource->srv_bind_count_device);
|
2020-09-29 13:24:55 +02:00
|
|
|
}
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2020-09-29 13:24:55 +02:00
|
|
|
static inline void wined3d_rtv_bind_count_inc(struct wined3d_rendertarget_view *rtv)
|
|
|
|
{
|
2021-10-07 12:57:27 +02:00
|
|
|
InterlockedIncrement(&rtv->resource->rtv_bind_count_device);
|
2020-09-24 14:15:10 +02:00
|
|
|
}
|
2019-10-23 18:44:58 +02:00
|
|
|
|
2020-09-24 14:15:10 +02:00
|
|
|
static inline void wined3d_rtv_bind_count_dec(struct wined3d_rendertarget_view *rtv)
|
|
|
|
{
|
2021-10-07 12:57:27 +02:00
|
|
|
InterlockedDecrement(&rtv->resource->rtv_bind_count_device);
|
2020-09-24 14:15:12 +02:00
|
|
|
}
|
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
static inline bool wined3d_rtv_overlaps_srv(const struct wined3d_rendertarget_view *rtv,
|
|
|
|
const struct wined3d_shader_resource_view *srv)
|
2020-09-24 14:15:12 +02:00
|
|
|
{
|
2021-05-24 18:05:49 +02:00
|
|
|
if (rtv->resource != srv->resource)
|
|
|
|
return false;
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
if (wined3d_srv_all_subresources(srv) || wined3d_rtv_all_subresources(rtv))
|
|
|
|
return true;
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
return rtv->sub_resource_idx >= srv->desc.u.texture.level_idx
|
|
|
|
&& rtv->sub_resource_idx < srv->desc.u.texture.level_idx + srv->desc.u.texture.level_count
|
|
|
|
&& rtv->layer_count >= srv->desc.u.texture.layer_idx;
|
2020-09-24 14:15:12 +02:00
|
|
|
}
|
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
static inline bool wined3d_is_srv_rtv_bound(const struct wined3d_state *state,
|
|
|
|
const struct wined3d_shader_resource_view *srv)
|
2020-09-24 14:15:12 +02:00
|
|
|
{
|
2021-05-24 18:05:49 +02:00
|
|
|
unsigned int i;
|
2020-09-29 13:24:55 +02:00
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
if (!srv->resource->rtv_bind_count_device)
|
|
|
|
return false;
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
for (i = 0; i < ARRAY_SIZE(state->fb.render_targets); ++i)
|
|
|
|
{
|
|
|
|
const struct wined3d_rendertarget_view *rtv;
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
if ((rtv = state->fb.render_targets[i]) && wined3d_rtv_overlaps_srv(rtv, srv))
|
|
|
|
return true;
|
|
|
|
}
|
2020-09-24 14:15:12 +02:00
|
|
|
|
2021-05-24 18:05:49 +02:00
|
|
|
return false;
|
2019-10-23 18:44:58 +02:00
|
|
|
}
|
|
|
|
|
2019-11-19 09:27:09 +01:00
|
|
|
static inline void wined3d_viewport_get_z_range(const struct wined3d_viewport *vp, float *min_z, float *max_z)
|
|
|
|
{
|
|
|
|
*min_z = vp->min_z;
|
|
|
|
|
|
|
|
/* The magic constant is derived from tests. */
|
|
|
|
*max_z = max(vp->max_z, vp->min_z + 0.001f);
|
|
|
|
}
|
|
|
|
|
2020-05-26 18:10:11 +02:00
|
|
|
static inline BOOL wined3d_bitmap_clear(uint32_t *map, unsigned int idx)
|
|
|
|
{
|
|
|
|
return map[idx >> 5] &= ~(1u << (idx & 0x1f));
|
|
|
|
}
|
|
|
|
|
2020-05-12 22:42:58 +02:00
|
|
|
static inline BOOL wined3d_bitmap_set(uint32_t *map, unsigned int idx)
|
|
|
|
{
|
|
|
|
return map[idx >> 5] |= (1u << (idx & 0x1f));
|
|
|
|
}
|
|
|
|
|
2020-02-18 17:52:03 +01:00
|
|
|
static inline BOOL wined3d_bitmap_is_set(const uint32_t *map, unsigned int idx)
|
|
|
|
{
|
|
|
|
return map[idx >> 5] & (1u << (idx & 0x1f));
|
|
|
|
}
|
|
|
|
|
2020-02-27 13:31:11 +01:00
|
|
|
static inline unsigned int wined3d_bitmap_ffs_xor(const uint32_t *bitmap, unsigned int bit_count,
|
|
|
|
unsigned int start, uint32_t xor_mask)
|
|
|
|
{
|
|
|
|
const unsigned int word_bit_count = sizeof(*bitmap) * CHAR_BIT;
|
|
|
|
const uint32_t *ptr, *end_ptr;
|
|
|
|
uint32_t map, mask;
|
|
|
|
|
|
|
|
assert(bit_count < word_bit_count || !(bit_count % word_bit_count));
|
|
|
|
|
|
|
|
ptr = bitmap + start / word_bit_count;
|
|
|
|
end_ptr = bitmap + (bit_count + word_bit_count - 1) / word_bit_count;
|
|
|
|
|
|
|
|
if (ptr >= end_ptr)
|
|
|
|
return ~0u;
|
|
|
|
|
|
|
|
mask = ~0u << start % word_bit_count;
|
|
|
|
map = (*ptr ^ xor_mask) & mask;
|
|
|
|
while (!map)
|
|
|
|
{
|
|
|
|
if (++ptr == end_ptr)
|
|
|
|
return ~0u;
|
|
|
|
map = *ptr ^ xor_mask;
|
|
|
|
}
|
|
|
|
return (ptr - bitmap) * word_bit_count + wined3d_bit_scan(&map);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline unsigned int wined3d_bitmap_ffs(const uint32_t *bitmap, unsigned int bit_count, unsigned int start)
|
|
|
|
{
|
|
|
|
return wined3d_bitmap_ffs_xor(bitmap, bit_count, start, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline unsigned int wined3d_bitmap_ffz(const uint32_t *bitmap, unsigned int bit_count, unsigned int start)
|
|
|
|
{
|
|
|
|
return wined3d_bitmap_ffs_xor(bitmap, bit_count, start, ~0u);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline BOOL wined3d_bitmap_get_range(const DWORD *bitmap, unsigned int bit_count,
|
|
|
|
unsigned int start, struct wined3d_range *range)
|
|
|
|
{
|
|
|
|
unsigned int range_start, range_end;
|
|
|
|
|
|
|
|
range_start = wined3d_bitmap_ffs(bitmap, bit_count, start);
|
|
|
|
if (range_start == ~0u)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
range_end = wined3d_bitmap_ffz(bitmap, bit_count, range_start + 1);
|
|
|
|
if (range_end == ~0u)
|
|
|
|
range_end = bit_count;
|
|
|
|
|
|
|
|
range->offset = range_start;
|
|
|
|
range->size = range_end - range_start;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2020-05-12 22:42:58 +02:00
|
|
|
static inline bool wined3d_context_is_graphics_state_dirty(const struct wined3d_context *context, unsigned int state_id)
|
|
|
|
{
|
|
|
|
return wined3d_bitmap_is_set(context->dirty_graphics_states, state_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool wined3d_context_is_compute_state_dirty(const struct wined3d_context *context, unsigned int state_id)
|
|
|
|
{
|
|
|
|
return wined3d_bitmap_is_set(context->dirty_compute_states, state_id - STATE_COMPUTE_OFFSET);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool isStateDirty(const struct wined3d_context *context, unsigned int state_id)
|
|
|
|
{
|
|
|
|
return wined3d_context_is_graphics_state_dirty(context, state_id);
|
|
|
|
}
|
|
|
|
|
2020-04-20 21:00:24 +02:00
|
|
|
static inline VkImageAspectFlags vk_aspect_mask_from_format(const struct wined3d_format *format)
|
|
|
|
{
|
|
|
|
VkImageAspectFlags mask = 0;
|
|
|
|
|
|
|
|
if (format->depth_size)
|
|
|
|
mask |= VK_IMAGE_ASPECT_DEPTH_BIT;
|
|
|
|
if (format->stencil_size)
|
|
|
|
mask |= VK_IMAGE_ASPECT_STENCIL_BIT;
|
|
|
|
if (!mask || format->red_size || format->green_size || format->blue_size || format->alpha_size)
|
|
|
|
mask |= VK_IMAGE_ASPECT_COLOR_BIT;
|
|
|
|
|
|
|
|
return mask;
|
|
|
|
}
|
|
|
|
|
2020-05-20 15:42:31 +02:00
|
|
|
static inline bool wined3d_primitive_type_is_list(enum wined3d_primitive_type t)
|
|
|
|
{
|
|
|
|
return t == WINED3D_PT_POINTLIST
|
|
|
|
|| t == WINED3D_PT_LINELIST
|
|
|
|
|| t == WINED3D_PT_TRIANGLELIST
|
|
|
|
|| t == WINED3D_PT_LINELIST_ADJ
|
|
|
|
|| t == WINED3D_PT_TRIANGLELIST_ADJ
|
|
|
|
|| t == WINED3D_PT_PATCH;
|
|
|
|
}
|
|
|
|
|
2020-11-30 15:41:25 +01:00
|
|
|
static inline void wined3d_context_gl_reference_bo(struct wined3d_context_gl *context_gl, struct wined3d_bo_gl *bo_gl)
|
|
|
|
{
|
|
|
|
struct wined3d_device_gl *device_gl = wined3d_device_gl(context_gl->c.device);
|
|
|
|
|
|
|
|
bo_gl->command_fence_id = device_gl->current_fence_id;
|
|
|
|
}
|
|
|
|
|
2021-11-10 11:36:09 +01:00
|
|
|
static inline void wined3d_context_gl_reference_buffer(struct wined3d_context_gl *context_gl,
|
|
|
|
struct wined3d_buffer *buffer)
|
|
|
|
{
|
|
|
|
wined3d_context_gl_reference_bo(context_gl, wined3d_bo_gl(buffer->buffer_object));
|
|
|
|
}
|
|
|
|
|
2020-12-14 15:27:21 +01:00
|
|
|
static inline bool wined3d_map_persistent(void)
|
|
|
|
{
|
|
|
|
return sizeof(void *) >= sizeof(uint64_t);
|
|
|
|
}
|
|
|
|
|
2009-05-11 21:43:54 +02:00
|
|
|
/* The WNDCLASS-Name for the fake window which we use to retrieve the GL capabilities */
|
|
|
|
#define WINED3D_OPENGL_WINDOW_CLASS_NAME "WineD3D_OpenGL"
|
|
|
|
|
2020-12-03 17:58:54 +01:00
|
|
|
extern CRITICAL_SECTION wined3d_command_cs;
|
|
|
|
|
2003-11-14 04:50:35 +01:00
|
|
|
#endif
|