Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
August 2021
- 78 participants
- 929 discussions
[PATCH vkd3d 1/4] build: Add hlsl.h and preproc.h to libvkd3d_shader_la_SOURCES.
by Zebediah Figura 06 Aug '21
by Zebediah Figura 06 Aug '21
06 Aug '21
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
Makefile.am | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Makefile.am b/Makefile.am
index 5b3c4ff0..8dd803d1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -170,7 +170,9 @@ libvkd3d_shader_la_SOURCES = \
libs/vkd3d-shader/checksum.c \
libs/vkd3d-shader/dxbc.c \
libs/vkd3d-shader/hlsl.c \
+ libs/vkd3d-shader/hlsl.h \
libs/vkd3d-shader/hlsl_codegen.c \
+ libs/vkd3d-shader/preproc.h \
libs/vkd3d-shader/spirv.c \
libs/vkd3d-shader/trace.c \
libs/vkd3d-shader/vkd3d_shader.map \
--
2.32.0
5
10
[PATCH vkd3d v2] vkd3d-shader: Move SM4 byte code definitions to a separate header.
by Zebediah Figura 06 Aug '21
by Zebediah Figura 06 Aug '21
06 Aug '21
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
Makefile.am | 1 +
libs/vkd3d-shader/dxbc.c | 460 +--------------------
libs/vkd3d-shader/sm4.h | 488 +++++++++++++++++++++++
libs/vkd3d-shader/vkd3d_shader_private.h | 13 -
4 files changed, 490 insertions(+), 472 deletions(-)
create mode 100644 libs/vkd3d-shader/sm4.h
diff --git a/Makefile.am b/Makefile.am
index 8cbcd263..1946af37 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -173,6 +173,7 @@ libvkd3d_shader_la_SOURCES = \
libs/vkd3d-shader/hlsl.h \
libs/vkd3d-shader/hlsl_codegen.c \
libs/vkd3d-shader/preproc.h \
+ libs/vkd3d-shader/sm4.h \
libs/vkd3d-shader/spirv.c \
libs/vkd3d-shader/trace.c \
libs/vkd3d-shader/vkd3d_shader.map \
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index dd18b6f1..9da89a4a 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -18,465 +18,7 @@
*/
#include "vkd3d_shader_private.h"
-
-#define VKD3D_SM4_INSTRUCTION_MODIFIER (0x1u << 31)
-
-#define VKD3D_SM4_MODIFIER_MASK 0x3fu
-
-#define VKD3D_SM5_MODIFIER_DATA_TYPE_SHIFT 6
-#define VKD3D_SM5_MODIFIER_DATA_TYPE_MASK (0xffffu << VKD3D_SM5_MODIFIER_DATA_TYPE_SHIFT)
-
-#define VKD3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT 6
-#define VKD3D_SM5_MODIFIER_RESOURCE_TYPE_MASK (0xfu << VKD3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT)
-
-#define VKD3D_SM5_MODIFIER_RESOURCE_STRIDE_SHIFT 11
-#define VKD3D_SM5_MODIFIER_RESOURCE_STRIDE_MASK (0xfffu << VKD3D_SM5_MODIFIER_RESOURCE_STRIDE_SHIFT)
-
-#define VKD3D_SM4_AOFFIMMI_U_SHIFT 9
-#define VKD3D_SM4_AOFFIMMI_U_MASK (0xfu << VKD3D_SM4_AOFFIMMI_U_SHIFT)
-#define VKD3D_SM4_AOFFIMMI_V_SHIFT 13
-#define VKD3D_SM4_AOFFIMMI_V_MASK (0xfu << VKD3D_SM4_AOFFIMMI_V_SHIFT)
-#define VKD3D_SM4_AOFFIMMI_W_SHIFT 17
-#define VKD3D_SM4_AOFFIMMI_W_MASK (0xfu << VKD3D_SM4_AOFFIMMI_W_SHIFT)
-
-#define VKD3D_SM4_INSTRUCTION_LENGTH_SHIFT 24
-#define VKD3D_SM4_INSTRUCTION_LENGTH_MASK (0x1fu << VKD3D_SM4_INSTRUCTION_LENGTH_SHIFT)
-
-#define VKD3D_SM4_INSTRUCTION_FLAGS_SHIFT 11
-#define VKD3D_SM4_INSTRUCTION_FLAGS_MASK (0x7u << VKD3D_SM4_INSTRUCTION_FLAGS_SHIFT)
-
-#define VKD3D_SM4_RESOURCE_TYPE_SHIFT 11
-#define VKD3D_SM4_RESOURCE_TYPE_MASK (0xfu << VKD3D_SM4_RESOURCE_TYPE_SHIFT)
-
-#define VKD3D_SM4_PRIMITIVE_TYPE_SHIFT 11
-#define VKD3D_SM4_PRIMITIVE_TYPE_MASK (0x3fu << VKD3D_SM4_PRIMITIVE_TYPE_SHIFT)
-
-#define VKD3D_SM4_INDEX_TYPE_SHIFT 11
-#define VKD3D_SM4_INDEX_TYPE_MASK (0x1u << VKD3D_SM4_INDEX_TYPE_SHIFT)
-
-#define VKD3D_SM4_SAMPLER_MODE_SHIFT 11
-#define VKD3D_SM4_SAMPLER_MODE_MASK (0xfu << VKD3D_SM4_SAMPLER_MODE_SHIFT)
-
-#define VKD3D_SM4_SHADER_DATA_TYPE_SHIFT 11
-#define VKD3D_SM4_SHADER_DATA_TYPE_MASK (0xfu << VKD3D_SM4_SHADER_DATA_TYPE_SHIFT)
-
-#define VKD3D_SM4_INTERPOLATION_MODE_SHIFT 11
-#define VKD3D_SM4_INTERPOLATION_MODE_MASK (0xfu << VKD3D_SM4_INTERPOLATION_MODE_SHIFT)
-
-#define VKD3D_SM4_GLOBAL_FLAGS_SHIFT 11
-#define VKD3D_SM4_GLOBAL_FLAGS_MASK (0xffu << VKD3D_SM4_GLOBAL_FLAGS_SHIFT)
-
-#define VKD3D_SM5_PRECISE_SHIFT 19
-#define VKD3D_SM5_PRECISE_MASK (0xfu << VKD3D_SM5_PRECISE_SHIFT)
-
-#define VKD3D_SM5_CONTROL_POINT_COUNT_SHIFT 11
-#define VKD3D_SM5_CONTROL_POINT_COUNT_MASK (0xffu << VKD3D_SM5_CONTROL_POINT_COUNT_SHIFT)
-
-#define VKD3D_SM5_FP_ARRAY_SIZE_SHIFT 16
-#define VKD3D_SM5_FP_TABLE_COUNT_MASK 0xffffu
-
-#define VKD3D_SM5_UAV_FLAGS_SHIFT 15
-#define VKD3D_SM5_UAV_FLAGS_MASK (0x1ffu << VKD3D_SM5_UAV_FLAGS_SHIFT)
-
-#define VKD3D_SM5_SYNC_FLAGS_SHIFT 11
-#define VKD3D_SM5_SYNC_FLAGS_MASK (0xffu << VKD3D_SM5_SYNC_FLAGS_SHIFT)
-
-#define VKD3D_SM5_TESSELLATOR_SHIFT 11
-#define VKD3D_SM5_TESSELLATOR_MASK (0xfu << VKD3D_SM5_TESSELLATOR_SHIFT)
-
-#define VKD3D_SM4_OPCODE_MASK 0xff
-
-#define VKD3D_SM4_REGISTER_MODIFIER (0x1u << 31)
-
-#define VKD3D_SM4_ADDRESSING_SHIFT2 28
-#define VKD3D_SM4_ADDRESSING_MASK2 (0x3u << VKD3D_SM4_ADDRESSING_SHIFT2)
-
-#define VKD3D_SM4_ADDRESSING_SHIFT1 25
-#define VKD3D_SM4_ADDRESSING_MASK1 (0x3u << VKD3D_SM4_ADDRESSING_SHIFT1)
-
-#define VKD3D_SM4_ADDRESSING_SHIFT0 22
-#define VKD3D_SM4_ADDRESSING_MASK0 (0x3u << VKD3D_SM4_ADDRESSING_SHIFT0)
-
-#define VKD3D_SM4_REGISTER_ORDER_SHIFT 20
-#define VKD3D_SM4_REGISTER_ORDER_MASK (0x3u << VKD3D_SM4_REGISTER_ORDER_SHIFT)
-
-#define VKD3D_SM4_REGISTER_TYPE_SHIFT 12
-#define VKD3D_SM4_REGISTER_TYPE_MASK (0xffu << VKD3D_SM4_REGISTER_TYPE_SHIFT)
-
-#define VKD3D_SM4_SWIZZLE_TYPE_SHIFT 2
-#define VKD3D_SM4_SWIZZLE_TYPE_MASK (0x3u << VKD3D_SM4_SWIZZLE_TYPE_SHIFT)
-
-#define VKD3D_SM4_DIMENSION_SHIFT 0
-#define VKD3D_SM4_DIMENSION_MASK (0x3u << VKD3D_SM4_DIMENSION_SHIFT)
-
-#define VKD3D_SM4_WRITEMASK_SHIFT 4
-#define VKD3D_SM4_WRITEMASK_MASK (0xfu << VKD3D_SM4_WRITEMASK_SHIFT)
-
-#define VKD3D_SM4_SWIZZLE_SHIFT 4
-#define VKD3D_SM4_SWIZZLE_MASK (0xffu << VKD3D_SM4_SWIZZLE_SHIFT)
-
-#define VKD3D_SM4_VERSION_MAJOR(version) (((version) >> 4) & 0xf)
-#define VKD3D_SM4_VERSION_MINOR(version) (((version) >> 0) & 0xf)
-
-#define VKD3D_SM4_ADDRESSING_RELATIVE 0x2
-#define VKD3D_SM4_ADDRESSING_OFFSET 0x1
-
-#define VKD3D_SM4_INSTRUCTION_FLAG_SATURATE 0x4
-
-#define VKD3D_SM4_CONDITIONAL_NZ (0x1u << 18)
-
-#define VKD3D_SM4_TYPE_COMPONENT(com, i) (((com) >> (4 * (i))) & 0xfu)
-
-enum vkd3d_sm4_opcode
-{
- VKD3D_SM4_OP_ADD = 0x00,
- VKD3D_SM4_OP_AND = 0x01,
- VKD3D_SM4_OP_BREAK = 0x02,
- VKD3D_SM4_OP_BREAKC = 0x03,
- VKD3D_SM4_OP_CASE = 0x06,
- VKD3D_SM4_OP_CONTINUE = 0x07,
- VKD3D_SM4_OP_CONTINUEC = 0x08,
- VKD3D_SM4_OP_CUT = 0x09,
- VKD3D_SM4_OP_DEFAULT = 0x0a,
- VKD3D_SM4_OP_DERIV_RTX = 0x0b,
- VKD3D_SM4_OP_DERIV_RTY = 0x0c,
- VKD3D_SM4_OP_DISCARD = 0x0d,
- VKD3D_SM4_OP_DIV = 0x0e,
- VKD3D_SM4_OP_DP2 = 0x0f,
- VKD3D_SM4_OP_DP3 = 0x10,
- VKD3D_SM4_OP_DP4 = 0x11,
- VKD3D_SM4_OP_ELSE = 0x12,
- VKD3D_SM4_OP_EMIT = 0x13,
- VKD3D_SM4_OP_ENDIF = 0x15,
- VKD3D_SM4_OP_ENDLOOP = 0x16,
- VKD3D_SM4_OP_ENDSWITCH = 0x17,
- VKD3D_SM4_OP_EQ = 0x18,
- VKD3D_SM4_OP_EXP = 0x19,
- VKD3D_SM4_OP_FRC = 0x1a,
- VKD3D_SM4_OP_FTOI = 0x1b,
- VKD3D_SM4_OP_FTOU = 0x1c,
- VKD3D_SM4_OP_GE = 0x1d,
- VKD3D_SM4_OP_IADD = 0x1e,
- VKD3D_SM4_OP_IF = 0x1f,
- VKD3D_SM4_OP_IEQ = 0x20,
- VKD3D_SM4_OP_IGE = 0x21,
- VKD3D_SM4_OP_ILT = 0x22,
- VKD3D_SM4_OP_IMAD = 0x23,
- VKD3D_SM4_OP_IMAX = 0x24,
- VKD3D_SM4_OP_IMIN = 0x25,
- VKD3D_SM4_OP_IMUL = 0x26,
- VKD3D_SM4_OP_INE = 0x27,
- VKD3D_SM4_OP_INEG = 0x28,
- VKD3D_SM4_OP_ISHL = 0x29,
- VKD3D_SM4_OP_ISHR = 0x2a,
- VKD3D_SM4_OP_ITOF = 0x2b,
- VKD3D_SM4_OP_LABEL = 0x2c,
- VKD3D_SM4_OP_LD = 0x2d,
- VKD3D_SM4_OP_LD2DMS = 0x2e,
- VKD3D_SM4_OP_LOG = 0x2f,
- VKD3D_SM4_OP_LOOP = 0x30,
- VKD3D_SM4_OP_LT = 0x31,
- VKD3D_SM4_OP_MAD = 0x32,
- VKD3D_SM4_OP_MIN = 0x33,
- VKD3D_SM4_OP_MAX = 0x34,
- VKD3D_SM4_OP_SHADER_DATA = 0x35,
- VKD3D_SM4_OP_MOV = 0x36,
- VKD3D_SM4_OP_MOVC = 0x37,
- VKD3D_SM4_OP_MUL = 0x38,
- VKD3D_SM4_OP_NE = 0x39,
- VKD3D_SM4_OP_NOP = 0x3a,
- VKD3D_SM4_OP_NOT = 0x3b,
- VKD3D_SM4_OP_OR = 0x3c,
- VKD3D_SM4_OP_RESINFO = 0x3d,
- VKD3D_SM4_OP_RET = 0x3e,
- VKD3D_SM4_OP_RETC = 0x3f,
- VKD3D_SM4_OP_ROUND_NE = 0x40,
- VKD3D_SM4_OP_ROUND_NI = 0x41,
- VKD3D_SM4_OP_ROUND_PI = 0x42,
- VKD3D_SM4_OP_ROUND_Z = 0x43,
- VKD3D_SM4_OP_RSQ = 0x44,
- VKD3D_SM4_OP_SAMPLE = 0x45,
- VKD3D_SM4_OP_SAMPLE_C = 0x46,
- VKD3D_SM4_OP_SAMPLE_C_LZ = 0x47,
- VKD3D_SM4_OP_SAMPLE_LOD = 0x48,
- VKD3D_SM4_OP_SAMPLE_GRAD = 0x49,
- VKD3D_SM4_OP_SAMPLE_B = 0x4a,
- VKD3D_SM4_OP_SQRT = 0x4b,
- VKD3D_SM4_OP_SWITCH = 0x4c,
- VKD3D_SM4_OP_SINCOS = 0x4d,
- VKD3D_SM4_OP_UDIV = 0x4e,
- VKD3D_SM4_OP_ULT = 0x4f,
- VKD3D_SM4_OP_UGE = 0x50,
- VKD3D_SM4_OP_UMUL = 0x51,
- VKD3D_SM4_OP_UMAX = 0x53,
- VKD3D_SM4_OP_UMIN = 0x54,
- VKD3D_SM4_OP_USHR = 0x55,
- VKD3D_SM4_OP_UTOF = 0x56,
- VKD3D_SM4_OP_XOR = 0x57,
- VKD3D_SM4_OP_DCL_RESOURCE = 0x58,
- VKD3D_SM4_OP_DCL_CONSTANT_BUFFER = 0x59,
- VKD3D_SM4_OP_DCL_SAMPLER = 0x5a,
- VKD3D_SM4_OP_DCL_INDEX_RANGE = 0x5b,
- VKD3D_SM4_OP_DCL_OUTPUT_TOPOLOGY = 0x5c,
- VKD3D_SM4_OP_DCL_INPUT_PRIMITIVE = 0x5d,
- VKD3D_SM4_OP_DCL_VERTICES_OUT = 0x5e,
- VKD3D_SM4_OP_DCL_INPUT = 0x5f,
- VKD3D_SM4_OP_DCL_INPUT_SGV = 0x60,
- VKD3D_SM4_OP_DCL_INPUT_SIV = 0x61,
- VKD3D_SM4_OP_DCL_INPUT_PS = 0x62,
- VKD3D_SM4_OP_DCL_INPUT_PS_SGV = 0x63,
- VKD3D_SM4_OP_DCL_INPUT_PS_SIV = 0x64,
- VKD3D_SM4_OP_DCL_OUTPUT = 0x65,
- VKD3D_SM4_OP_DCL_OUTPUT_SIV = 0x67,
- VKD3D_SM4_OP_DCL_TEMPS = 0x68,
- VKD3D_SM4_OP_DCL_INDEXABLE_TEMP = 0x69,
- VKD3D_SM4_OP_DCL_GLOBAL_FLAGS = 0x6a,
- VKD3D_SM4_OP_LOD = 0x6c,
- VKD3D_SM4_OP_GATHER4 = 0x6d,
- VKD3D_SM4_OP_SAMPLE_POS = 0x6e,
- VKD3D_SM4_OP_SAMPLE_INFO = 0x6f,
- VKD3D_SM5_OP_HS_DECLS = 0x71,
- VKD3D_SM5_OP_HS_CONTROL_POINT_PHASE = 0x72,
- VKD3D_SM5_OP_HS_FORK_PHASE = 0x73,
- VKD3D_SM5_OP_HS_JOIN_PHASE = 0x74,
- VKD3D_SM5_OP_EMIT_STREAM = 0x75,
- VKD3D_SM5_OP_CUT_STREAM = 0x76,
- VKD3D_SM5_OP_FCALL = 0x78,
- VKD3D_SM5_OP_BUFINFO = 0x79,
- VKD3D_SM5_OP_DERIV_RTX_COARSE = 0x7a,
- VKD3D_SM5_OP_DERIV_RTX_FINE = 0x7b,
- VKD3D_SM5_OP_DERIV_RTY_COARSE = 0x7c,
- VKD3D_SM5_OP_DERIV_RTY_FINE = 0x7d,
- VKD3D_SM5_OP_GATHER4_C = 0x7e,
- VKD3D_SM5_OP_GATHER4_PO = 0x7f,
- VKD3D_SM5_OP_GATHER4_PO_C = 0x80,
- VKD3D_SM5_OP_RCP = 0x81,
- VKD3D_SM5_OP_F32TOF16 = 0x82,
- VKD3D_SM5_OP_F16TOF32 = 0x83,
- VKD3D_SM5_OP_COUNTBITS = 0x86,
- VKD3D_SM5_OP_FIRSTBIT_HI = 0x87,
- VKD3D_SM5_OP_FIRSTBIT_LO = 0x88,
- VKD3D_SM5_OP_FIRSTBIT_SHI = 0x89,
- VKD3D_SM5_OP_UBFE = 0x8a,
- VKD3D_SM5_OP_IBFE = 0x8b,
- VKD3D_SM5_OP_BFI = 0x8c,
- VKD3D_SM5_OP_BFREV = 0x8d,
- VKD3D_SM5_OP_SWAPC = 0x8e,
- VKD3D_SM5_OP_DCL_STREAM = 0x8f,
- VKD3D_SM5_OP_DCL_FUNCTION_BODY = 0x90,
- VKD3D_SM5_OP_DCL_FUNCTION_TABLE = 0x91,
- VKD3D_SM5_OP_DCL_INTERFACE = 0x92,
- VKD3D_SM5_OP_DCL_INPUT_CONTROL_POINT_COUNT = 0x93,
- VKD3D_SM5_OP_DCL_OUTPUT_CONTROL_POINT_COUNT = 0x94,
- VKD3D_SM5_OP_DCL_TESSELLATOR_DOMAIN = 0x95,
- VKD3D_SM5_OP_DCL_TESSELLATOR_PARTITIONING = 0x96,
- VKD3D_SM5_OP_DCL_TESSELLATOR_OUTPUT_PRIMITIVE = 0x97,
- VKD3D_SM5_OP_DCL_HS_MAX_TESSFACTOR = 0x98,
- VKD3D_SM5_OP_DCL_HS_FORK_PHASE_INSTANCE_COUNT = 0x99,
- VKD3D_SM5_OP_DCL_HS_JOIN_PHASE_INSTANCE_COUNT = 0x9a,
- VKD3D_SM5_OP_DCL_THREAD_GROUP = 0x9b,
- VKD3D_SM5_OP_DCL_UAV_TYPED = 0x9c,
- VKD3D_SM5_OP_DCL_UAV_RAW = 0x9d,
- VKD3D_SM5_OP_DCL_UAV_STRUCTURED = 0x9e,
- VKD3D_SM5_OP_DCL_TGSM_RAW = 0x9f,
- VKD3D_SM5_OP_DCL_TGSM_STRUCTURED = 0xa0,
- VKD3D_SM5_OP_DCL_RESOURCE_RAW = 0xa1,
- VKD3D_SM5_OP_DCL_RESOURCE_STRUCTURED = 0xa2,
- VKD3D_SM5_OP_LD_UAV_TYPED = 0xa3,
- VKD3D_SM5_OP_STORE_UAV_TYPED = 0xa4,
- VKD3D_SM5_OP_LD_RAW = 0xa5,
- VKD3D_SM5_OP_STORE_RAW = 0xa6,
- VKD3D_SM5_OP_LD_STRUCTURED = 0xa7,
- VKD3D_SM5_OP_STORE_STRUCTURED = 0xa8,
- VKD3D_SM5_OP_ATOMIC_AND = 0xa9,
- VKD3D_SM5_OP_ATOMIC_OR = 0xaa,
- VKD3D_SM5_OP_ATOMIC_XOR = 0xab,
- VKD3D_SM5_OP_ATOMIC_CMP_STORE = 0xac,
- VKD3D_SM5_OP_ATOMIC_IADD = 0xad,
- VKD3D_SM5_OP_ATOMIC_IMAX = 0xae,
- VKD3D_SM5_OP_ATOMIC_IMIN = 0xaf,
- VKD3D_SM5_OP_ATOMIC_UMAX = 0xb0,
- VKD3D_SM5_OP_ATOMIC_UMIN = 0xb1,
- VKD3D_SM5_OP_IMM_ATOMIC_ALLOC = 0xb2,
- VKD3D_SM5_OP_IMM_ATOMIC_CONSUME = 0xb3,
- VKD3D_SM5_OP_IMM_ATOMIC_IADD = 0xb4,
- VKD3D_SM5_OP_IMM_ATOMIC_AND = 0xb5,
- VKD3D_SM5_OP_IMM_ATOMIC_OR = 0xb6,
- VKD3D_SM5_OP_IMM_ATOMIC_XOR = 0xb7,
- VKD3D_SM5_OP_IMM_ATOMIC_EXCH = 0xb8,
- VKD3D_SM5_OP_IMM_ATOMIC_CMP_EXCH = 0xb9,
- VKD3D_SM5_OP_IMM_ATOMIC_IMAX = 0xba,
- VKD3D_SM5_OP_IMM_ATOMIC_IMIN = 0xbb,
- VKD3D_SM5_OP_IMM_ATOMIC_UMAX = 0xbc,
- VKD3D_SM5_OP_IMM_ATOMIC_UMIN = 0xbd,
- VKD3D_SM5_OP_SYNC = 0xbe,
- VKD3D_SM5_OP_DADD = 0xbf,
- VKD3D_SM5_OP_DEQ = 0xc3,
- VKD3D_SM5_OP_DGE = 0xc4,
- VKD3D_SM5_OP_DLT = 0xc5,
- VKD3D_SM5_OP_DNE = 0xc6,
- VKD3D_SM5_OP_DMOV = 0xc7,
- VKD3D_SM5_OP_EVAL_SAMPLE_INDEX = 0xcc,
- VKD3D_SM5_OP_EVAL_CENTROID = 0xcd,
- VKD3D_SM5_OP_DCL_GS_INSTANCES = 0xce,
-};
-
-enum vkd3d_sm4_instruction_modifier
-{
- VKD3D_SM4_MODIFIER_AOFFIMMI = 0x1,
- VKD3D_SM5_MODIFIER_RESOURCE_TYPE = 0x2,
- VKD3D_SM5_MODIFIER_DATA_TYPE = 0x3,
-};
-
-enum vkd3d_sm4_register_type
-{
- VKD3D_SM4_RT_TEMP = 0x00,
- VKD3D_SM4_RT_INPUT = 0x01,
- VKD3D_SM4_RT_OUTPUT = 0x02,
- VKD3D_SM4_RT_INDEXABLE_TEMP = 0x03,
- VKD3D_SM4_RT_IMMCONST = 0x04,
- VKD3D_SM4_RT_IMMCONST64 = 0x05,
- VKD3D_SM4_RT_SAMPLER = 0x06,
- VKD3D_SM4_RT_RESOURCE = 0x07,
- VKD3D_SM4_RT_CONSTBUFFER = 0x08,
- VKD3D_SM4_RT_IMMCONSTBUFFER = 0x09,
- VKD3D_SM4_RT_PRIMID = 0x0b,
- VKD3D_SM4_RT_DEPTHOUT = 0x0c,
- VKD3D_SM4_RT_NULL = 0x0d,
- VKD3D_SM4_RT_RASTERIZER = 0x0e,
- VKD3D_SM4_RT_OMASK = 0x0f,
- VKD3D_SM5_RT_STREAM = 0x10,
- VKD3D_SM5_RT_FUNCTION_BODY = 0x11,
- VKD3D_SM5_RT_FUNCTION_POINTER = 0x13,
- VKD3D_SM5_RT_OUTPUT_CONTROL_POINT_ID = 0x16,
- VKD3D_SM5_RT_FORK_INSTANCE_ID = 0x17,
- VKD3D_SM5_RT_JOIN_INSTANCE_ID = 0x18,
- VKD3D_SM5_RT_INPUT_CONTROL_POINT = 0x19,
- VKD3D_SM5_RT_OUTPUT_CONTROL_POINT = 0x1a,
- VKD3D_SM5_RT_PATCH_CONSTANT_DATA = 0x1b,
- VKD3D_SM5_RT_DOMAIN_LOCATION = 0x1c,
- VKD3D_SM5_RT_UAV = 0x1e,
- VKD3D_SM5_RT_SHARED_MEMORY = 0x1f,
- VKD3D_SM5_RT_THREAD_ID = 0x20,
- VKD3D_SM5_RT_THREAD_GROUP_ID = 0x21,
- VKD3D_SM5_RT_LOCAL_THREAD_ID = 0x22,
- VKD3D_SM5_RT_COVERAGE = 0x23,
- VKD3D_SM5_RT_LOCAL_THREAD_INDEX = 0x24,
- VKD3D_SM5_RT_GS_INSTANCE_ID = 0x25,
- VKD3D_SM5_RT_DEPTHOUT_GREATER_EQUAL = 0x26,
- VKD3D_SM5_RT_DEPTHOUT_LESS_EQUAL = 0x27,
-};
-
-enum vkd3d_sm4_register_modifier
-{
- VKD3D_SM4_REGISTER_MODIFIER_NONE = 0x01,
- VKD3D_SM4_REGISTER_MODIFIER_NEGATE = 0x41,
- VKD3D_SM4_REGISTER_MODIFIER_ABS = 0x81,
- VKD3D_SM4_REGISTER_MODIFIER_ABS_NEGATE = 0xc1,
-};
-
-enum vkd3d_sm4_output_primitive_type
-{
- VKD3D_SM4_OUTPUT_PT_POINTLIST = 0x1,
- VKD3D_SM4_OUTPUT_PT_LINESTRIP = 0x3,
- VKD3D_SM4_OUTPUT_PT_TRIANGLESTRIP = 0x5,
-};
-
-enum vkd3d_sm4_input_primitive_type
-{
- VKD3D_SM4_INPUT_PT_POINT = 0x01,
- VKD3D_SM4_INPUT_PT_LINE = 0x02,
- VKD3D_SM4_INPUT_PT_TRIANGLE = 0x03,
- VKD3D_SM4_INPUT_PT_LINEADJ = 0x06,
- VKD3D_SM4_INPUT_PT_TRIANGLEADJ = 0x07,
- VKD3D_SM5_INPUT_PT_PATCH1 = 0x08,
- VKD3D_SM5_INPUT_PT_PATCH2 = 0x09,
- VKD3D_SM5_INPUT_PT_PATCH3 = 0x0a,
- VKD3D_SM5_INPUT_PT_PATCH4 = 0x0b,
- VKD3D_SM5_INPUT_PT_PATCH5 = 0x0c,
- VKD3D_SM5_INPUT_PT_PATCH6 = 0x0d,
- VKD3D_SM5_INPUT_PT_PATCH7 = 0x0e,
- VKD3D_SM5_INPUT_PT_PATCH8 = 0x0f,
- VKD3D_SM5_INPUT_PT_PATCH9 = 0x10,
- VKD3D_SM5_INPUT_PT_PATCH10 = 0x11,
- VKD3D_SM5_INPUT_PT_PATCH11 = 0x12,
- VKD3D_SM5_INPUT_PT_PATCH12 = 0x13,
- VKD3D_SM5_INPUT_PT_PATCH13 = 0x14,
- VKD3D_SM5_INPUT_PT_PATCH14 = 0x15,
- VKD3D_SM5_INPUT_PT_PATCH15 = 0x16,
- VKD3D_SM5_INPUT_PT_PATCH16 = 0x17,
- VKD3D_SM5_INPUT_PT_PATCH17 = 0x18,
- VKD3D_SM5_INPUT_PT_PATCH18 = 0x19,
- VKD3D_SM5_INPUT_PT_PATCH19 = 0x1a,
- VKD3D_SM5_INPUT_PT_PATCH20 = 0x1b,
- VKD3D_SM5_INPUT_PT_PATCH21 = 0x1c,
- VKD3D_SM5_INPUT_PT_PATCH22 = 0x1d,
- VKD3D_SM5_INPUT_PT_PATCH23 = 0x1e,
- VKD3D_SM5_INPUT_PT_PATCH24 = 0x1f,
- VKD3D_SM5_INPUT_PT_PATCH25 = 0x20,
- VKD3D_SM5_INPUT_PT_PATCH26 = 0x21,
- VKD3D_SM5_INPUT_PT_PATCH27 = 0x22,
- VKD3D_SM5_INPUT_PT_PATCH28 = 0x23,
- VKD3D_SM5_INPUT_PT_PATCH29 = 0x24,
- VKD3D_SM5_INPUT_PT_PATCH30 = 0x25,
- VKD3D_SM5_INPUT_PT_PATCH31 = 0x26,
- VKD3D_SM5_INPUT_PT_PATCH32 = 0x27,
-};
-
-enum vkd3d_sm4_swizzle_type
-{
- VKD3D_SM4_SWIZZLE_NONE = 0x0,
- VKD3D_SM4_SWIZZLE_VEC4 = 0x1,
- VKD3D_SM4_SWIZZLE_SCALAR = 0x2,
-};
-
-enum vkd3d_sm4_dimension
-{
- VKD3D_SM4_DIMENSION_NONE = 0x0,
- VKD3D_SM4_DIMENSION_SCALAR = 0x1,
- VKD3D_SM4_DIMENSION_VEC4 = 0x2,
-};
-
-enum vkd3d_sm4_resource_type
-{
- VKD3D_SM4_RESOURCE_BUFFER = 0x1,
- VKD3D_SM4_RESOURCE_TEXTURE_1D = 0x2,
- VKD3D_SM4_RESOURCE_TEXTURE_2D = 0x3,
- VKD3D_SM4_RESOURCE_TEXTURE_2DMS = 0x4,
- VKD3D_SM4_RESOURCE_TEXTURE_3D = 0x5,
- VKD3D_SM4_RESOURCE_TEXTURE_CUBE = 0x6,
- VKD3D_SM4_RESOURCE_TEXTURE_1DARRAY = 0x7,
- VKD3D_SM4_RESOURCE_TEXTURE_2DARRAY = 0x8,
- VKD3D_SM4_RESOURCE_TEXTURE_2DMSARRAY = 0x9,
- VKD3D_SM4_RESOURCE_TEXTURE_CUBEARRAY = 0xa,
- VKD3D_SM4_RESOURCE_RAW_BUFFER = 0xb,
- VKD3D_SM4_RESOURCE_STRUCTURED_BUFFER = 0xc,
-};
-
-enum vkd3d_sm4_data_type
-{
- VKD3D_SM4_DATA_UNORM = 0x1,
- VKD3D_SM4_DATA_SNORM = 0x2,
- VKD3D_SM4_DATA_INT = 0x3,
- VKD3D_SM4_DATA_UINT = 0x4,
- VKD3D_SM4_DATA_FLOAT = 0x5,
- VKD3D_SM4_DATA_MIXED = 0x6,
- VKD3D_SM4_DATA_DOUBLE = 0x7,
- VKD3D_SM4_DATA_CONTINUED = 0x8,
- VKD3D_SM4_DATA_UNUSED = 0x9,
-};
-
-enum vkd3d_sm4_sampler_mode
-{
- VKD3D_SM4_SAMPLER_DEFAULT = 0x0,
- VKD3D_SM4_SAMPLER_COMPARISON = 0x1,
-};
-
-enum vkd3d_sm4_shader_data_type
-{
- VKD3D_SM4_SHADER_DATA_IMMEDIATE_CONSTANT_BUFFER = 0x3,
- VKD3D_SM4_SHADER_DATA_MESSAGE = 0x4,
-};
+#include "sm4.h"
struct vkd3d_shader_src_param_entry
{
diff --git a/libs/vkd3d-shader/sm4.h b/libs/vkd3d-shader/sm4.h
new file mode 100644
index 00000000..c94a73d4
--- /dev/null
+++ b/libs/vkd3d-shader/sm4.h
@@ -0,0 +1,488 @@
+/*
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __VKD3D_SM4_H
+#define __VKD3D_SM4_H
+
+#define VKD3D_SM4_PS 0x0000u
+#define VKD3D_SM4_VS 0x0001u
+#define VKD3D_SM4_GS 0x0002u
+#define VKD3D_SM5_HS 0x0003u
+#define VKD3D_SM5_DS 0x0004u
+#define VKD3D_SM5_CS 0x0005u
+
+#define VKD3D_SM4_INSTRUCTION_MODIFIER (0x1u << 31)
+
+#define VKD3D_SM4_MODIFIER_MASK 0x3fu
+
+#define VKD3D_SM5_MODIFIER_DATA_TYPE_SHIFT 6
+#define VKD3D_SM5_MODIFIER_DATA_TYPE_MASK (0xffffu << VKD3D_SM5_MODIFIER_DATA_TYPE_SHIFT)
+
+#define VKD3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT 6
+#define VKD3D_SM5_MODIFIER_RESOURCE_TYPE_MASK (0xfu << VKD3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT)
+
+#define VKD3D_SM5_MODIFIER_RESOURCE_STRIDE_SHIFT 11
+#define VKD3D_SM5_MODIFIER_RESOURCE_STRIDE_MASK (0xfffu << VKD3D_SM5_MODIFIER_RESOURCE_STRIDE_SHIFT)
+
+#define VKD3D_SM4_AOFFIMMI_U_SHIFT 9
+#define VKD3D_SM4_AOFFIMMI_U_MASK (0xfu << VKD3D_SM4_AOFFIMMI_U_SHIFT)
+#define VKD3D_SM4_AOFFIMMI_V_SHIFT 13
+#define VKD3D_SM4_AOFFIMMI_V_MASK (0xfu << VKD3D_SM4_AOFFIMMI_V_SHIFT)
+#define VKD3D_SM4_AOFFIMMI_W_SHIFT 17
+#define VKD3D_SM4_AOFFIMMI_W_MASK (0xfu << VKD3D_SM4_AOFFIMMI_W_SHIFT)
+
+#define VKD3D_SM4_INSTRUCTION_LENGTH_SHIFT 24
+#define VKD3D_SM4_INSTRUCTION_LENGTH_MASK (0x1fu << VKD3D_SM4_INSTRUCTION_LENGTH_SHIFT)
+
+#define VKD3D_SM4_INSTRUCTION_FLAGS_SHIFT 11
+#define VKD3D_SM4_INSTRUCTION_FLAGS_MASK (0x7u << VKD3D_SM4_INSTRUCTION_FLAGS_SHIFT)
+
+#define VKD3D_SM4_RESOURCE_TYPE_SHIFT 11
+#define VKD3D_SM4_RESOURCE_TYPE_MASK (0xfu << VKD3D_SM4_RESOURCE_TYPE_SHIFT)
+
+#define VKD3D_SM4_PRIMITIVE_TYPE_SHIFT 11
+#define VKD3D_SM4_PRIMITIVE_TYPE_MASK (0x3fu << VKD3D_SM4_PRIMITIVE_TYPE_SHIFT)
+
+#define VKD3D_SM4_INDEX_TYPE_SHIFT 11
+#define VKD3D_SM4_INDEX_TYPE_MASK (0x1u << VKD3D_SM4_INDEX_TYPE_SHIFT)
+
+#define VKD3D_SM4_SAMPLER_MODE_SHIFT 11
+#define VKD3D_SM4_SAMPLER_MODE_MASK (0xfu << VKD3D_SM4_SAMPLER_MODE_SHIFT)
+
+#define VKD3D_SM4_SHADER_DATA_TYPE_SHIFT 11
+#define VKD3D_SM4_SHADER_DATA_TYPE_MASK (0xfu << VKD3D_SM4_SHADER_DATA_TYPE_SHIFT)
+
+#define VKD3D_SM4_INTERPOLATION_MODE_SHIFT 11
+#define VKD3D_SM4_INTERPOLATION_MODE_MASK (0xfu << VKD3D_SM4_INTERPOLATION_MODE_SHIFT)
+
+#define VKD3D_SM4_GLOBAL_FLAGS_SHIFT 11
+#define VKD3D_SM4_GLOBAL_FLAGS_MASK (0xffu << VKD3D_SM4_GLOBAL_FLAGS_SHIFT)
+
+#define VKD3D_SM5_PRECISE_SHIFT 19
+#define VKD3D_SM5_PRECISE_MASK (0xfu << VKD3D_SM5_PRECISE_SHIFT)
+
+#define VKD3D_SM5_CONTROL_POINT_COUNT_SHIFT 11
+#define VKD3D_SM5_CONTROL_POINT_COUNT_MASK (0xffu << VKD3D_SM5_CONTROL_POINT_COUNT_SHIFT)
+
+#define VKD3D_SM5_FP_ARRAY_SIZE_SHIFT 16
+#define VKD3D_SM5_FP_TABLE_COUNT_MASK 0xffffu
+
+#define VKD3D_SM5_UAV_FLAGS_SHIFT 15
+#define VKD3D_SM5_UAV_FLAGS_MASK (0x1ffu << VKD3D_SM5_UAV_FLAGS_SHIFT)
+
+#define VKD3D_SM5_SYNC_FLAGS_SHIFT 11
+#define VKD3D_SM5_SYNC_FLAGS_MASK (0xffu << VKD3D_SM5_SYNC_FLAGS_SHIFT)
+
+#define VKD3D_SM5_TESSELLATOR_SHIFT 11
+#define VKD3D_SM5_TESSELLATOR_MASK (0xfu << VKD3D_SM5_TESSELLATOR_SHIFT)
+
+#define VKD3D_SM4_OPCODE_MASK 0xff
+
+#define VKD3D_SM4_REGISTER_MODIFIER (0x1u << 31)
+
+#define VKD3D_SM4_ADDRESSING_SHIFT2 28
+#define VKD3D_SM4_ADDRESSING_MASK2 (0x3u << VKD3D_SM4_ADDRESSING_SHIFT2)
+
+#define VKD3D_SM4_ADDRESSING_SHIFT1 25
+#define VKD3D_SM4_ADDRESSING_MASK1 (0x3u << VKD3D_SM4_ADDRESSING_SHIFT1)
+
+#define VKD3D_SM4_ADDRESSING_SHIFT0 22
+#define VKD3D_SM4_ADDRESSING_MASK0 (0x3u << VKD3D_SM4_ADDRESSING_SHIFT0)
+
+#define VKD3D_SM4_REGISTER_ORDER_SHIFT 20
+#define VKD3D_SM4_REGISTER_ORDER_MASK (0x3u << VKD3D_SM4_REGISTER_ORDER_SHIFT)
+
+#define VKD3D_SM4_REGISTER_TYPE_SHIFT 12
+#define VKD3D_SM4_REGISTER_TYPE_MASK (0xffu << VKD3D_SM4_REGISTER_TYPE_SHIFT)
+
+#define VKD3D_SM4_SWIZZLE_TYPE_SHIFT 2
+#define VKD3D_SM4_SWIZZLE_TYPE_MASK (0x3u << VKD3D_SM4_SWIZZLE_TYPE_SHIFT)
+
+#define VKD3D_SM4_DIMENSION_SHIFT 0
+#define VKD3D_SM4_DIMENSION_MASK (0x3u << VKD3D_SM4_DIMENSION_SHIFT)
+
+#define VKD3D_SM4_WRITEMASK_SHIFT 4
+#define VKD3D_SM4_WRITEMASK_MASK (0xfu << VKD3D_SM4_WRITEMASK_SHIFT)
+
+#define VKD3D_SM4_SWIZZLE_SHIFT 4
+#define VKD3D_SM4_SWIZZLE_MASK (0xffu << VKD3D_SM4_SWIZZLE_SHIFT)
+
+#define VKD3D_SM4_VERSION_MAJOR(version) (((version) >> 4) & 0xf)
+#define VKD3D_SM4_VERSION_MINOR(version) (((version) >> 0) & 0xf)
+
+#define VKD3D_SM4_ADDRESSING_RELATIVE 0x2
+#define VKD3D_SM4_ADDRESSING_OFFSET 0x1
+
+#define VKD3D_SM4_INSTRUCTION_FLAG_SATURATE 0x4
+
+#define VKD3D_SM4_CONDITIONAL_NZ (0x1u << 18)
+
+#define VKD3D_SM4_TYPE_COMPONENT(com, i) (((com) >> (4 * (i))) & 0xfu)
+
+enum vkd3d_sm4_opcode
+{
+ VKD3D_SM4_OP_ADD = 0x00,
+ VKD3D_SM4_OP_AND = 0x01,
+ VKD3D_SM4_OP_BREAK = 0x02,
+ VKD3D_SM4_OP_BREAKC = 0x03,
+ VKD3D_SM4_OP_CASE = 0x06,
+ VKD3D_SM4_OP_CONTINUE = 0x07,
+ VKD3D_SM4_OP_CONTINUEC = 0x08,
+ VKD3D_SM4_OP_CUT = 0x09,
+ VKD3D_SM4_OP_DEFAULT = 0x0a,
+ VKD3D_SM4_OP_DERIV_RTX = 0x0b,
+ VKD3D_SM4_OP_DERIV_RTY = 0x0c,
+ VKD3D_SM4_OP_DISCARD = 0x0d,
+ VKD3D_SM4_OP_DIV = 0x0e,
+ VKD3D_SM4_OP_DP2 = 0x0f,
+ VKD3D_SM4_OP_DP3 = 0x10,
+ VKD3D_SM4_OP_DP4 = 0x11,
+ VKD3D_SM4_OP_ELSE = 0x12,
+ VKD3D_SM4_OP_EMIT = 0x13,
+ VKD3D_SM4_OP_ENDIF = 0x15,
+ VKD3D_SM4_OP_ENDLOOP = 0x16,
+ VKD3D_SM4_OP_ENDSWITCH = 0x17,
+ VKD3D_SM4_OP_EQ = 0x18,
+ VKD3D_SM4_OP_EXP = 0x19,
+ VKD3D_SM4_OP_FRC = 0x1a,
+ VKD3D_SM4_OP_FTOI = 0x1b,
+ VKD3D_SM4_OP_FTOU = 0x1c,
+ VKD3D_SM4_OP_GE = 0x1d,
+ VKD3D_SM4_OP_IADD = 0x1e,
+ VKD3D_SM4_OP_IF = 0x1f,
+ VKD3D_SM4_OP_IEQ = 0x20,
+ VKD3D_SM4_OP_IGE = 0x21,
+ VKD3D_SM4_OP_ILT = 0x22,
+ VKD3D_SM4_OP_IMAD = 0x23,
+ VKD3D_SM4_OP_IMAX = 0x24,
+ VKD3D_SM4_OP_IMIN = 0x25,
+ VKD3D_SM4_OP_IMUL = 0x26,
+ VKD3D_SM4_OP_INE = 0x27,
+ VKD3D_SM4_OP_INEG = 0x28,
+ VKD3D_SM4_OP_ISHL = 0x29,
+ VKD3D_SM4_OP_ISHR = 0x2a,
+ VKD3D_SM4_OP_ITOF = 0x2b,
+ VKD3D_SM4_OP_LABEL = 0x2c,
+ VKD3D_SM4_OP_LD = 0x2d,
+ VKD3D_SM4_OP_LD2DMS = 0x2e,
+ VKD3D_SM4_OP_LOG = 0x2f,
+ VKD3D_SM4_OP_LOOP = 0x30,
+ VKD3D_SM4_OP_LT = 0x31,
+ VKD3D_SM4_OP_MAD = 0x32,
+ VKD3D_SM4_OP_MIN = 0x33,
+ VKD3D_SM4_OP_MAX = 0x34,
+ VKD3D_SM4_OP_SHADER_DATA = 0x35,
+ VKD3D_SM4_OP_MOV = 0x36,
+ VKD3D_SM4_OP_MOVC = 0x37,
+ VKD3D_SM4_OP_MUL = 0x38,
+ VKD3D_SM4_OP_NE = 0x39,
+ VKD3D_SM4_OP_NOP = 0x3a,
+ VKD3D_SM4_OP_NOT = 0x3b,
+ VKD3D_SM4_OP_OR = 0x3c,
+ VKD3D_SM4_OP_RESINFO = 0x3d,
+ VKD3D_SM4_OP_RET = 0x3e,
+ VKD3D_SM4_OP_RETC = 0x3f,
+ VKD3D_SM4_OP_ROUND_NE = 0x40,
+ VKD3D_SM4_OP_ROUND_NI = 0x41,
+ VKD3D_SM4_OP_ROUND_PI = 0x42,
+ VKD3D_SM4_OP_ROUND_Z = 0x43,
+ VKD3D_SM4_OP_RSQ = 0x44,
+ VKD3D_SM4_OP_SAMPLE = 0x45,
+ VKD3D_SM4_OP_SAMPLE_C = 0x46,
+ VKD3D_SM4_OP_SAMPLE_C_LZ = 0x47,
+ VKD3D_SM4_OP_SAMPLE_LOD = 0x48,
+ VKD3D_SM4_OP_SAMPLE_GRAD = 0x49,
+ VKD3D_SM4_OP_SAMPLE_B = 0x4a,
+ VKD3D_SM4_OP_SQRT = 0x4b,
+ VKD3D_SM4_OP_SWITCH = 0x4c,
+ VKD3D_SM4_OP_SINCOS = 0x4d,
+ VKD3D_SM4_OP_UDIV = 0x4e,
+ VKD3D_SM4_OP_ULT = 0x4f,
+ VKD3D_SM4_OP_UGE = 0x50,
+ VKD3D_SM4_OP_UMUL = 0x51,
+ VKD3D_SM4_OP_UMAX = 0x53,
+ VKD3D_SM4_OP_UMIN = 0x54,
+ VKD3D_SM4_OP_USHR = 0x55,
+ VKD3D_SM4_OP_UTOF = 0x56,
+ VKD3D_SM4_OP_XOR = 0x57,
+ VKD3D_SM4_OP_DCL_RESOURCE = 0x58,
+ VKD3D_SM4_OP_DCL_CONSTANT_BUFFER = 0x59,
+ VKD3D_SM4_OP_DCL_SAMPLER = 0x5a,
+ VKD3D_SM4_OP_DCL_INDEX_RANGE = 0x5b,
+ VKD3D_SM4_OP_DCL_OUTPUT_TOPOLOGY = 0x5c,
+ VKD3D_SM4_OP_DCL_INPUT_PRIMITIVE = 0x5d,
+ VKD3D_SM4_OP_DCL_VERTICES_OUT = 0x5e,
+ VKD3D_SM4_OP_DCL_INPUT = 0x5f,
+ VKD3D_SM4_OP_DCL_INPUT_SGV = 0x60,
+ VKD3D_SM4_OP_DCL_INPUT_SIV = 0x61,
+ VKD3D_SM4_OP_DCL_INPUT_PS = 0x62,
+ VKD3D_SM4_OP_DCL_INPUT_PS_SGV = 0x63,
+ VKD3D_SM4_OP_DCL_INPUT_PS_SIV = 0x64,
+ VKD3D_SM4_OP_DCL_OUTPUT = 0x65,
+ VKD3D_SM4_OP_DCL_OUTPUT_SIV = 0x67,
+ VKD3D_SM4_OP_DCL_TEMPS = 0x68,
+ VKD3D_SM4_OP_DCL_INDEXABLE_TEMP = 0x69,
+ VKD3D_SM4_OP_DCL_GLOBAL_FLAGS = 0x6a,
+ VKD3D_SM4_OP_LOD = 0x6c,
+ VKD3D_SM4_OP_GATHER4 = 0x6d,
+ VKD3D_SM4_OP_SAMPLE_POS = 0x6e,
+ VKD3D_SM4_OP_SAMPLE_INFO = 0x6f,
+ VKD3D_SM5_OP_HS_DECLS = 0x71,
+ VKD3D_SM5_OP_HS_CONTROL_POINT_PHASE = 0x72,
+ VKD3D_SM5_OP_HS_FORK_PHASE = 0x73,
+ VKD3D_SM5_OP_HS_JOIN_PHASE = 0x74,
+ VKD3D_SM5_OP_EMIT_STREAM = 0x75,
+ VKD3D_SM5_OP_CUT_STREAM = 0x76,
+ VKD3D_SM5_OP_FCALL = 0x78,
+ VKD3D_SM5_OP_BUFINFO = 0x79,
+ VKD3D_SM5_OP_DERIV_RTX_COARSE = 0x7a,
+ VKD3D_SM5_OP_DERIV_RTX_FINE = 0x7b,
+ VKD3D_SM5_OP_DERIV_RTY_COARSE = 0x7c,
+ VKD3D_SM5_OP_DERIV_RTY_FINE = 0x7d,
+ VKD3D_SM5_OP_GATHER4_C = 0x7e,
+ VKD3D_SM5_OP_GATHER4_PO = 0x7f,
+ VKD3D_SM5_OP_GATHER4_PO_C = 0x80,
+ VKD3D_SM5_OP_RCP = 0x81,
+ VKD3D_SM5_OP_F32TOF16 = 0x82,
+ VKD3D_SM5_OP_F16TOF32 = 0x83,
+ VKD3D_SM5_OP_COUNTBITS = 0x86,
+ VKD3D_SM5_OP_FIRSTBIT_HI = 0x87,
+ VKD3D_SM5_OP_FIRSTBIT_LO = 0x88,
+ VKD3D_SM5_OP_FIRSTBIT_SHI = 0x89,
+ VKD3D_SM5_OP_UBFE = 0x8a,
+ VKD3D_SM5_OP_IBFE = 0x8b,
+ VKD3D_SM5_OP_BFI = 0x8c,
+ VKD3D_SM5_OP_BFREV = 0x8d,
+ VKD3D_SM5_OP_SWAPC = 0x8e,
+ VKD3D_SM5_OP_DCL_STREAM = 0x8f,
+ VKD3D_SM5_OP_DCL_FUNCTION_BODY = 0x90,
+ VKD3D_SM5_OP_DCL_FUNCTION_TABLE = 0x91,
+ VKD3D_SM5_OP_DCL_INTERFACE = 0x92,
+ VKD3D_SM5_OP_DCL_INPUT_CONTROL_POINT_COUNT = 0x93,
+ VKD3D_SM5_OP_DCL_OUTPUT_CONTROL_POINT_COUNT = 0x94,
+ VKD3D_SM5_OP_DCL_TESSELLATOR_DOMAIN = 0x95,
+ VKD3D_SM5_OP_DCL_TESSELLATOR_PARTITIONING = 0x96,
+ VKD3D_SM5_OP_DCL_TESSELLATOR_OUTPUT_PRIMITIVE = 0x97,
+ VKD3D_SM5_OP_DCL_HS_MAX_TESSFACTOR = 0x98,
+ VKD3D_SM5_OP_DCL_HS_FORK_PHASE_INSTANCE_COUNT = 0x99,
+ VKD3D_SM5_OP_DCL_HS_JOIN_PHASE_INSTANCE_COUNT = 0x9a,
+ VKD3D_SM5_OP_DCL_THREAD_GROUP = 0x9b,
+ VKD3D_SM5_OP_DCL_UAV_TYPED = 0x9c,
+ VKD3D_SM5_OP_DCL_UAV_RAW = 0x9d,
+ VKD3D_SM5_OP_DCL_UAV_STRUCTURED = 0x9e,
+ VKD3D_SM5_OP_DCL_TGSM_RAW = 0x9f,
+ VKD3D_SM5_OP_DCL_TGSM_STRUCTURED = 0xa0,
+ VKD3D_SM5_OP_DCL_RESOURCE_RAW = 0xa1,
+ VKD3D_SM5_OP_DCL_RESOURCE_STRUCTURED = 0xa2,
+ VKD3D_SM5_OP_LD_UAV_TYPED = 0xa3,
+ VKD3D_SM5_OP_STORE_UAV_TYPED = 0xa4,
+ VKD3D_SM5_OP_LD_RAW = 0xa5,
+ VKD3D_SM5_OP_STORE_RAW = 0xa6,
+ VKD3D_SM5_OP_LD_STRUCTURED = 0xa7,
+ VKD3D_SM5_OP_STORE_STRUCTURED = 0xa8,
+ VKD3D_SM5_OP_ATOMIC_AND = 0xa9,
+ VKD3D_SM5_OP_ATOMIC_OR = 0xaa,
+ VKD3D_SM5_OP_ATOMIC_XOR = 0xab,
+ VKD3D_SM5_OP_ATOMIC_CMP_STORE = 0xac,
+ VKD3D_SM5_OP_ATOMIC_IADD = 0xad,
+ VKD3D_SM5_OP_ATOMIC_IMAX = 0xae,
+ VKD3D_SM5_OP_ATOMIC_IMIN = 0xaf,
+ VKD3D_SM5_OP_ATOMIC_UMAX = 0xb0,
+ VKD3D_SM5_OP_ATOMIC_UMIN = 0xb1,
+ VKD3D_SM5_OP_IMM_ATOMIC_ALLOC = 0xb2,
+ VKD3D_SM5_OP_IMM_ATOMIC_CONSUME = 0xb3,
+ VKD3D_SM5_OP_IMM_ATOMIC_IADD = 0xb4,
+ VKD3D_SM5_OP_IMM_ATOMIC_AND = 0xb5,
+ VKD3D_SM5_OP_IMM_ATOMIC_OR = 0xb6,
+ VKD3D_SM5_OP_IMM_ATOMIC_XOR = 0xb7,
+ VKD3D_SM5_OP_IMM_ATOMIC_EXCH = 0xb8,
+ VKD3D_SM5_OP_IMM_ATOMIC_CMP_EXCH = 0xb9,
+ VKD3D_SM5_OP_IMM_ATOMIC_IMAX = 0xba,
+ VKD3D_SM5_OP_IMM_ATOMIC_IMIN = 0xbb,
+ VKD3D_SM5_OP_IMM_ATOMIC_UMAX = 0xbc,
+ VKD3D_SM5_OP_IMM_ATOMIC_UMIN = 0xbd,
+ VKD3D_SM5_OP_SYNC = 0xbe,
+ VKD3D_SM5_OP_DADD = 0xbf,
+ VKD3D_SM5_OP_DEQ = 0xc3,
+ VKD3D_SM5_OP_DGE = 0xc4,
+ VKD3D_SM5_OP_DLT = 0xc5,
+ VKD3D_SM5_OP_DNE = 0xc6,
+ VKD3D_SM5_OP_DMOV = 0xc7,
+ VKD3D_SM5_OP_EVAL_SAMPLE_INDEX = 0xcc,
+ VKD3D_SM5_OP_EVAL_CENTROID = 0xcd,
+ VKD3D_SM5_OP_DCL_GS_INSTANCES = 0xce,
+};
+
+enum vkd3d_sm4_instruction_modifier
+{
+ VKD3D_SM4_MODIFIER_AOFFIMMI = 0x1,
+ VKD3D_SM5_MODIFIER_RESOURCE_TYPE = 0x2,
+ VKD3D_SM5_MODIFIER_DATA_TYPE = 0x3,
+};
+
+enum vkd3d_sm4_register_type
+{
+ VKD3D_SM4_RT_TEMP = 0x00,
+ VKD3D_SM4_RT_INPUT = 0x01,
+ VKD3D_SM4_RT_OUTPUT = 0x02,
+ VKD3D_SM4_RT_INDEXABLE_TEMP = 0x03,
+ VKD3D_SM4_RT_IMMCONST = 0x04,
+ VKD3D_SM4_RT_IMMCONST64 = 0x05,
+ VKD3D_SM4_RT_SAMPLER = 0x06,
+ VKD3D_SM4_RT_RESOURCE = 0x07,
+ VKD3D_SM4_RT_CONSTBUFFER = 0x08,
+ VKD3D_SM4_RT_IMMCONSTBUFFER = 0x09,
+ VKD3D_SM4_RT_PRIMID = 0x0b,
+ VKD3D_SM4_RT_DEPTHOUT = 0x0c,
+ VKD3D_SM4_RT_NULL = 0x0d,
+ VKD3D_SM4_RT_RASTERIZER = 0x0e,
+ VKD3D_SM4_RT_OMASK = 0x0f,
+ VKD3D_SM5_RT_STREAM = 0x10,
+ VKD3D_SM5_RT_FUNCTION_BODY = 0x11,
+ VKD3D_SM5_RT_FUNCTION_POINTER = 0x13,
+ VKD3D_SM5_RT_OUTPUT_CONTROL_POINT_ID = 0x16,
+ VKD3D_SM5_RT_FORK_INSTANCE_ID = 0x17,
+ VKD3D_SM5_RT_JOIN_INSTANCE_ID = 0x18,
+ VKD3D_SM5_RT_INPUT_CONTROL_POINT = 0x19,
+ VKD3D_SM5_RT_OUTPUT_CONTROL_POINT = 0x1a,
+ VKD3D_SM5_RT_PATCH_CONSTANT_DATA = 0x1b,
+ VKD3D_SM5_RT_DOMAIN_LOCATION = 0x1c,
+ VKD3D_SM5_RT_UAV = 0x1e,
+ VKD3D_SM5_RT_SHARED_MEMORY = 0x1f,
+ VKD3D_SM5_RT_THREAD_ID = 0x20,
+ VKD3D_SM5_RT_THREAD_GROUP_ID = 0x21,
+ VKD3D_SM5_RT_LOCAL_THREAD_ID = 0x22,
+ VKD3D_SM5_RT_COVERAGE = 0x23,
+ VKD3D_SM5_RT_LOCAL_THREAD_INDEX = 0x24,
+ VKD3D_SM5_RT_GS_INSTANCE_ID = 0x25,
+ VKD3D_SM5_RT_DEPTHOUT_GREATER_EQUAL = 0x26,
+ VKD3D_SM5_RT_DEPTHOUT_LESS_EQUAL = 0x27,
+};
+
+enum vkd3d_sm4_register_modifier
+{
+ VKD3D_SM4_REGISTER_MODIFIER_NONE = 0x01,
+ VKD3D_SM4_REGISTER_MODIFIER_NEGATE = 0x41,
+ VKD3D_SM4_REGISTER_MODIFIER_ABS = 0x81,
+ VKD3D_SM4_REGISTER_MODIFIER_ABS_NEGATE = 0xc1,
+};
+
+enum vkd3d_sm4_output_primitive_type
+{
+ VKD3D_SM4_OUTPUT_PT_POINTLIST = 0x1,
+ VKD3D_SM4_OUTPUT_PT_LINESTRIP = 0x3,
+ VKD3D_SM4_OUTPUT_PT_TRIANGLESTRIP = 0x5,
+};
+
+enum vkd3d_sm4_input_primitive_type
+{
+ VKD3D_SM4_INPUT_PT_POINT = 0x01,
+ VKD3D_SM4_INPUT_PT_LINE = 0x02,
+ VKD3D_SM4_INPUT_PT_TRIANGLE = 0x03,
+ VKD3D_SM4_INPUT_PT_LINEADJ = 0x06,
+ VKD3D_SM4_INPUT_PT_TRIANGLEADJ = 0x07,
+ VKD3D_SM5_INPUT_PT_PATCH1 = 0x08,
+ VKD3D_SM5_INPUT_PT_PATCH2 = 0x09,
+ VKD3D_SM5_INPUT_PT_PATCH3 = 0x0a,
+ VKD3D_SM5_INPUT_PT_PATCH4 = 0x0b,
+ VKD3D_SM5_INPUT_PT_PATCH5 = 0x0c,
+ VKD3D_SM5_INPUT_PT_PATCH6 = 0x0d,
+ VKD3D_SM5_INPUT_PT_PATCH7 = 0x0e,
+ VKD3D_SM5_INPUT_PT_PATCH8 = 0x0f,
+ VKD3D_SM5_INPUT_PT_PATCH9 = 0x10,
+ VKD3D_SM5_INPUT_PT_PATCH10 = 0x11,
+ VKD3D_SM5_INPUT_PT_PATCH11 = 0x12,
+ VKD3D_SM5_INPUT_PT_PATCH12 = 0x13,
+ VKD3D_SM5_INPUT_PT_PATCH13 = 0x14,
+ VKD3D_SM5_INPUT_PT_PATCH14 = 0x15,
+ VKD3D_SM5_INPUT_PT_PATCH15 = 0x16,
+ VKD3D_SM5_INPUT_PT_PATCH16 = 0x17,
+ VKD3D_SM5_INPUT_PT_PATCH17 = 0x18,
+ VKD3D_SM5_INPUT_PT_PATCH18 = 0x19,
+ VKD3D_SM5_INPUT_PT_PATCH19 = 0x1a,
+ VKD3D_SM5_INPUT_PT_PATCH20 = 0x1b,
+ VKD3D_SM5_INPUT_PT_PATCH21 = 0x1c,
+ VKD3D_SM5_INPUT_PT_PATCH22 = 0x1d,
+ VKD3D_SM5_INPUT_PT_PATCH23 = 0x1e,
+ VKD3D_SM5_INPUT_PT_PATCH24 = 0x1f,
+ VKD3D_SM5_INPUT_PT_PATCH25 = 0x20,
+ VKD3D_SM5_INPUT_PT_PATCH26 = 0x21,
+ VKD3D_SM5_INPUT_PT_PATCH27 = 0x22,
+ VKD3D_SM5_INPUT_PT_PATCH28 = 0x23,
+ VKD3D_SM5_INPUT_PT_PATCH29 = 0x24,
+ VKD3D_SM5_INPUT_PT_PATCH30 = 0x25,
+ VKD3D_SM5_INPUT_PT_PATCH31 = 0x26,
+ VKD3D_SM5_INPUT_PT_PATCH32 = 0x27,
+};
+
+enum vkd3d_sm4_swizzle_type
+{
+ VKD3D_SM4_SWIZZLE_NONE = 0x0,
+ VKD3D_SM4_SWIZZLE_VEC4 = 0x1,
+ VKD3D_SM4_SWIZZLE_SCALAR = 0x2,
+};
+
+enum vkd3d_sm4_dimension
+{
+ VKD3D_SM4_DIMENSION_NONE = 0x0,
+ VKD3D_SM4_DIMENSION_SCALAR = 0x1,
+ VKD3D_SM4_DIMENSION_VEC4 = 0x2,
+};
+
+enum vkd3d_sm4_resource_type
+{
+ VKD3D_SM4_RESOURCE_BUFFER = 0x1,
+ VKD3D_SM4_RESOURCE_TEXTURE_1D = 0x2,
+ VKD3D_SM4_RESOURCE_TEXTURE_2D = 0x3,
+ VKD3D_SM4_RESOURCE_TEXTURE_2DMS = 0x4,
+ VKD3D_SM4_RESOURCE_TEXTURE_3D = 0x5,
+ VKD3D_SM4_RESOURCE_TEXTURE_CUBE = 0x6,
+ VKD3D_SM4_RESOURCE_TEXTURE_1DARRAY = 0x7,
+ VKD3D_SM4_RESOURCE_TEXTURE_2DARRAY = 0x8,
+ VKD3D_SM4_RESOURCE_TEXTURE_2DMSARRAY = 0x9,
+ VKD3D_SM4_RESOURCE_TEXTURE_CUBEARRAY = 0xa,
+ VKD3D_SM4_RESOURCE_RAW_BUFFER = 0xb,
+ VKD3D_SM4_RESOURCE_STRUCTURED_BUFFER = 0xc,
+};
+
+enum vkd3d_sm4_data_type
+{
+ VKD3D_SM4_DATA_UNORM = 0x1,
+ VKD3D_SM4_DATA_SNORM = 0x2,
+ VKD3D_SM4_DATA_INT = 0x3,
+ VKD3D_SM4_DATA_UINT = 0x4,
+ VKD3D_SM4_DATA_FLOAT = 0x5,
+ VKD3D_SM4_DATA_MIXED = 0x6,
+ VKD3D_SM4_DATA_DOUBLE = 0x7,
+ VKD3D_SM4_DATA_CONTINUED = 0x8,
+ VKD3D_SM4_DATA_UNUSED = 0x9,
+};
+
+enum vkd3d_sm4_sampler_mode
+{
+ VKD3D_SM4_SAMPLER_DEFAULT = 0x0,
+ VKD3D_SM4_SAMPLER_COMPARISON = 0x1,
+};
+
+enum vkd3d_sm4_shader_data_type
+{
+ VKD3D_SM4_SHADER_DATA_IMMEDIATE_CONSTANT_BUFFER = 0x3,
+ VKD3D_SM4_SHADER_DATA_MESSAGE = 0x4,
+};
+
+#endif /* __VKD3D_SM4_H */
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 76704d5a..85859e84 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -555,19 +555,6 @@ enum vkd3d_shader_conditional_op
VKD3D_SHADER_CONDITIONAL_OP_Z = 1
};
-#define VKD3D_SM1_VS 0xfffeu
-#define VKD3D_SM1_PS 0xffffu
-#define VKD3D_SM4_PS 0x0000u
-#define VKD3D_SM4_VS 0x0001u
-#define VKD3D_SM4_GS 0x0002u
-#define VKD3D_SM5_HS 0x0003u
-#define VKD3D_SM5_DS 0x0004u
-#define VKD3D_SM5_CS 0x0005u
-
-/* Shader version tokens, and shader end tokens */
-#define VKD3DPS_VERSION(major, minor) ((VKD3D_SM1_PS << 16) | ((major) << 8) | (minor))
-#define VKD3DVS_VERSION(major, minor) ((VKD3D_SM1_VS << 16) | ((major) << 8) | (minor))
-
#define MAX_IMMEDIATE_CONSTANT_BUFFER_SIZE 4096
#define MAX_REG_OUTPUT 32
--
2.32.0
2
1
[PATCH vkd3d] configure: Also extract the cross target from Clang compilers.
by Chip Davis 06 Aug '21
by Chip Davis 06 Aug '21
06 Aug '21
Signed-off-by: Chip Davis <cdavis(a)codeweavers.com>
---
m4/check-mingw-prog.m4 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/m4/check-mingw-prog.m4 b/m4/check-mingw-prog.m4
index ac3e07d..94fe795 100644
--- a/m4/check-mingw-prog.m4
+++ b/m4/check-mingw-prog.m4
@@ -15,7 +15,7 @@ AS_VAR_IF([vkd3d_cross_cc], [$3],
AC_MSG_CHECKING([whether $CC works])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
[AC_MSG_RESULT([yes])
- $2=`expr "$CC" : '\(.*\)-gcc'`],
+ $2=`expr "$CC" : '\(.*\)-gcc' \| "$CC" : '\(.*\)-clang'`],
[AC_MSG_RESULT([no])])
CC="$vkd3d_cc_saved"])
AS_VAR_POPDEF([vkd3d_cross_cc])dnl
@@ -34,7 +34,7 @@ AS_VAR_IF([vkd3d_cross_cc], [$3],
AC_MSG_CHECKING([whether $CC works])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
[AC_MSG_RESULT([yes])
- $2=`expr "$CC" : '\(.*\)-gcc'`],
+ $2=`expr "$CC" : '\(.*\)-gcc' \| "$CC" : '\(.*\)-clang'`],
[AC_MSG_RESULT([no])])
CC="$vkd3d_cc_saved"])
AS_VAR_POPDEF([vkd3d_cross_cc])dnl
--
2.31.1
2
1
06 Aug '21
Neither MinGW's nor Microsoft's <windows.h> includes <stddef.h>, either
directly or indirectly. Also, unlike GCC, Clang's <inttypes.h> does not
include <stddef.h>, either. "vkd3d_windows.h" does include <stddef.h>,
and this is why building for the host works, even with Clang.
Fixes cross compilation errors with Clang related to using offsetof(3).
Signed-off-by: Chip Davis <cdavis(a)codeweavers.com>
---
tests/d3d12_crosstest.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h
index 43af375..0b77bde 100644
--- a/tests/d3d12_crosstest.h
+++ b/tests/d3d12_crosstest.h
@@ -52,6 +52,7 @@ typedef int HRESULT;
#include <inttypes.h>
#include <limits.h>
#include <math.h>
+#include <stddef.h>
#include <time.h>
#ifdef _WIN32
--
2.31.1
2
1
06 Aug '21
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/d3dx10_43/d3dx10_43_main.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx10_43/d3dx10_43_main.c b/dlls/d3dx10_43/d3dx10_43_main.c
index 06b00cb0393..650645362ea 100644
--- a/dlls/d3dx10_43/d3dx10_43_main.c
+++ b/dlls/d3dx10_43/d3dx10_43_main.c
@@ -32,6 +32,7 @@
#include "d3d10_1.h"
#include "d3dx10.h"
+#include "d3dcompiler.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
@@ -79,12 +80,29 @@ HRESULT WINAPI D3DX10CreateEffectFromMemory(const void *data, SIZE_T datasize, c
UINT fxflags, ID3D10Device *device, ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump,
ID3D10Effect **effect, ID3D10Blob **errors, HRESULT *hresult)
{
- FIXME("data %p, datasize %lu, filename %s, defines %p, include %p, profile %s, hlslflags %#x, fxflags %#x, "
+ ID3D10Blob *code;
+ HRESULT hr;
+
+ TRACE("data %p, datasize %lu, filename %s, defines %p, include %p, profile %s, hlslflags %#x, fxflags %#x, "
"device %p, effectpool %p, pump %p, effect %p, errors %p, hresult %p\n",
data, datasize, debugstr_a(filename), defines, include, debugstr_a(profile), hlslflags, fxflags, device,
effectpool, pump, effect, errors, hresult);
- return E_NOTIMPL;
+ if (pump)
+ FIXME("Asynchronous mode is not supported.\n");
+
+ if (FAILED(hr = D3DCompile(data, datasize, filename, defines, include, NULL, profile,
+ hlslflags, fxflags, &code, errors)))
+ {
+ WARN("Effect compilation failed, hr %#x.\n", hr);
+ return hr;
+ }
+
+ hr = D3D10CreateEffectFromMemory(ID3D10Blob_GetBufferPointer(code), ID3D10Blob_GetBufferSize(code),
+ fxflags, device, effectpool, effect);
+ ID3D10Blob_Release(code);
+
+ return hr;
}
HRESULT WINAPI D3DX10CreateEffectPoolFromMemory(const void *data, SIZE_T datasize, const char *filename,
--
2.30.2
1
1
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/xinput1_3/hid.c | 49 ++++++++++++++++++++++++++++++++-
dlls/xinput1_3/xinput_main.c | 2 +-
dlls/xinput1_3/xinput_private.h | 2 +-
3 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/dlls/xinput1_3/hid.c b/dlls/xinput1_3/hid.c
index 00907b54bed..176e18fd95c 100644
--- a/dlls/xinput1_3/hid.c
+++ b/dlls/xinput1_3/hid.c
@@ -70,6 +70,8 @@ struct hid_platform_private {
};
static DWORD last_check = 0;
+static HANDLE stop_event;
+static HANDLE done_event;
static BOOL find_opened_device(SP_DEVICE_INTERFACE_DETAIL_DATA_W *detail, int *free_slot)
{
@@ -85,6 +87,40 @@ static BOOL find_opened_device(SP_DEVICE_INTERFACE_DETAIL_DATA_W *detail, int *f
return FALSE;
}
+static DWORD WINAPI hid_update_thread_proc(void *param)
+{
+ HANDLE events[1];
+ DWORD count, ret;
+
+ do
+ {
+ count = 0;
+ events[count++] = stop_event;
+ }
+ while ((ret = WaitForMultipleObjectsEx( count, events, FALSE, INFINITE, TRUE )) < count - 1);
+
+ if (ret != count - 1) ERR("update thread exited unexpectedly, ret %u\n", ret);
+ SetEvent(done_event);
+ return ret;
+}
+
+static BOOL WINAPI start_update_thread( INIT_ONCE *once, void *param, void **context )
+{
+ HANDLE thread;
+
+ stop_event = CreateEventA(NULL, FALSE, FALSE, NULL);
+ if (!stop_event) ERR("failed to create stop event, error %u\n", GetLastError());
+
+ done_event = CreateEventA(NULL, FALSE, FALSE, NULL);
+ if (!done_event) ERR("failed to create stop event, error %u\n", GetLastError());
+
+ thread = CreateThread(NULL, 0, hid_update_thread_proc, NULL, 0, NULL);
+ if (!thread) ERR("failed to create update thread, error %u\n", GetLastError());
+ CloseHandle(thread);
+
+ return TRUE;
+}
+
static void MarkUsage(struct hid_platform_private *private, WORD usage, LONG min, LONG max, USHORT bits)
{
struct axis_info info = {min, max-min, bits};
@@ -223,6 +259,8 @@ failed:
void HID_find_gamepads(void)
{
+ static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
+
char buffer[sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W) + MAX_PATH * sizeof(WCHAR)];
SP_DEVICE_INTERFACE_DETAIL_DATA_W *detail = (SP_DEVICE_INTERFACE_DETAIL_DATA_W *)buffer;
HDEVINFO device_info_set;
@@ -235,6 +273,8 @@ void HID_find_gamepads(void)
DWORD idx;
int i;
+ InitOnceExecuteOnce(&init_once, start_update_thread, NULL, NULL);
+
idx = GetTickCount();
if ((idx - last_check) < 2000)
return;
@@ -317,9 +357,16 @@ static void remove_gamepad(xinput_controller *device)
LeaveCriticalSection(&device->crit);
}
-void HID_destroy_gamepads(void)
+void HID_stop_update_thread(void)
{
int i;
+
+ SetEvent(stop_event);
+ WaitForSingleObject(done_event, INFINITE);
+
+ CloseHandle(stop_event);
+ CloseHandle(done_event);
+
for (i = 0; i < XUSER_MAX_COUNT; i++)
remove_gamepad(&controllers[i]);
}
diff --git a/dlls/xinput1_3/xinput_main.c b/dlls/xinput1_3/xinput_main.c
index 2d9f54c83f2..547247dc76e 100644
--- a/dlls/xinput1_3/xinput_main.c
+++ b/dlls/xinput1_3/xinput_main.c
@@ -104,7 +104,7 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved)
break;
case DLL_PROCESS_DETACH:
if (reserved) break;
- HID_destroy_gamepads();
+ HID_stop_update_thread();
break;
}
return TRUE;
diff --git a/dlls/xinput1_3/xinput_private.h b/dlls/xinput1_3/xinput_private.h
index 2bf16c0ffce..79c3023c543 100644
--- a/dlls/xinput1_3/xinput_private.h
+++ b/dlls/xinput1_3/xinput_private.h
@@ -31,7 +31,7 @@ extern CRITICAL_SECTION xinput_crit;
extern xinput_controller controllers[XUSER_MAX_COUNT];
void HID_find_gamepads(void) DECLSPEC_HIDDEN;
-void HID_destroy_gamepads(void) DECLSPEC_HIDDEN;
+void HID_stop_update_thread(void) DECLSPEC_HIDDEN;
void HID_update_state(xinput_controller* device, XINPUT_STATE *state) DECLSPEC_HIDDEN;
DWORD HID_set_state(xinput_controller* device, XINPUT_VIBRATION* state) DECLSPEC_HIDDEN;
void HID_enable(xinput_controller* device, BOOL enable) DECLSPEC_HIDDEN;
--
2.32.0
2
5
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/dnsapi/Makefile.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/dnsapi/Makefile.in b/dlls/dnsapi/Makefile.in
index ae00cf73a9f..d8b33a0533d 100644
--- a/dlls/dnsapi/Makefile.in
+++ b/dlls/dnsapi/Makefile.in
@@ -1,6 +1,6 @@
MODULE = dnsapi.dll
IMPORTLIB = dnsapi
-IMPORTS = netapi32
+DELAYIMPORTS = netapi32
EXTRALIBS = $(RESOLV_LIBS)
EXTRADLLFLAGS = -mno-cygwin
--
2.23.0
2
3
And increasing the polling period, so that first queued read is unlikely
to complete before we queued the second one.
This was meant to test that all pending reads are satisfied at once
after a poll, but it causes some spurious failures as they aren't
satisfied atomically (especially on Wine). As there's an increasing seq
counter in each poll it should be enough to compare the report data.
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
This should help with spurious failure like:
https://test.winehq.org/data/3f2850aeaa159270384764843cdb1dc3cbe902c6/linux…
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
index f5ebf21b7f9..6c4dacf3a2d 100644
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
@@ -2710,12 +2710,12 @@ static void test_hidp(HANDLE file, HANDLE async_file, int report_id, BOOL polled
ok(!ret, "ReadFile succeded\n");
ok(GetLastError() == ERROR_IO_PENDING, "ReadFile returned error %u\n", GetLastError());
- /* wait for first report to be ready */
- ret = GetOverlappedResult(async_file, &overlapped, &value, TRUE);
+ /* wait for second report to be ready */
+ ret = GetOverlappedResult(async_file, &overlapped2, &value, TRUE);
ok(ret, "GetOverlappedResult failed, last error %u\n", GetLastError());
ok(value == (report_id ? 3 : 4), "GetOverlappedResult returned length %u, expected 3\n", value);
- /* second report should be ready and the same */
- ret = GetOverlappedResult(async_file, &overlapped2, &value, FALSE);
+ /* first report should be ready and the same */
+ ret = GetOverlappedResult(async_file, &overlapped, &value, FALSE);
ok(ret, "GetOverlappedResult failed, last error %u\n", GetLastError());
ok(value == (report_id ? 3 : 4), "GetOverlappedResult returned length %u, expected 3\n", value);
ok(memcmp(report, buffer + caps.InputReportByteLength, caps.InputReportByteLength),
@@ -2839,7 +2839,7 @@ static void test_hid_device(DWORD report_id, DWORD polled)
todo_wine ok(poll_freq == 5, "got poll_freq %u, expected 5\n", poll_freq);
out_len = 0;
- poll_freq = 50;
+ poll_freq = 500;
SetLastError(0xdeadbeef);
ret = sync_ioctl(file, IOCTL_HID_SET_POLL_FREQUENCY_MSEC, &poll_freq, sizeof(ULONG), NULL, &out_len);
ok(ret, "IOCTL_HID_GET_POLL_FREQUENCY_MSEC failed last error %u\n", GetLastError());
@@ -2850,14 +2850,14 @@ static void test_hid_device(DWORD report_id, DWORD polled)
ret = sync_ioctl(file, IOCTL_HID_GET_POLL_FREQUENCY_MSEC, NULL, 0, &poll_freq, &out_len);
ok(ret, "IOCTL_HID_GET_POLL_FREQUENCY_MSEC failed last error %u\n", GetLastError());
ok(out_len == sizeof(ULONG), "got out_len %u, expected sizeof(ULONG)\n", out_len);
- ok(poll_freq == 50, "got poll_freq %u, expected 100\n", poll_freq);
+ ok(poll_freq == 500, "got poll_freq %u, expected 100\n", poll_freq);
out_len = sizeof(ULONG);
SetLastError(0xdeadbeef);
ret = sync_ioctl(async_file, IOCTL_HID_GET_POLL_FREQUENCY_MSEC, NULL, 0, &poll_freq, &out_len);
ok(ret, "IOCTL_HID_GET_POLL_FREQUENCY_MSEC failed last error %u\n", GetLastError());
ok(out_len == sizeof(ULONG), "got out_len %u, expected sizeof(ULONG)\n", out_len);
- ok(poll_freq == 50, "got poll_freq %u, expected 100\n", poll_freq);
+ ok(poll_freq == 500, "got poll_freq %u, expected 100\n", poll_freq);
}
test_hidp(file, async_file, report_id, polled);
--
2.32.0
2
6
This addresses
In file included from dlls/nsiproxy.sys/ip.c:29:
/usr/include/net/route.h:59:9: error: unknown type name ‘uint16_t’
and similar errors that show on FreeBSD 11 for example,
Signed-off-by: Gerald Pfeifer <gerald(a)pfeifer.com>
---
dlls/nsiproxy.sys/ip.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/dlls/nsiproxy.sys/ip.c b/dlls/nsiproxy.sys/ip.c
index fa88b8e0819..cb98c6a5206 100644
--- a/dlls/nsiproxy.sys/ip.c
+++ b/dlls/nsiproxy.sys/ip.c
@@ -21,6 +21,10 @@
#include "config.h"
#include <stdarg.h>
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
--
2.31.1
2
1
06 Aug '21
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=50210
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/d3dx11_42/Makefile.in | 1 +
dlls/d3dx11_43/Makefile.in | 1 +
dlls/d3dx11_43/main.c | 9 -
dlls/d3dx11_43/tests/d3dx11.c | 668 ++++++++++++++++++++++++++++++++++
dlls/d3dx11_43/texture.c | 176 +++++++++
5 files changed, 846 insertions(+), 9 deletions(-)
diff --git a/dlls/d3dx11_42/Makefile.in b/dlls/d3dx11_42/Makefile.in
index dbc31e2407d..410d4555d2f 100644
--- a/dlls/d3dx11_42/Makefile.in
+++ b/dlls/d3dx11_42/Makefile.in
@@ -1,6 +1,7 @@
EXTRADEFS = -DD3DX11_SDK_VERSION=42
MODULE = d3dx11_42.dll
IMPORTS = d3dcompiler
+DELAYIMPORTS = windowscodecs
PARENTSRC = ../d3dx11_43
EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native
diff --git a/dlls/d3dx11_43/Makefile.in b/dlls/d3dx11_43/Makefile.in
index b69f3f1ce02..ed23958a671 100644
--- a/dlls/d3dx11_43/Makefile.in
+++ b/dlls/d3dx11_43/Makefile.in
@@ -2,6 +2,7 @@ EXTRADEFS = -DD3DX11_SDK_VERSION=43
MODULE = d3dx11_43.dll
IMPORTLIB = d3dx11
IMPORTS = d3dcompiler
+DELAYIMPORTS = windowscodecs
EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native
diff --git a/dlls/d3dx11_43/main.c b/dlls/d3dx11_43/main.c
index 950f6d76f5c..00c1db35e42 100644
--- a/dlls/d3dx11_43/main.c
+++ b/dlls/d3dx11_43/main.c
@@ -66,12 +66,3 @@ HRESULT WINAPI D3DX11GetImageInfoFromFileW(const WCHAR *filename, ID3DX11ThreadP
return E_NOTIMPL;
}
-
-HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump,
- D3DX11_IMAGE_INFO *img_info, HRESULT *hresult)
-{
- FIXME("src_data %p, src_data_size %lu, pump %p, img_info %p, hresult %p stub!\n",
- src_data, src_data_size, pump, img_info, hresult);
-
- return E_NOTIMPL;
-}
diff --git a/dlls/d3dx11_43/tests/d3dx11.c b/dlls/d3dx11_43/tests/d3dx11.c
index 06924877da4..a53c79a25b9 100644
--- a/dlls/d3dx11_43/tests/d3dx11.c
+++ b/dlls/d3dx11_43/tests/d3dx11.c
@@ -25,6 +25,646 @@
static WCHAR temp_dir[MAX_PATH];
+/* 1x1 1bpp bmp image */
+static const BYTE test_bmp_1bpp[] =
+{
+ 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
+ 0x00, 0x00
+};
+static const BYTE test_bmp_1bpp_data[] =
+{
+ 0xf3, 0xf2, 0xf1, 0xff
+};
+
+/* 1x1 4bpp bmp image */
+static const BYTE test_bmp_4bpp[] =
+{
+ 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
+ 0x00, 0x00
+};
+static const BYTE test_bmp_4bpp_data[] =
+{
+ 0xf3, 0xf2, 0xf1, 0xff
+};
+
+/* 1x1 8bpp bmp image */
+static const BYTE test_bmp_8bpp[] =
+{
+ 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
+ 0x00, 0x00
+};
+static const BYTE test_bmp_8bpp_data[] =
+{
+ 0xf3, 0xf2, 0xf1, 0xff
+};
+
+/* 1x1 16bpp bmp image */
+static const BYTE test_bmp_16bpp[] =
+{
+ 0x42, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x42, 0x00, 0x00, 0x00, 0x00
+};
+static const BYTE test_bmp_16bpp_data[] =
+{
+ 0x84, 0x84, 0x73, 0xff
+};
+
+/* 1x1 24bpp bmp image */
+static const BYTE test_bmp_24bpp[] =
+{
+ 0x42, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x84, 0x84, 0x00, 0x00, 0x00
+};
+static const BYTE test_bmp_24bpp_data[] =
+{
+ 0x84, 0x84, 0x73, 0xff
+};
+
+/* 2x2 32bpp XRGB bmp image */
+static const BYTE test_bmp_32bpp_xrgb[] =
+{
+ 0x42, 0x4d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb0, 0xc0, 0x00, 0xa1, 0xb1, 0xc1, 0x00, 0xa2, 0xb2,
+ 0xc2, 0x00, 0xa3, 0xb3, 0xc3, 0x00
+};
+static const BYTE test_bmp_32bpp_xrgb_data[] =
+{
+ 0xc2, 0xb2, 0xa2, 0xff, 0xc3, 0xb3, 0xa3, 0xff, 0xc0, 0xb0, 0xa0, 0xff, 0xc1, 0xb1, 0xa1, 0xff
+
+};
+
+/* 2x2 32bpp ARGB bmp image */
+static const BYTE test_bmp_32bpp_argb[] =
+{
+ 0x42, 0x4d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb0, 0xc0, 0x00, 0xa1, 0xb1, 0xc1, 0x00, 0xa2, 0xb2,
+ 0xc2, 0x00, 0xa3, 0xb3, 0xc3, 0x01
+};
+static const BYTE test_bmp_32bpp_argb_data[] =
+{
+ 0xc2, 0xb2, 0xa2, 0xff, 0xc3, 0xb3, 0xa3, 0xff, 0xc0, 0xb0, 0xa0, 0xff, 0xc1, 0xb1, 0xa1, 0xff
+
+};
+
+/* 1x1 8bpp gray png image */
+static const BYTE test_png_8bpp_gray[] =
+{
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x7e, 0x9b,
+ 0x55, 0x00, 0x00, 0x00, 0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0xf8, 0x0f, 0x00, 0x01,
+ 0x01, 0x01, 0x00, 0x1b, 0xb6, 0xee, 0x56, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
+ 0x42, 0x60, 0x82
+};
+static const BYTE test_png_8bpp_gray_data[] =
+{
+ 0xff, 0xff, 0xff, 0xff
+};
+
+/* 1x1 jpg image */
+static const BYTE test_jpg[] =
+{
+ 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x01, 0x2c,
+ 0x01, 0x2c, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x05, 0x03, 0x04, 0x04, 0x04, 0x03, 0x05,
+ 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c, 0x08, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0b,
+ 0x0b, 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f, 0x11, 0x11, 0x13, 0x16, 0x1c, 0x17, 0x13,
+ 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a, 0x1d, 0x1d, 0x1f, 0x1f, 0x1f, 0x13, 0x17,
+ 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, 0x1e, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x05, 0x05,
+ 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08, 0x08, 0x0e, 0x1e, 0x14, 0x11, 0x14, 0x1e, 0x1e, 0x1e, 0x1e,
+ 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
+ 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
+ 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xff, 0xc0,
+ 0x00, 0x11, 0x08, 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,
+ 0x01, 0xff, 0xc4, 0x00, 0x15, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xc4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4,
+ 0x00, 0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01,
+ 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xb2, 0xc0, 0x07, 0xff, 0xd9
+};
+static const BYTE test_jpg_data[] =
+{
+ 0xff, 0xff, 0xff, 0xff
+};
+
+/* 1x1 gif image */
+static const BYTE test_gif[] =
+{
+ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44,
+ 0x01, 0x00, 0x3b
+};
+static const BYTE test_gif_data[] =
+{
+ 0xff, 0xff, 0xff, 0xff
+};
+
+/* 1x1 tiff image */
+static const BYTE test_tiff[] =
+{
+ 0x49, 0x49, 0x2a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xfe, 0x00,
+ 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x03, 0x01,
+ 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x02, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd8, 0x00,
+ 0x00, 0x00, 0x11, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0x01,
+ 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0x00, 0x17, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x01,
+ 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x05, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x28, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x6d, 0x65,
+ 0x68, 0x2f, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
+ 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
+ 0x00, 0x00, 0x00, 0x01
+};
+static const BYTE test_tiff_data[] =
+{
+ 0x00, 0x00, 0x00, 0xff
+};
+
+/* 1x1 alpha dds image */
+static const BYTE test_dds_alpha[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff
+};
+static const BYTE test_dds_alpha_data[] =
+{
+ 0xff
+};
+
+/* 1x1 luminance dds image */
+static const BYTE test_dds_luminance[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x82
+};
+static const BYTE test_dds_luminance_data[] =
+{
+ 0x82, 0x82, 0x82, 0xff
+};
+
+/* 1x1 16bpp dds image */
+static const BYTE test_dds_16bpp[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,
+ 0xe0, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0e, 0x42
+};
+static const BYTE test_dds_16bpp_data[] =
+{
+ 0x84, 0x84, 0x73, 0xff
+};
+
+/* 1x1 24bpp dds image */
+static const BYTE test_dds_24bpp[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x81, 0x83
+};
+static const BYTE test_dds_24bpp_data[] =
+{
+ 0x83, 0x81, 0x70, 0xff
+};
+
+/* 1x1 32bpp dds image */
+static const BYTE test_dds_32bpp[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x81, 0x83, 0xff
+};
+static const BYTE test_dds_32bpp_data[] =
+{
+ 0x83, 0x81, 0x70, 0xff
+};
+
+/* 1x1 64bpp dds image */
+static const BYTE test_dds_64bpp[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x83, 0x81, 0x81, 0x70, 0x70, 0xff, 0xff
+};
+static const BYTE test_dds_64bpp_data[] =
+{
+ 0x83, 0x83, 0x81, 0x81, 0x70, 0x70, 0xff, 0xff
+};
+
+/* 1x1 96bpp dds image */
+static const BYTE test_dds_96bpp[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e
+};
+static const BYTE test_dds_96bpp_data[] =
+{
+ 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e
+};
+
+/* 1x1 128bpp dds image */
+static const BYTE test_dds_128bpp[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e, 0x00, 0x00, 0x80, 0x3f
+};
+static const BYTE test_dds_128bpp_data[] =
+{
+ 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e, 0x00, 0x00, 0x80, 0x3f
+
+};
+
+/* 4x4 DXT1 dds image */
+static const BYTE test_dds_dxt1[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2a, 0x31, 0xf5, 0xbc, 0xe3, 0x6e, 0x2a, 0x3a
+};
+static const BYTE test_dds_dxt1_data[] =
+{
+ 0x2a, 0x31, 0xf5, 0xbc, 0xe3, 0x6e, 0x2a, 0x3a
+};
+
+/* 4x4 DXT2 dds image */
+static const BYTE test_dds_dxt2[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b,
+ 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x53, 0x00, 0x00, 0x52, 0x52, 0x55, 0x55,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x59, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55
+};
+static const BYTE test_dds_dxt2_data[] =
+{
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b
+
+};
+
+/* 1x3 DXT3 dds image */
+static const BYTE test_dds_dxt3[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x92, 0x38, 0x84, 0x00, 0xff, 0x55, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x8b, 0x53, 0x8b, 0x00, 0x00, 0x00, 0x00
+};
+static const BYTE test_dds_dxt3_data[] =
+{
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0x92, 0xd6, 0x83, 0x00, 0xaa, 0x55, 0x55
+
+};
+
+/* 4x4 DXT4 dds image */
+static const BYTE test_dds_dxt4[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b,
+ 0xff, 0x00, 0x40, 0x02, 0x24, 0x49, 0x92, 0x24, 0x57, 0x53, 0x00, 0x00, 0x52, 0x52, 0x55, 0x55,
+ 0xff, 0x00, 0x48, 0x92, 0x24, 0x49, 0x92, 0x24, 0xce, 0x59, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55
+};
+static const BYTE test_dds_dxt4_data[] =
+{
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b
+
+};
+
+/* 4x2 DXT5 dds image */
+static const BYTE test_dds_dxt5[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x87, 0x0f, 0x78, 0x05, 0x05, 0x50, 0x50
+};
+static const BYTE test_dds_dxt5_data[] =
+{
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x87, 0x0f, 0x78, 0x05, 0x05, 0x05, 0x05
+
+};
+
+/* 4x4 BC4 dds image */
+static const BYTE test_dds_bc4[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x42, 0x43, 0x34, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xd9, 0x15, 0xbc, 0x41, 0x5b, 0xa3, 0x3d, 0x3a, 0x8f, 0x3d, 0x45, 0x81, 0x20, 0x45, 0x81, 0x20,
+ 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const BYTE test_dds_bc4_data[] =
+{
+ 0xd9, 0x15, 0xbc, 0x41, 0x5b, 0xa3, 0x3d, 0x3a
+};
+
+/* 6x3 BC5 dds image */
+static const BYTE test_dds_bc5[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x42, 0x43, 0x35, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9f, 0x28, 0x73, 0xac, 0xd5, 0x80, 0xaa, 0xd5, 0x70, 0x2c, 0x4e, 0xd6, 0x76, 0x1d, 0xd6, 0x76,
+ 0xd5, 0x0f, 0xc3, 0x50, 0x96, 0xcf, 0x53, 0x96, 0xdf, 0x16, 0xc3, 0x50, 0x96, 0xcf, 0x53, 0x96,
+ 0x83, 0x55, 0x08, 0x83, 0x30, 0x08, 0x83, 0x30, 0x79, 0x46, 0x31, 0x1c, 0xc3, 0x31, 0x1c, 0xc3,
+ 0x6d, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const BYTE test_dds_bc5_data[] =
+{
+ 0x95, 0x35, 0xe2, 0xa3, 0xf5, 0xd2, 0x28, 0x68, 0x65, 0x32, 0x7c, 0x4e, 0xdb, 0xe4, 0x56, 0x0a,
+ 0xb9, 0x33, 0xaf, 0xf0, 0x52, 0xbe, 0xed, 0x27, 0xb4, 0x2e, 0xa6, 0x60, 0x4e, 0xb6, 0x5d, 0x3f
+
+};
+
+/* 4x4 DXT1 cube map */
+static const BYTE test_dds_cube[] =
+{
+ 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
+ 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
+ 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
+ 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00,
+ 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
+ 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
+ 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00,
+ 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
+ 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
+ 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00
+};
+static const BYTE test_dds_cube_data[] =
+{
+ 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7
+};
+
+static const struct test_image
+{
+ const BYTE *data;
+ unsigned int size;
+ const BYTE *expected_data;
+ D3DX11_IMAGE_INFO expected_info;
+}
+test_image[] =
+{
+ {
+ test_bmp_1bpp, sizeof(test_bmp_1bpp), test_bmp_1bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_bmp_4bpp, sizeof(test_bmp_4bpp), test_bmp_4bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_bmp_8bpp, sizeof(test_bmp_8bpp), test_bmp_8bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_bmp_16bpp, sizeof(test_bmp_16bpp), test_bmp_16bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_bmp_24bpp, sizeof(test_bmp_24bpp), test_bmp_24bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_bmp_32bpp_xrgb, sizeof(test_bmp_32bpp_xrgb), test_bmp_32bpp_xrgb_data,
+ {2, 2, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_bmp_32bpp_argb, sizeof(test_bmp_32bpp_argb), test_bmp_32bpp_argb_data,
+ {2, 2, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_BMP}
+ },
+ {
+ test_png_8bpp_gray, sizeof(test_png_8bpp_gray), test_png_8bpp_gray_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_PNG}
+ },
+ {
+ test_jpg, sizeof(test_jpg), test_jpg_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_JPG}
+ },
+ {
+ test_gif, sizeof(test_gif), test_gif_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_GIF}
+ },
+ {
+ test_tiff, sizeof(test_tiff), test_tiff_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_TIFF}
+ },
+ {
+ test_dds_alpha, sizeof(test_dds_alpha), test_dds_alpha_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_luminance, sizeof(test_dds_luminance), test_dds_luminance_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_16bpp, sizeof(test_dds_16bpp), test_dds_16bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_24bpp, sizeof(test_dds_24bpp), test_dds_24bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_32bpp, sizeof(test_dds_32bpp), test_dds_32bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_64bpp, sizeof(test_dds_64bpp), test_dds_64bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R16G16B16A16_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_96bpp, sizeof(test_dds_96bpp), test_dds_96bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R32G32B32_FLOAT, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_128bpp, sizeof(test_dds_128bpp), test_dds_128bpp_data,
+ {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R32G32B32A32_FLOAT, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_dxt1, sizeof(test_dds_dxt1), test_dds_dxt1_data,
+ {4, 4, 1, 1, 1, 0, DXGI_FORMAT_BC1_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_dxt2, sizeof(test_dds_dxt2), test_dds_dxt2_data,
+ {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC2_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_dxt3, sizeof(test_dds_dxt3), test_dds_dxt3_data,
+ {1, 3, 1, 1, 2, 0, DXGI_FORMAT_BC2_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_dxt4, sizeof(test_dds_dxt4), test_dds_dxt4_data,
+ {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC3_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_dxt5, sizeof(test_dds_dxt5), test_dds_dxt5_data,
+ {4, 2, 1, 1, 1, 0, DXGI_FORMAT_BC3_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_bc4, sizeof(test_dds_bc4), test_dds_bc4_data,
+ {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC4_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_bc5, sizeof(test_dds_bc5), test_dds_bc5_data,
+ {6, 3, 1, 1, 3, 0, DXGI_FORMAT_BC5_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+ {
+ test_dds_cube, sizeof(test_dds_cube), test_dds_cube_data,
+ {4, 4, 1, 6, 3, 0x4, DXGI_FORMAT_BC1_UNORM, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3DX11_IFF_DDS}
+ },
+};
+
+static void check_image_info(D3DX11_IMAGE_INFO *image_info, const struct test_image *image, unsigned int line)
+{
+ ok_(__FILE__, line)(image_info->Width == image->expected_info.Width,
+ "Got unexpected Width %u, expected %u.\n",
+ image_info->Width, image->expected_info.Width);
+ ok_(__FILE__, line)(image_info->Height == image->expected_info.Height,
+ "Got unexpected Height %u, expected %u.\n",
+ image_info->Height, image->expected_info.Height);
+ ok_(__FILE__, line)(image_info->Depth == image->expected_info.Depth,
+ "Got unexpected Depth %u, expected %u.\n",
+ image_info->Depth, image->expected_info.Depth);
+ ok_(__FILE__, line)(image_info->ArraySize == image->expected_info.ArraySize,
+ "Got unexpected ArraySize %u, expected %u.\n",
+ image_info->ArraySize, image->expected_info.ArraySize);
+ ok_(__FILE__, line)(image_info->MipLevels == image->expected_info.MipLevels,
+ "Got unexpected MipLevels %u, expected %u.\n",
+ image_info->MipLevels, image->expected_info.MipLevels);
+ ok_(__FILE__, line)(image_info->MiscFlags == image->expected_info.MiscFlags,
+ "Got unexpected MiscFlags %#x, expected %#x.\n",
+ image_info->MiscFlags, image->expected_info.MiscFlags);
+ ok_(__FILE__, line)(image_info->Format == image->expected_info.Format,
+ "Got unexpected Format %#x, expected %#x.\n",
+ image_info->Format, image->expected_info.Format);
+ ok_(__FILE__, line)(image_info->ResourceDimension == image->expected_info.ResourceDimension,
+ "Got unexpected ResourceDimension %u, expected %u.\n",
+ image_info->ResourceDimension, image->expected_info.ResourceDimension);
+ ok_(__FILE__, line)(image_info->ImageFileFormat == image->expected_info.ImageFileFormat,
+ "Got unexpected ImageFileFormat %u, expected %u.\n",
+ image_info->ImageFileFormat, image->expected_info.ImageFileFormat);
+}
+
static BOOL create_file(const WCHAR *filename, const char *data, unsigned int size, WCHAR *out_path)
{
WCHAR path[MAX_PATH];
@@ -404,10 +1044,38 @@ static void test_D3DX11CompileFromFile(void)
delete_directory(L"include");
}
+static void test_get_image_info(void)
+{
+ D3DX11_IMAGE_INFO image_info;
+ unsigned int i;
+ DWORD dword;
+ HRESULT hr;
+
+ hr = D3DX11GetImageInfoFromMemory(test_image[0].data, 0, NULL, &image_info, NULL);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ hr = D3DX11GetImageInfoFromMemory(NULL, test_image[0].size, NULL, &image_info, NULL);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ hr = D3DX11GetImageInfoFromMemory(&dword, sizeof(dword), NULL, &image_info, NULL);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+
+ for (i = 0; i < ARRAY_SIZE(test_image); ++i)
+ {
+ winetest_push_context("Test %u", i);
+
+ hr = D3DX11GetImageInfoFromMemory(test_image[i].data, test_image[i].size, NULL, &image_info, NULL);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ if (hr == S_OK)
+ check_image_info(&image_info, test_image + i, __LINE__);
+
+ winetest_pop_context();
+ }
+}
+
START_TEST(d3dx11)
{
test_D3DX11CreateAsyncMemoryLoader();
test_D3DX11CreateAsyncFileLoader();
test_D3DX11CreateAsyncResourceLoader();
test_D3DX11CompileFromFile();
+ test_get_image_info();
}
diff --git a/dlls/d3dx11_43/texture.c b/dlls/d3dx11_43/texture.c
index ee6808d76d6..8addf4f84d3 100644
--- a/dlls/d3dx11_43/texture.c
+++ b/dlls/d3dx11_43/texture.c
@@ -15,14 +15,190 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define COBJMACROS
#include "d3dx11.h"
#include "d3dcompiler.h"
+#include "wincodec.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
+HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT sdk_version, IWICImagingFactory **imaging_factory);
+
+static const struct
+{
+ const GUID *wic_container_guid;
+ D3DX11_IMAGE_FILE_FORMAT d3dx_file_format;
+}
+file_formats[] =
+{
+ { &GUID_ContainerFormatBmp, D3DX11_IFF_BMP },
+ { &GUID_ContainerFormatJpeg, D3DX11_IFF_JPG },
+ { &GUID_ContainerFormatPng, D3DX11_IFF_PNG },
+ { &GUID_ContainerFormatDds, D3DX11_IFF_DDS },
+ { &GUID_ContainerFormatTiff, D3DX11_IFF_TIFF },
+ { &GUID_ContainerFormatGif, D3DX11_IFF_GIF },
+ { &GUID_ContainerFormatWmp, D3DX11_IFF_WMP },
+};
+
+static D3DX11_IMAGE_FILE_FORMAT wic_container_guid_to_file_format(GUID *container_format)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(file_formats); ++i)
+ {
+ if (IsEqualGUID(file_formats[i].wic_container_guid, container_format))
+ return file_formats[i].d3dx_file_format;
+ }
+ return D3DX11_IFF_FORCE_DWORD;
+}
+
+static D3D11_RESOURCE_DIMENSION wic_dimension_to_d3dx11_dimension(WICDdsDimension wic_dimension)
+{
+ switch (wic_dimension)
+ {
+ case WICDdsTexture1D:
+ return D3D11_RESOURCE_DIMENSION_TEXTURE1D;
+ case WICDdsTexture2D:
+ case WICDdsTextureCube:
+ return D3D11_RESOURCE_DIMENSION_TEXTURE2D;
+ case WICDdsTexture3D:
+ return D3D11_RESOURCE_DIMENSION_TEXTURE3D;
+ default:
+ return D3D11_RESOURCE_DIMENSION_UNKNOWN;
+ }
+}
+
+static const DXGI_FORMAT to_be_converted_format[] =
+{
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_B4G4R4A4_UNORM,
+ DXGI_FORMAT_B5G5R5A1_UNORM,
+ DXGI_FORMAT_B8G8R8X8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM
+};
+
+static DXGI_FORMAT get_d3dx11_dds_format(DXGI_FORMAT format)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(to_be_converted_format); ++i)
+ {
+ if (format == to_be_converted_format[i])
+ return DXGI_FORMAT_R8G8B8A8_UNORM;
+ }
+ return format;
+}
+
+HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump,
+ D3DX11_IMAGE_INFO *img_info, HRESULT *hresult)
+{
+ IWICBitmapFrameDecode *frame = NULL;
+ IWICImagingFactory *factory = NULL;
+ IWICDdsDecoder *dds_decoder = NULL;
+ IWICBitmapDecoder *decoder = NULL;
+ WICDdsParameters dds_params;
+ IWICStream *stream = NULL;
+ unsigned int frame_count;
+ GUID container_format;
+ HRESULT hr;
+
+ TRACE("src_data %p, src_data_size %lu, pump %p, img_info %p, hresult %p.\n",
+ src_data, src_data_size, pump, img_info, hresult);
+
+ if (!src_data || !src_data_size || !img_info)
+ return E_FAIL;
+ if (pump)
+ FIXME("Thread pump is not supported yet.\n");
+
+ WICCreateImagingFactory_Proxy(WINCODEC_SDK_VERSION, &factory);
+ IWICImagingFactory_CreateStream(factory, &stream);
+ hr = IWICStream_InitializeFromMemory(stream, (BYTE *)src_data, src_data_size);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize stream.\n");
+ goto end;
+ }
+ hr = IWICImagingFactory_CreateDecoderFromStream(factory, (IStream *)stream, NULL, 0, &decoder);
+ if (FAILED(hr))
+ goto end;
+
+ hr = IWICBitmapDecoder_GetContainerFormat(decoder, &container_format);
+ if (FAILED(hr))
+ goto end;
+ img_info->ImageFileFormat = wic_container_guid_to_file_format(&container_format);
+ if (img_info->ImageFileFormat == D3DX11_IFF_FORCE_DWORD)
+ {
+ hr = E_FAIL;
+ WARN("Unsupported image file format %s.\n", debugstr_guid(&container_format));
+ goto end;
+ }
+
+ hr = IWICBitmapDecoder_GetFrameCount(decoder, &frame_count);
+ if (FAILED(hr) || !frame_count)
+ goto end;
+ hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame);
+ if (FAILED(hr))
+ goto end;
+ hr = IWICBitmapFrameDecode_GetSize(frame, &img_info->Width, &img_info->Height);
+ if (FAILED(hr))
+ goto end;
+
+ if (img_info->ImageFileFormat == D3DX11_IFF_DDS)
+ {
+ hr = IWICBitmapDecoder_QueryInterface(decoder, &IID_IWICDdsDecoder, (void **)&dds_decoder);
+ if (FAILED(hr))
+ goto end;
+ hr = IWICDdsDecoder_GetParameters(dds_decoder, &dds_params);
+ if (FAILED(hr))
+ goto end;
+ img_info->ArraySize = dds_params.ArraySize;
+ img_info->Depth = dds_params.Depth;
+ img_info->MipLevels = dds_params.MipLevels;
+ img_info->ResourceDimension = wic_dimension_to_d3dx11_dimension(dds_params.Dimension);
+ img_info->Format = get_d3dx11_dds_format(dds_params.DxgiFormat);
+ img_info->MiscFlags = 0;
+ if (dds_params.Dimension == WICDdsTextureCube)
+ {
+ img_info->MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE;
+ img_info->ArraySize *= 6;
+ }
+ }
+ else
+ {
+ img_info->ArraySize = 1;
+ img_info->Depth = 1;
+ img_info->MipLevels = 1;
+ img_info->ResourceDimension = D3D11_RESOURCE_DIMENSION_TEXTURE2D;
+ img_info->Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ img_info->MiscFlags = 0;
+ }
+
+end:
+ if (dds_decoder)
+ IWICDdsDecoder_Release(dds_decoder);
+ if (frame)
+ IWICBitmapFrameDecode_Release(frame);
+ if (decoder)
+ IWICBitmapDecoder_Release(decoder);
+ if (stream)
+ IWICStream_Release(stream);
+ if (factory)
+ IWICImagingFactory_Release(factory);
+
+ if (hr != S_OK)
+ {
+ WARN("Invalid or unsupported image file.\n");
+ return E_FAIL;
+ }
+ return S_OK;
+}
+
HRESULT WINAPI D3DX11CreateShaderResourceViewFromMemory(ID3D11Device *device, const void *data,
SIZE_T data_size, D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump,
ID3D11ShaderResourceView **view, HRESULT *hresult)
--
2.30.2
2
2