tests: Make common test functionality extern.
Prepares for a situation where tests can be spread across multiple translation units. Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
7ff3ef2654
commit
8c89dacf76
156
tests/d3d12.c
156
tests/d3d12.c
|
@ -31,32 +31,7 @@ PFN_D3D12_CREATE_DEVICE pfn_D3D12CreateDevice;
|
|||
PFN_D3D12_ENABLE_EXPERIMENTAL_FEATURES pfn_D3D12EnableExperimentalFeatures;
|
||||
PFN_D3D12_GET_DEBUG_INTERFACE pfn_D3D12GetDebugInterface;
|
||||
|
||||
struct vec2
|
||||
{
|
||||
float x, y;
|
||||
};
|
||||
|
||||
struct vec4
|
||||
{
|
||||
float x, y, z, w;
|
||||
};
|
||||
|
||||
struct uvec4
|
||||
{
|
||||
unsigned int x, y, z, w;
|
||||
};
|
||||
|
||||
struct ivec4
|
||||
{
|
||||
int x, y, z, w;
|
||||
};
|
||||
|
||||
struct dvec2
|
||||
{
|
||||
double x, y;
|
||||
};
|
||||
|
||||
static bool compare_float(float f, float g, int ulps)
|
||||
bool compare_float(float f, float g, int ulps)
|
||||
{
|
||||
int x, y;
|
||||
union
|
||||
|
@ -81,7 +56,7 @@ static bool compare_float(float f, float g, int ulps)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool compare_vec4(const struct vec4 *v1, const struct vec4 *v2, unsigned int ulps)
|
||||
bool compare_vec4(const struct vec4 *v1, const struct vec4 *v2, unsigned int ulps)
|
||||
{
|
||||
return compare_float(v1->x, v2->x, ulps)
|
||||
&& compare_float(v1->y, v2->y, ulps)
|
||||
|
@ -89,35 +64,34 @@ static bool compare_vec4(const struct vec4 *v1, const struct vec4 *v2, unsigned
|
|||
&& compare_float(v1->w, v2->w, ulps);
|
||||
}
|
||||
|
||||
static bool compare_uvec4(const struct uvec4* v1, const struct uvec4 *v2)
|
||||
bool compare_uvec4(const struct uvec4* v1, const struct uvec4 *v2)
|
||||
{
|
||||
return v1->x == v2->x && v1->y == v2->y && v1->z == v2->z && v1->w == v2->w;
|
||||
}
|
||||
|
||||
static bool compare_uint8(uint8_t a, uint8_t b, unsigned int max_diff)
|
||||
bool compare_uint8(uint8_t a, uint8_t b, unsigned int max_diff)
|
||||
{
|
||||
return delta_uint8(a, b) <= max_diff;
|
||||
}
|
||||
|
||||
static bool compare_uint16(uint16_t a, uint16_t b, unsigned int max_diff)
|
||||
bool compare_uint16(uint16_t a, uint16_t b, unsigned int max_diff)
|
||||
{
|
||||
return delta_uint16(a, b) <= max_diff;
|
||||
}
|
||||
|
||||
static bool compare_uint64(uint64_t a, uint64_t b, unsigned int max_diff)
|
||||
bool compare_uint64(uint64_t a, uint64_t b, unsigned int max_diff)
|
||||
{
|
||||
return delta_uint64(a, b) <= max_diff;
|
||||
}
|
||||
|
||||
static ULONG get_refcount(void *iface)
|
||||
ULONG get_refcount(void *iface)
|
||||
{
|
||||
IUnknown *unk = iface;
|
||||
IUnknown_AddRef(unk);
|
||||
return IUnknown_Release(unk);
|
||||
}
|
||||
|
||||
#define check_interface(a, b, c) check_interface_(__LINE__, (IUnknown *)a, b, c)
|
||||
static void check_interface_(unsigned int line, IUnknown *iface, REFIID riid, bool supported)
|
||||
void check_interface_(unsigned int line, IUnknown *iface, REFIID riid, bool supported)
|
||||
{
|
||||
HRESULT hr, expected_hr;
|
||||
IUnknown *unk;
|
||||
|
@ -130,8 +104,7 @@ static void check_interface_(unsigned int line, IUnknown *iface, REFIID riid, bo
|
|||
IUnknown_Release(unk);
|
||||
}
|
||||
|
||||
#define check_heap_properties(a, b) check_heap_properties_(__LINE__, a, b)
|
||||
static void check_heap_properties_(unsigned int line,
|
||||
void check_heap_properties_(unsigned int line,
|
||||
const D3D12_HEAP_PROPERTIES *properties, const D3D12_HEAP_PROPERTIES *expected_properties)
|
||||
{
|
||||
D3D12_HEAP_PROPERTIES expected = *expected_properties;
|
||||
|
@ -157,8 +130,7 @@ static void check_heap_properties_(unsigned int line,
|
|||
properties->VisibleNodeMask, expected.VisibleNodeMask);
|
||||
}
|
||||
|
||||
#define check_heap_desc(a, b) check_heap_desc_(__LINE__, a, b)
|
||||
static void check_heap_desc_(unsigned int line, const D3D12_HEAP_DESC *desc,
|
||||
void check_heap_desc_(unsigned int line, const D3D12_HEAP_DESC *desc,
|
||||
const D3D12_HEAP_DESC *expected_desc)
|
||||
{
|
||||
D3D12_HEAP_DESC expected = *expected_desc;
|
||||
|
@ -177,15 +149,14 @@ static void check_heap_desc_(unsigned int line, const D3D12_HEAP_DESC *desc,
|
|||
"Got flags %#x, expected %#x.\n", desc->Flags, expected.Flags);
|
||||
}
|
||||
|
||||
#define check_alignment(a, b) check_alignment_(__LINE__, a, b)
|
||||
static void check_alignment_(unsigned int line, uint64_t size, uint64_t alignment)
|
||||
void check_alignment_(unsigned int line, uint64_t size, uint64_t alignment)
|
||||
{
|
||||
uint64_t aligned_size = align(size, alignment);
|
||||
ok_(line)(aligned_size == size, "Got unaligned size %"PRIu64", expected %"PRIu64".\n",
|
||||
size, aligned_size);
|
||||
}
|
||||
|
||||
static void uav_barrier(ID3D12GraphicsCommandList *list, ID3D12Resource *resource)
|
||||
void uav_barrier(ID3D12GraphicsCommandList *list, ID3D12Resource *resource)
|
||||
{
|
||||
D3D12_RESOURCE_BARRIER barrier;
|
||||
|
||||
|
@ -196,7 +167,7 @@ static void uav_barrier(ID3D12GraphicsCommandList *list, ID3D12Resource *resourc
|
|||
ID3D12GraphicsCommandList_ResourceBarrier(list, 1, &barrier);
|
||||
}
|
||||
|
||||
static void copy_sub_resource_data(const D3D12_MEMCPY_DEST *dst, const D3D12_SUBRESOURCE_DATA *src,
|
||||
void copy_sub_resource_data(const D3D12_MEMCPY_DEST *dst, const D3D12_SUBRESOURCE_DATA *src,
|
||||
unsigned int row_count, unsigned int slice_count, size_t row_size)
|
||||
{
|
||||
const BYTE *src_slice_ptr;
|
||||
|
@ -212,8 +183,7 @@ static void copy_sub_resource_data(const D3D12_MEMCPY_DEST *dst, const D3D12_SUB
|
|||
}
|
||||
}
|
||||
|
||||
#define upload_buffer_data(a, b, c, d, e, f) upload_buffer_data_(__LINE__, a, b, c, d, e, f)
|
||||
static void upload_buffer_data_(unsigned int line, ID3D12Resource *buffer, size_t offset,
|
||||
void upload_buffer_data_(unsigned int line, ID3D12Resource *buffer, size_t offset,
|
||||
size_t size, const void *data, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
|
||||
{
|
||||
ID3D12Resource *upload_buffer;
|
||||
|
@ -237,8 +207,7 @@ static void upload_buffer_data_(unsigned int line, ID3D12Resource *buffer, size_
|
|||
ID3D12Device_Release(device);
|
||||
}
|
||||
|
||||
#define upload_texture_data(a, b, c, d, e) upload_texture_data_(__LINE__, a, b, c, d, e)
|
||||
static void upload_texture_data_(unsigned int line, ID3D12Resource *texture,
|
||||
void upload_texture_data_(unsigned int line, ID3D12Resource *texture,
|
||||
const D3D12_SUBRESOURCE_DATA *data, unsigned int sub_resource_count,
|
||||
ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
|
||||
{
|
||||
|
@ -326,7 +295,7 @@ static const DXGI_FORMAT depth_stencil_formats[] =
|
|||
DXGI_FORMAT_D16_UNORM,
|
||||
};
|
||||
|
||||
static void init_readback(struct resource_readback *rb, ID3D12Resource *buffer,
|
||||
void init_readback(struct resource_readback *rb, ID3D12Resource *buffer,
|
||||
uint64_t buffer_size, uint64_t width, uint64_t height, unsigned int depth, uint64_t row_pitch)
|
||||
{
|
||||
D3D12_RANGE read_range;
|
||||
|
@ -347,7 +316,7 @@ static void init_readback(struct resource_readback *rb, ID3D12Resource *buffer,
|
|||
ok(hr == S_OK, "Failed to map readback buffer, hr %#x.\n", hr);
|
||||
}
|
||||
|
||||
static void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_FORMAT format,
|
||||
void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_FORMAT format,
|
||||
struct resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
|
||||
{
|
||||
D3D12_HEAP_PROPERTIES heap_properties;
|
||||
|
@ -397,38 +366,37 @@ static void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_F
|
|||
ok(SUCCEEDED(hr), "Failed to map readback buffer, hr %#x.\n", hr);
|
||||
}
|
||||
|
||||
static uint8_t get_readback_uint8(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
uint8_t get_readback_uint8(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
{
|
||||
return *(uint8_t *)get_readback_data(rb, x, y, 0, sizeof(uint8_t));
|
||||
}
|
||||
|
||||
static uint16_t get_readback_uint16(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
uint16_t get_readback_uint16(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
{
|
||||
return *(uint16_t *)get_readback_data(rb, x, y, 0, sizeof(uint16_t));
|
||||
}
|
||||
|
||||
static uint64_t get_readback_uint64(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
uint64_t get_readback_uint64(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
{
|
||||
return *(uint64_t *)get_readback_data(rb, x, y, 0, sizeof(uint64_t));
|
||||
}
|
||||
|
||||
static float get_readback_float(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
float get_readback_float(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
{
|
||||
return *(float *)get_readback_data(rb, x, y, 0, sizeof(float));
|
||||
}
|
||||
|
||||
static const struct vec4 *get_readback_vec4(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
const struct vec4 *get_readback_vec4(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
{
|
||||
return get_readback_data(rb, x, y, 0, sizeof(struct vec4));
|
||||
}
|
||||
|
||||
static const struct uvec4 *get_readback_uvec4(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
const struct uvec4 *get_readback_uvec4(struct resource_readback *rb, unsigned int x, unsigned int y)
|
||||
{
|
||||
return get_readback_data(rb, x, y, 0, sizeof(struct uvec4));
|
||||
}
|
||||
|
||||
#define check_readback_data_float(a, b, c, d) check_readback_data_float_(__LINE__, a, b, c, d)
|
||||
static void check_readback_data_float_(unsigned int line, struct resource_readback *rb,
|
||||
void check_readback_data_float_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, float expected, unsigned int max_diff)
|
||||
{
|
||||
RECT r = {0, 0, rb->width, rb->height};
|
||||
|
@ -456,8 +424,7 @@ static void check_readback_data_float_(unsigned int line, struct resource_readba
|
|||
ok_(line)(all_match, "Got %.8e, expected %.8e at (%u, %u).\n", got, expected, x, y);
|
||||
}
|
||||
|
||||
#define check_sub_resource_float(a, b, c, d, e, f) check_sub_resource_float_(__LINE__, a, b, c, d, e, f)
|
||||
static void check_sub_resource_float_(unsigned int line, ID3D12Resource *texture,
|
||||
void check_sub_resource_float_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
float expected, unsigned int max_diff)
|
||||
{
|
||||
|
@ -468,8 +435,7 @@ static void check_sub_resource_float_(unsigned int line, ID3D12Resource *texture
|
|||
release_resource_readback(&rb);
|
||||
}
|
||||
|
||||
#define check_readback_data_uint8(a, b, c, d) check_readback_data_uint8_(__LINE__, a, b, c, d)
|
||||
static void check_readback_data_uint8_(unsigned int line, struct resource_readback *rb,
|
||||
void check_readback_data_uint8_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, uint8_t expected, unsigned int max_diff)
|
||||
{
|
||||
RECT r = {0, 0, rb->width, rb->height};
|
||||
|
@ -497,8 +463,7 @@ static void check_readback_data_uint8_(unsigned int line, struct resource_readba
|
|||
ok_(line)(all_match, "Got 0x%02x, expected 0x%02x at (%u, %u).\n", got, expected, x, y);
|
||||
}
|
||||
|
||||
#define check_sub_resource_uint8(a, b, c, d, e, f) check_sub_resource_uint8_(__LINE__, a, b, c, d, e, f)
|
||||
static void check_sub_resource_uint8_(unsigned int line, ID3D12Resource *texture,
|
||||
void check_sub_resource_uint8_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
uint8_t expected, unsigned int max_diff)
|
||||
{
|
||||
|
@ -509,8 +474,7 @@ static void check_sub_resource_uint8_(unsigned int line, ID3D12Resource *texture
|
|||
release_resource_readback(&rb);
|
||||
}
|
||||
|
||||
#define check_readback_data_uint16(a, b, c, d) check_readback_data_uint16_(__LINE__, a, b, c, d)
|
||||
static void check_readback_data_uint16_(unsigned int line, struct resource_readback *rb,
|
||||
void check_readback_data_uint16_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, uint16_t expected, unsigned int max_diff)
|
||||
{
|
||||
RECT r = {0, 0, rb->width, rb->height};
|
||||
|
@ -538,8 +502,7 @@ static void check_readback_data_uint16_(unsigned int line, struct resource_readb
|
|||
ok_(line)(all_match, "Got 0x%04x, expected 0x%04x at (%u, %u).\n", got, expected, x, y);
|
||||
}
|
||||
|
||||
#define check_sub_resource_uint16(a, b, c, d, e, f) check_sub_resource_uint16_(__LINE__, a, b, c, d, e, f)
|
||||
static void check_sub_resource_uint16_(unsigned int line, ID3D12Resource *texture,
|
||||
void check_sub_resource_uint16_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
uint16_t expected, unsigned int max_diff)
|
||||
{
|
||||
|
@ -550,8 +513,7 @@ static void check_sub_resource_uint16_(unsigned int line, ID3D12Resource *textur
|
|||
release_resource_readback(&rb);
|
||||
}
|
||||
|
||||
#define check_readback_data_uint64(a, b, c, d) check_readback_data_uint64_(__LINE__, a, b, c, d)
|
||||
static void check_readback_data_uint64_(unsigned int line, struct resource_readback *rb,
|
||||
void check_readback_data_uint64_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, uint64_t expected, unsigned int max_diff)
|
||||
{
|
||||
RECT r = {0, 0, rb->width, rb->height};
|
||||
|
@ -579,8 +541,7 @@ static void check_readback_data_uint64_(unsigned int line, struct resource_readb
|
|||
ok_(line)(all_match, "Got %#"PRIx64", expected %#"PRIx64" at (%u, %u).\n", got, expected, x, y);
|
||||
}
|
||||
|
||||
#define check_sub_resource_uint64(a, b, c, d, e, f) check_sub_resource_uint64_(__LINE__, a, b, c, d, e, f)
|
||||
static void check_sub_resource_uint64_(unsigned int line, ID3D12Resource *texture,
|
||||
void check_sub_resource_uint64_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
uint64_t expected, unsigned int max_diff)
|
||||
{
|
||||
|
@ -591,8 +552,7 @@ static void check_sub_resource_uint64_(unsigned int line, ID3D12Resource *textur
|
|||
release_resource_readback(&rb);
|
||||
}
|
||||
|
||||
#define check_sub_resource_vec4(a, b, c, d, e, f) check_sub_resource_vec4_(__LINE__, a, b, c, d, e, f)
|
||||
static void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *texture,
|
||||
void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
const struct vec4 *expected, unsigned int max_diff)
|
||||
{
|
||||
|
@ -622,8 +582,7 @@ static void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *texture,
|
|||
got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
|
||||
}
|
||||
|
||||
#define check_sub_resource_uvec4(a, b, c, d, e) check_sub_resource_uvec4_(__LINE__, a, b, c, d, e)
|
||||
static void check_sub_resource_uvec4_(unsigned int line, ID3D12Resource *texture,
|
||||
void check_sub_resource_uvec4_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
const struct uvec4 *expected_value)
|
||||
{
|
||||
|
@ -655,12 +614,12 @@ static void check_sub_resource_uvec4_(unsigned int line, ID3D12Resource *texture
|
|||
expected_value->x, expected_value->y, expected_value->z, expected_value->w, x, y);
|
||||
}
|
||||
|
||||
static bool broken_on_warp(bool condition)
|
||||
bool broken_on_warp(bool condition)
|
||||
{
|
||||
return broken(use_warp_device && condition);
|
||||
}
|
||||
|
||||
static bool is_min_max_filtering_supported(ID3D12Device *device)
|
||||
bool is_min_max_filtering_supported(ID3D12Device *device)
|
||||
{
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS options;
|
||||
HRESULT hr;
|
||||
|
@ -676,7 +635,7 @@ static bool is_min_max_filtering_supported(ID3D12Device *device)
|
|||
return options.TiledResourcesTier >= D3D12_TILED_RESOURCES_TIER_2;
|
||||
}
|
||||
|
||||
static D3D12_TILED_RESOURCES_TIER get_tiled_resources_tier(ID3D12Device *device)
|
||||
D3D12_TILED_RESOURCES_TIER get_tiled_resources_tier(ID3D12Device *device)
|
||||
{
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS options;
|
||||
HRESULT hr;
|
||||
|
@ -691,7 +650,7 @@ static D3D12_TILED_RESOURCES_TIER get_tiled_resources_tier(ID3D12Device *device)
|
|||
return options.TiledResourcesTier;
|
||||
}
|
||||
|
||||
static bool is_standard_swizzle_64kb_supported(ID3D12Device *device)
|
||||
bool is_standard_swizzle_64kb_supported(ID3D12Device *device)
|
||||
{
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS options;
|
||||
HRESULT hr;
|
||||
|
@ -706,7 +665,7 @@ static bool is_standard_swizzle_64kb_supported(ID3D12Device *device)
|
|||
return options.StandardSwizzle64KBSupported;
|
||||
}
|
||||
|
||||
static bool is_memory_pool_L1_supported(ID3D12Device *device)
|
||||
bool is_memory_pool_L1_supported(ID3D12Device *device)
|
||||
{
|
||||
D3D12_FEATURE_DATA_ARCHITECTURE architecture;
|
||||
HRESULT hr;
|
||||
|
@ -722,7 +681,7 @@ static bool is_memory_pool_L1_supported(ID3D12Device *device)
|
|||
return !architecture.UMA;
|
||||
}
|
||||
|
||||
static bool is_vrs_tier1_supported(ID3D12Device *device, bool *additional_shading_rates)
|
||||
bool is_vrs_tier1_supported(ID3D12Device *device, bool *additional_shading_rates)
|
||||
{
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS6 options;
|
||||
HRESULT hr;
|
||||
|
@ -743,7 +702,7 @@ static bool is_vrs_tier1_supported(ID3D12Device *device, bool *additional_shadin
|
|||
return options.VariableShadingRateTier >= D3D12_VARIABLE_SHADING_RATE_TIER_1;
|
||||
}
|
||||
|
||||
static bool is_vrs_tier2_supported(ID3D12Device *device)
|
||||
bool is_vrs_tier2_supported(ID3D12Device *device)
|
||||
{
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS6 options;
|
||||
HRESULT hr;
|
||||
|
@ -757,8 +716,7 @@ static bool is_vrs_tier2_supported(ID3D12Device *device)
|
|||
return options.VariableShadingRateTier >= D3D12_VARIABLE_SHADING_RATE_TIER_2;
|
||||
}
|
||||
|
||||
#define create_cb_root_signature(a, b, c, e) create_cb_root_signature_(__LINE__, a, b, c, e)
|
||||
static ID3D12RootSignature *create_cb_root_signature_(unsigned int line,
|
||||
ID3D12RootSignature *create_cb_root_signature_(unsigned int line,
|
||||
ID3D12Device *device, unsigned int reg_idx, D3D12_SHADER_VISIBILITY shader_visibility,
|
||||
D3D12_ROOT_SIGNATURE_FLAGS flags)
|
||||
{
|
||||
|
@ -782,9 +740,7 @@ static ID3D12RootSignature *create_cb_root_signature_(unsigned int line,
|
|||
return root_signature;
|
||||
}
|
||||
|
||||
#define create_32bit_constants_root_signature(a, b, c, e) \
|
||||
create_32bit_constants_root_signature_(__LINE__, a, b, c, e, 0)
|
||||
static ID3D12RootSignature *create_32bit_constants_root_signature_(unsigned int line,
|
||||
ID3D12RootSignature *create_32bit_constants_root_signature_(unsigned int line,
|
||||
ID3D12Device *device, unsigned int reg_idx, unsigned int element_count,
|
||||
D3D12_SHADER_VISIBILITY shader_visibility, D3D12_ROOT_SIGNATURE_FLAGS flags)
|
||||
{
|
||||
|
@ -809,8 +765,7 @@ static ID3D12RootSignature *create_32bit_constants_root_signature_(unsigned int
|
|||
return root_signature;
|
||||
}
|
||||
|
||||
#define create_texture_root_signature(a, b, c, d) create_texture_root_signature_(__LINE__, a, b, c, d, NULL)
|
||||
static ID3D12RootSignature *create_texture_root_signature_(unsigned int line,
|
||||
ID3D12RootSignature *create_texture_root_signature_(unsigned int line,
|
||||
ID3D12Device *device, D3D12_SHADER_VISIBILITY shader_visibility,
|
||||
unsigned int constant_count, D3D12_ROOT_SIGNATURE_FLAGS flags,
|
||||
const D3D12_STATIC_SAMPLER_DESC *sampler_desc)
|
||||
|
@ -868,8 +823,7 @@ static ID3D12RootSignature *create_texture_root_signature_(unsigned int line,
|
|||
return root_signature;
|
||||
}
|
||||
|
||||
#define create_compute_pipeline_state(a, b, c) create_compute_pipeline_state_(__LINE__, a, b, c)
|
||||
static ID3D12PipelineState *create_compute_pipeline_state_(unsigned int line, ID3D12Device *device,
|
||||
ID3D12PipelineState *create_compute_pipeline_state_(unsigned int line, ID3D12Device *device,
|
||||
ID3D12RootSignature *root_signature, const D3D12_SHADER_BYTECODE cs)
|
||||
{
|
||||
D3D12_COMPUTE_PIPELINE_STATE_DESC pipeline_state_desc;
|
||||
|
@ -887,8 +841,7 @@ static ID3D12PipelineState *create_compute_pipeline_state_(unsigned int line, ID
|
|||
return pipeline_state;
|
||||
}
|
||||
|
||||
#define create_command_signature(a, b) create_command_signature_(__LINE__, a, b)
|
||||
static ID3D12CommandSignature *create_command_signature_(unsigned int line,
|
||||
ID3D12CommandSignature *create_command_signature_(unsigned int line,
|
||||
ID3D12Device *device, D3D12_INDIRECT_ARGUMENT_TYPE argument_type)
|
||||
{
|
||||
ID3D12CommandSignature *command_signature = NULL;
|
||||
|
@ -923,8 +876,7 @@ static ID3D12CommandSignature *create_command_signature_(unsigned int line,
|
|||
return command_signature;
|
||||
}
|
||||
|
||||
#define init_compute_test_context(context) init_compute_test_context_(__LINE__, context)
|
||||
static bool init_compute_test_context_(unsigned int line, struct test_context *context)
|
||||
bool init_compute_test_context_(unsigned int line, struct test_context *context)
|
||||
{
|
||||
ID3D12Device *device;
|
||||
HRESULT hr;
|
||||
|
@ -952,8 +904,7 @@ static bool init_compute_test_context_(unsigned int line, struct test_context *c
|
|||
return true;
|
||||
}
|
||||
|
||||
#define context_supports_dxil(context) context_supports_dxil_(__LINE__, context)
|
||||
static bool context_supports_dxil_(unsigned int line, struct test_context *context)
|
||||
bool context_supports_dxil_(unsigned int line, struct test_context *context)
|
||||
{
|
||||
D3D12_FEATURE_DATA_SHADER_MODEL model;
|
||||
HRESULT hr;
|
||||
|
@ -973,15 +924,7 @@ static bool context_supports_dxil_(unsigned int line, struct test_context *conte
|
|||
return true;
|
||||
}
|
||||
|
||||
struct depth_stencil_resource
|
||||
{
|
||||
ID3D12Resource *texture;
|
||||
ID3D12DescriptorHeap *heap;
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE dsv_handle;
|
||||
};
|
||||
|
||||
#define init_depth_stencil(a, b, c, d, e, f, g, h, i) init_depth_stencil_(__LINE__, a, b, c, d, e, f, g, h, i)
|
||||
static void init_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds,
|
||||
void init_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds,
|
||||
ID3D12Device *device, unsigned int width, unsigned int height, unsigned int array_size, unsigned int level_count,
|
||||
DXGI_FORMAT format, DXGI_FORMAT view_format, const D3D12_CLEAR_VALUE *clear_value)
|
||||
{
|
||||
|
@ -1024,8 +967,7 @@ static void init_depth_stencil_(unsigned int line, struct depth_stencil_resource
|
|||
ID3D12Device_CreateDepthStencilView(device, ds->texture, view_desc, ds->dsv_handle);
|
||||
}
|
||||
|
||||
#define destroy_depth_stencil(depth_stencil) destroy_depth_stencil_(__LINE__, depth_stencil)
|
||||
static void destroy_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds)
|
||||
void destroy_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds)
|
||||
{
|
||||
ID3D12DescriptorHeap_Release(ds->heap);
|
||||
ID3D12Resource_Release(ds->texture);
|
||||
|
|
|
@ -1131,4 +1131,158 @@ static inline D3D12_GPU_DESCRIPTOR_HANDLE get_gpu_sampler_handle(struct test_con
|
|||
return get_gpu_handle(context->device, heap, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, offset);
|
||||
}
|
||||
|
||||
struct vec2
|
||||
{
|
||||
float x, y;
|
||||
};
|
||||
|
||||
struct vec4
|
||||
{
|
||||
float x, y, z, w;
|
||||
};
|
||||
|
||||
struct uvec4
|
||||
{
|
||||
unsigned int x, y, z, w;
|
||||
};
|
||||
|
||||
struct ivec4
|
||||
{
|
||||
int x, y, z, w;
|
||||
};
|
||||
|
||||
struct dvec2
|
||||
{
|
||||
double x, y;
|
||||
};
|
||||
|
||||
bool compare_float(float f, float g, int ulps);
|
||||
bool compare_vec4(const struct vec4 *v1, const struct vec4 *v2, unsigned int ulps);
|
||||
bool compare_uvec4(const struct uvec4* v1, const struct uvec4 *v2);
|
||||
bool compare_uint8(uint8_t a, uint8_t b, unsigned int max_diff);
|
||||
bool compare_uint16(uint16_t a, uint16_t b, unsigned int max_diff);
|
||||
bool compare_uint64(uint64_t a, uint64_t b, unsigned int max_diff);
|
||||
ULONG get_refcount(void *iface);
|
||||
|
||||
void check_interface_(unsigned int line, IUnknown *iface, REFIID riid, bool supported);
|
||||
void check_heap_properties_(unsigned int line,
|
||||
const D3D12_HEAP_PROPERTIES *properties, const D3D12_HEAP_PROPERTIES *expected_properties);
|
||||
void check_heap_desc_(unsigned int line, const D3D12_HEAP_DESC *desc,
|
||||
const D3D12_HEAP_DESC *expected_desc);
|
||||
void check_alignment_(unsigned int line, uint64_t size, uint64_t alignment);
|
||||
void uav_barrier(ID3D12GraphicsCommandList *list, ID3D12Resource *resource);
|
||||
void copy_sub_resource_data(const D3D12_MEMCPY_DEST *dst, const D3D12_SUBRESOURCE_DATA *src,
|
||||
unsigned int row_count, unsigned int slice_count, size_t row_size);
|
||||
void upload_buffer_data_(unsigned int line, ID3D12Resource *buffer, size_t offset,
|
||||
size_t size, const void *data, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list);
|
||||
void upload_texture_data_(unsigned int line, ID3D12Resource *texture,
|
||||
const D3D12_SUBRESOURCE_DATA *data, unsigned int sub_resource_count,
|
||||
ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list);
|
||||
void init_readback(struct resource_readback *rb, ID3D12Resource *buffer,
|
||||
uint64_t buffer_size, uint64_t width, uint64_t height, unsigned int depth, uint64_t row_pitch);
|
||||
|
||||
void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_FORMAT format,
|
||||
struct resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list);
|
||||
uint8_t get_readback_uint8(struct resource_readback *rb, unsigned int x, unsigned int y);
|
||||
uint16_t get_readback_uint16(struct resource_readback *rb, unsigned int x, unsigned int y);
|
||||
uint64_t get_readback_uint64(struct resource_readback *rb, unsigned int x, unsigned int y);
|
||||
float get_readback_float(struct resource_readback *rb, unsigned int x, unsigned int y);
|
||||
const struct vec4 *get_readback_vec4(struct resource_readback *rb, unsigned int x, unsigned int y);
|
||||
const struct uvec4 *get_readback_uvec4(struct resource_readback *rb, unsigned int x, unsigned int y);
|
||||
|
||||
void check_readback_data_float_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, float expected, unsigned int max_diff);
|
||||
void check_sub_resource_float_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
float expected, unsigned int max_diff);
|
||||
void check_readback_data_uint8_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, uint8_t expected, unsigned int max_diff);
|
||||
|
||||
void check_sub_resource_uint8_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
uint8_t expected, unsigned int max_diff);
|
||||
void check_readback_data_uint16_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, uint16_t expected, unsigned int max_diff);
|
||||
void check_sub_resource_uint16_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
uint16_t expected, unsigned int max_diff);
|
||||
void check_readback_data_uint64_(unsigned int line, struct resource_readback *rb,
|
||||
const RECT *rect, uint64_t expected, unsigned int max_diff);
|
||||
void check_sub_resource_uint64_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
uint64_t expected, unsigned int max_diff);
|
||||
void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
const struct vec4 *expected, unsigned int max_diff);
|
||||
void check_sub_resource_uvec4_(unsigned int line, ID3D12Resource *texture,
|
||||
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
|
||||
const struct uvec4 *expected_value);
|
||||
|
||||
bool broken_on_warp(bool condition);
|
||||
bool is_min_max_filtering_supported(ID3D12Device *device);
|
||||
D3D12_TILED_RESOURCES_TIER get_tiled_resources_tier(ID3D12Device *device);
|
||||
bool is_standard_swizzle_64kb_supported(ID3D12Device *device);
|
||||
bool is_memory_pool_L1_supported(ID3D12Device *device);
|
||||
bool is_vrs_tier1_supported(ID3D12Device *device, bool *additional_shading_rates);
|
||||
bool is_vrs_tier2_supported(ID3D12Device *device);
|
||||
|
||||
ID3D12RootSignature *create_cb_root_signature_(unsigned int line,
|
||||
ID3D12Device *device, unsigned int reg_idx, D3D12_SHADER_VISIBILITY shader_visibility,
|
||||
D3D12_ROOT_SIGNATURE_FLAGS flags);
|
||||
ID3D12RootSignature *create_32bit_constants_root_signature_(unsigned int line,
|
||||
ID3D12Device *device, unsigned int reg_idx, unsigned int element_count,
|
||||
D3D12_SHADER_VISIBILITY shader_visibility, D3D12_ROOT_SIGNATURE_FLAGS flags);
|
||||
ID3D12RootSignature *create_texture_root_signature_(unsigned int line,
|
||||
ID3D12Device *device, D3D12_SHADER_VISIBILITY shader_visibility,
|
||||
unsigned int constant_count, D3D12_ROOT_SIGNATURE_FLAGS flags,
|
||||
const D3D12_STATIC_SAMPLER_DESC *sampler_desc);
|
||||
|
||||
ID3D12CommandSignature *create_command_signature_(unsigned int line,
|
||||
ID3D12Device *device, D3D12_INDIRECT_ARGUMENT_TYPE argument_type);
|
||||
|
||||
bool context_supports_dxil_(unsigned int line, struct test_context *context);
|
||||
|
||||
bool init_compute_test_context_(unsigned int line, struct test_context *context);
|
||||
ID3D12PipelineState *create_compute_pipeline_state_(unsigned int line, ID3D12Device *device,
|
||||
ID3D12RootSignature *root_signature, const D3D12_SHADER_BYTECODE cs);
|
||||
|
||||
struct depth_stencil_resource
|
||||
{
|
||||
ID3D12Resource *texture;
|
||||
ID3D12DescriptorHeap *heap;
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE dsv_handle;
|
||||
};
|
||||
|
||||
void init_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds,
|
||||
ID3D12Device *device, unsigned int width, unsigned int height, unsigned int array_size, unsigned int level_count,
|
||||
DXGI_FORMAT format, DXGI_FORMAT view_format, const D3D12_CLEAR_VALUE *clear_value);
|
||||
void destroy_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds);
|
||||
|
||||
#define check_interface(a, b, c) check_interface_(__LINE__, (IUnknown *)a, b, c)
|
||||
#define check_heap_properties(a, b) check_heap_properties_(__LINE__, a, b)
|
||||
#define check_heap_desc(a, b) check_heap_desc_(__LINE__, a, b)
|
||||
#define check_alignment(a, b) check_alignment_(__LINE__, a, b)
|
||||
#define upload_buffer_data(a, b, c, d, e, f) upload_buffer_data_(__LINE__, a, b, c, d, e, f)
|
||||
#define upload_texture_data(a, b, c, d, e) upload_texture_data_(__LINE__, a, b, c, d, e)
|
||||
#define check_readback_data_float(a, b, c, d) check_readback_data_float_(__LINE__, a, b, c, d)
|
||||
#define check_sub_resource_float(a, b, c, d, e, f) check_sub_resource_float_(__LINE__, a, b, c, d, e, f)
|
||||
#define check_readback_data_uint8(a, b, c, d) check_readback_data_uint8_(__LINE__, a, b, c, d)
|
||||
#define check_sub_resource_uint8(a, b, c, d, e, f) check_sub_resource_uint8_(__LINE__, a, b, c, d, e, f)
|
||||
#define check_readback_data_uint16(a, b, c, d) check_readback_data_uint16_(__LINE__, a, b, c, d)
|
||||
#define check_sub_resource_uint16(a, b, c, d, e, f) check_sub_resource_uint16_(__LINE__, a, b, c, d, e, f)
|
||||
#define check_readback_data_uint64(a, b, c, d) check_readback_data_uint64_(__LINE__, a, b, c, d)
|
||||
#define check_sub_resource_uint64(a, b, c, d, e, f) check_sub_resource_uint64_(__LINE__, a, b, c, d, e, f)
|
||||
#define check_sub_resource_vec4(a, b, c, d, e, f) check_sub_resource_vec4_(__LINE__, a, b, c, d, e, f)
|
||||
#define check_sub_resource_uvec4(a, b, c, d, e) check_sub_resource_uvec4_(__LINE__, a, b, c, d, e)
|
||||
#define create_cb_root_signature(a, b, c, e) create_cb_root_signature_(__LINE__, a, b, c, e)
|
||||
#define create_32bit_constants_root_signature(a, b, c, e) \
|
||||
create_32bit_constants_root_signature_(__LINE__, a, b, c, e, 0)
|
||||
#define create_texture_root_signature(a, b, c, d) create_texture_root_signature_(__LINE__, a, b, c, d, NULL)
|
||||
#define create_compute_pipeline_state(a, b, c) create_compute_pipeline_state_(__LINE__, a, b, c)
|
||||
#define create_command_signature(a, b) create_command_signature_(__LINE__, a, b)
|
||||
#define init_compute_test_context(context) init_compute_test_context_(__LINE__, context)
|
||||
#define context_supports_dxil(context) context_supports_dxil_(__LINE__, context)
|
||||
#define init_depth_stencil(a, b, c, d, e, f, g, h, i) init_depth_stencil_(__LINE__, a, b, c, d, e, f, g, h, i)
|
||||
#define destroy_depth_stencil(depth_stencil) destroy_depth_stencil_(__LINE__, depth_stencil)
|
||||
|
||||
#endif /* __VKD3D_D3D12_TEST_UTILS_H */
|
||||
|
|
Loading…
Reference in New Issue