mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
tests: Print the file name instead of the test name in test logs.
Some test programs, particularly the shader runner, are built from many different files nowadays, and a line number is relatively cumbersome to use if you don't know which file that line comes from.
This commit is contained in:
committed by
Henri Verbeet
parent
73be28a252
commit
3264378fa0
Notes:
Henri Verbeet
2024-12-03 14:55:39 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1221
@ -43,53 +43,58 @@ static void vkd3d_test_end_todo(void);
|
|||||||
* Use assert_that() for conditions that should always be true.
|
* Use assert_that() for conditions that should always be true.
|
||||||
* todo_if() and bug_if() do not influence assert_that().
|
* todo_if() and bug_if() do not influence assert_that().
|
||||||
*/
|
*/
|
||||||
#define assert_that assert_that_(__LINE__)
|
#define assert_that assert_that_(__FILE__, __LINE__)
|
||||||
|
|
||||||
#define ok ok_(__LINE__)
|
#define ok ok_(__FILE__, __LINE__)
|
||||||
|
|
||||||
#define skip skip_(__LINE__)
|
#define skip skip_(__FILE__, __LINE__)
|
||||||
|
|
||||||
#define trace trace_(__LINE__)
|
#define trace trace_(__FILE__, __LINE__)
|
||||||
|
|
||||||
#define assert_that_(line) \
|
#define assert_that_(file, line) \
|
||||||
do { \
|
do { \
|
||||||
|
const char *vkd3d_file = file; \
|
||||||
unsigned int vkd3d_line = line; \
|
unsigned int vkd3d_line = line; \
|
||||||
VKD3D_TEST_ASSERT_THAT
|
VKD3D_TEST_ASSERT_THAT
|
||||||
|
|
||||||
#define VKD3D_TEST_ASSERT_THAT(...) \
|
#define VKD3D_TEST_ASSERT_THAT(...) \
|
||||||
vkd3d_test_assert_that(vkd3d_line, __VA_ARGS__); } while (0)
|
vkd3d_test_assert_that(vkd3d_file, vkd3d_line, __VA_ARGS__); } while (0)
|
||||||
|
|
||||||
#define ok_(line) \
|
#define ok_(file, line) \
|
||||||
do { \
|
do { \
|
||||||
|
const char *vkd3d_file = file; \
|
||||||
unsigned int vkd3d_line = line; \
|
unsigned int vkd3d_line = line; \
|
||||||
VKD3D_TEST_OK
|
VKD3D_TEST_OK
|
||||||
|
|
||||||
#define VKD3D_TEST_OK(...) \
|
#define VKD3D_TEST_OK(...) \
|
||||||
vkd3d_test_ok(vkd3d_line, __VA_ARGS__); } while (0)
|
vkd3d_test_ok(vkd3d_file, vkd3d_line, __VA_ARGS__); } while (0)
|
||||||
|
|
||||||
#define todo_(line) \
|
#define todo_(file, line) \
|
||||||
do { \
|
do { \
|
||||||
|
const char *vkd3d_file = file; \
|
||||||
unsigned int vkd3d_line = line; \
|
unsigned int vkd3d_line = line; \
|
||||||
VKD3D_TEST_TODO
|
VKD3D_TEST_TODO
|
||||||
|
|
||||||
#define VKD3D_TEST_TODO(...) \
|
#define VKD3D_TEST_TODO(...) \
|
||||||
vkd3d_test_todo(vkd3d_line, __VA_ARGS__); } while (0)
|
vkd3d_test_todo(vkd3d_file, vkd3d_line, __VA_ARGS__); } while (0)
|
||||||
|
|
||||||
#define skip_(line) \
|
#define skip_(file, line) \
|
||||||
do { \
|
do { \
|
||||||
|
const char *vkd3d_file = file; \
|
||||||
unsigned int vkd3d_line = line; \
|
unsigned int vkd3d_line = line; \
|
||||||
VKD3D_TEST_SKIP
|
VKD3D_TEST_SKIP
|
||||||
|
|
||||||
#define VKD3D_TEST_SKIP(...) \
|
#define VKD3D_TEST_SKIP(...) \
|
||||||
vkd3d_test_skip(vkd3d_line, __VA_ARGS__); } while (0)
|
vkd3d_test_skip(vkd3d_file, vkd3d_line, __VA_ARGS__); } while (0)
|
||||||
|
|
||||||
#define trace_(line) \
|
#define trace_(file, line) \
|
||||||
do { \
|
do { \
|
||||||
|
const char *vkd3d_file = file; \
|
||||||
unsigned int vkd3d_line = line; \
|
unsigned int vkd3d_line = line; \
|
||||||
VKD3D_TEST_TRACE
|
VKD3D_TEST_TRACE
|
||||||
|
|
||||||
#define VKD3D_TEST_TRACE(...) \
|
#define VKD3D_TEST_TRACE(...) \
|
||||||
vkd3d_test_trace(vkd3d_line, __VA_ARGS__); } while (0)
|
vkd3d_test_trace(vkd3d_file, vkd3d_line, __VA_ARGS__); } while (0)
|
||||||
|
|
||||||
#define todo_if(is_todo) \
|
#define todo_if(is_todo) \
|
||||||
for (vkd3d_test_start_todo(is_todo); vkd3d_test_loop_todo(); vkd3d_test_end_todo())
|
for (vkd3d_test_start_todo(is_todo); vkd3d_test_loop_todo(); vkd3d_test_end_todo())
|
||||||
@ -135,45 +140,59 @@ broken(bool condition)
|
|||||||
return condition && vkd3d_test_platform_is_windows();
|
return condition && vkd3d_test_platform_is_windows();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vkd3d_test_printf(unsigned int line, const char *msg)
|
/* basename() is not reentrant, basename_r() is not standard and this simple
|
||||||
|
* implementation should be enough for us. */
|
||||||
|
static const char *vkd3d_basename(const char *filename)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
if ((p = strrchr(filename, '/')))
|
||||||
|
filename = ++p;
|
||||||
|
if ((p = strrchr(filename, '\\')))
|
||||||
|
filename = ++p;
|
||||||
|
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vkd3d_test_printf(const char *file, unsigned int line, const char *msg)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
printf("%s:%u: ", vkd3d_test_name, line);
|
printf("%s:%u: ", vkd3d_basename(file), line);
|
||||||
for (i = 0; i < vkd3d_test_state.context_count; ++i)
|
for (i = 0; i < vkd3d_test_state.context_count; ++i)
|
||||||
printf("%s: ", vkd3d_test_state.context[i]);
|
printf("%s: ", vkd3d_test_state.context[i]);
|
||||||
printf("%s", msg);
|
printf("%s", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vkd3d_test_check_assert_that(unsigned int line, bool result, const char *fmt, va_list args)
|
vkd3d_test_check_assert_that(const char *file, unsigned int line, bool result, const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
vkd3d_atomic_increment_u32(&vkd3d_test_state.success_count);
|
vkd3d_atomic_increment_u32(&vkd3d_test_state.success_count);
|
||||||
if (vkd3d_test_state.debug_level > 1)
|
if (vkd3d_test_state.debug_level > 1)
|
||||||
vkd3d_test_printf(line, "Test succeeded.\n");
|
vkd3d_test_printf(file, line, "Test succeeded.\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vkd3d_atomic_increment_u32(&vkd3d_test_state.failure_count);
|
vkd3d_atomic_increment_u32(&vkd3d_test_state.failure_count);
|
||||||
vkd3d_test_printf(line, "Test failed: ");
|
vkd3d_test_printf(file, line, "Test failed: ");
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VKD3D_PRINTF_FUNC(3, 4) VKD3D_UNUSED
|
static void VKD3D_PRINTF_FUNC(4, 5) VKD3D_UNUSED
|
||||||
vkd3d_test_assert_that(unsigned int line, bool result, const char *fmt, ...)
|
vkd3d_test_assert_that(const char *file, unsigned int line, bool result, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vkd3d_test_check_assert_that(line, result, fmt, args);
|
vkd3d_test_check_assert_that(file, line, result, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list args)
|
vkd3d_test_check_ok(const char *file, unsigned int line, bool result, const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
bool is_todo = vkd3d_test_state.todo_level && !vkd3d_test_platform_is_windows();
|
bool is_todo = vkd3d_test_state.todo_level && !vkd3d_test_platform_is_windows();
|
||||||
bool is_bug = vkd3d_test_state.bug_level && !vkd3d_test_platform_is_windows();
|
bool is_bug = vkd3d_test_state.bug_level && !vkd3d_test_platform_is_windows();
|
||||||
@ -184,9 +203,9 @@ vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list arg
|
|||||||
if (is_todo)
|
if (is_todo)
|
||||||
result = !result;
|
result = !result;
|
||||||
if (result)
|
if (result)
|
||||||
vkd3d_test_printf(line, "Fixed bug: ");
|
vkd3d_test_printf(file, line, "Fixed bug: ");
|
||||||
else
|
else
|
||||||
vkd3d_test_printf(line, "Bug: ");
|
vkd3d_test_printf(file, line, "Bug: ");
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
}
|
}
|
||||||
else if (is_todo)
|
else if (is_todo)
|
||||||
@ -194,48 +213,48 @@ vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list arg
|
|||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
vkd3d_atomic_increment_u32(&vkd3d_test_state.todo_success_count);
|
vkd3d_atomic_increment_u32(&vkd3d_test_state.todo_success_count);
|
||||||
vkd3d_test_printf(line, "Todo succeeded: ");
|
vkd3d_test_printf(file, line, "Todo succeeded: ");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vkd3d_atomic_increment_u32(&vkd3d_test_state.todo_count);
|
vkd3d_atomic_increment_u32(&vkd3d_test_state.todo_count);
|
||||||
vkd3d_test_printf(line, "Todo: ");
|
vkd3d_test_printf(file, line, "Todo: ");
|
||||||
}
|
}
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vkd3d_test_check_assert_that(line, result, fmt, args);
|
vkd3d_test_check_assert_that(file, line, result, fmt, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VKD3D_PRINTF_FUNC(3, 4) VKD3D_UNUSED
|
static void VKD3D_PRINTF_FUNC(4, 5) VKD3D_UNUSED
|
||||||
vkd3d_test_ok(unsigned int line, bool result, const char *fmt, ...)
|
vkd3d_test_ok(const char *file, unsigned int line, bool result, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vkd3d_test_check_ok(line, result, fmt, args);
|
vkd3d_test_check_ok(file, line, result, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VKD3D_PRINTF_FUNC(2, 3) VKD3D_UNUSED
|
static void VKD3D_PRINTF_FUNC(3, 4) VKD3D_UNUSED
|
||||||
vkd3d_test_skip(unsigned int line, const char *fmt, ...)
|
vkd3d_test_skip(const char *file, unsigned int line, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vkd3d_test_printf(line, "Test skipped: ");
|
vkd3d_test_printf(file, line, "Test skipped: ");
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
vkd3d_atomic_increment_u32(&vkd3d_test_state.skip_count);
|
vkd3d_atomic_increment_u32(&vkd3d_test_state.skip_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VKD3D_PRINTF_FUNC(2, 3) VKD3D_UNUSED
|
static void VKD3D_PRINTF_FUNC(3, 4) VKD3D_UNUSED
|
||||||
vkd3d_test_trace(unsigned int line, const char *fmt, ...)
|
vkd3d_test_trace(const char *file, unsigned int line, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vkd3d_test_printf(line, "");
|
vkd3d_test_printf(file, line, "");
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
386
tests/d3d12.c
386
tests/d3d12.c
File diff suppressed because it is too large
Load Diff
@ -241,19 +241,19 @@ static HRESULT wait_for_fence(ID3D12Fence *fence, uint64_t value)
|
|||||||
return ret == WAIT_OBJECT_0 ? S_OK : E_FAIL;
|
return ret == WAIT_OBJECT_0 ? S_OK : E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue)
|
static void wait_queue_idle_(const char *file, unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue)
|
||||||
{
|
{
|
||||||
ID3D12Fence *fence;
|
ID3D12Fence *fence;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
hr = ID3D12Device_CreateFence(device, 0, D3D12_FENCE_FLAG_NONE,
|
hr = ID3D12Device_CreateFence(device, 0, D3D12_FENCE_FLAG_NONE,
|
||||||
&IID_ID3D12Fence, (void **)&fence);
|
&IID_ID3D12Fence, (void **)&fence);
|
||||||
assert_that_(line)(hr == S_OK, "Failed to create fence, hr %#x.\n", hr);
|
assert_that_(file, line)(hr == S_OK, "Failed to create fence, hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = ID3D12CommandQueue_Signal(queue, fence, 1);
|
hr = ID3D12CommandQueue_Signal(queue, fence, 1);
|
||||||
assert_that_(line)(hr == S_OK, "Failed to signal fence, hr %#x.\n", hr);
|
assert_that_(file, line)(hr == S_OK, "Failed to signal fence, hr %#x.\n", hr);
|
||||||
hr = wait_for_fence(fence, 1);
|
hr = wait_for_fence(fence, 1);
|
||||||
assert_that_(line)(hr == S_OK, "Failed to wait for fence, hr %#x.\n", hr);
|
assert_that_(file, line)(hr == S_OK, "Failed to wait for fence, hr %#x.\n", hr);
|
||||||
|
|
||||||
ID3D12Fence_Release(fence);
|
ID3D12Fence_Release(fence);
|
||||||
}
|
}
|
||||||
|
@ -22,18 +22,18 @@ VKD3D_AGILITY_SDK_EXPORTS
|
|||||||
|
|
||||||
struct test_options test_options = {0};
|
struct test_options test_options = {0};
|
||||||
|
|
||||||
#define recreate_command_list(a, b, c) recreate_command_list_(__LINE__, a, b, c)
|
#define recreate_command_list(a, b, c) recreate_command_list_(__FILE__, __LINE__, a, b, c)
|
||||||
static void recreate_command_list_(unsigned int line, ID3D12Device *device,
|
static void recreate_command_list_(const char *file, unsigned int line, ID3D12Device *device,
|
||||||
ID3D12CommandAllocator *allocator, ID3D12GraphicsCommandList **command_list)
|
ID3D12CommandAllocator *allocator, ID3D12GraphicsCommandList **command_list)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
hr = ID3D12CommandAllocator_Reset(allocator);
|
hr = ID3D12CommandAllocator_Reset(allocator);
|
||||||
ok_(line)(hr == S_OK, "Failed to reset command allocator, hr %#x.\n", hr);
|
ok_(file, line)(hr == S_OK, "Failed to reset command allocator, hr %#x.\n", hr);
|
||||||
ID3D12GraphicsCommandList_Release(*command_list);
|
ID3D12GraphicsCommandList_Release(*command_list);
|
||||||
hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
|
hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
|
||||||
allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)command_list);
|
allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)command_list);
|
||||||
ok_(line)(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
|
ok_(file, line)(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_invalid_resource_barriers(void)
|
static void test_invalid_resource_barriers(void)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -29,9 +29,9 @@ VKD3D_AGILITY_SDK_EXPORTS
|
|||||||
|
|
||||||
struct test_options test_options = {0};
|
struct test_options test_options = {0};
|
||||||
|
|
||||||
#define check_preprocess(a, b, c, d, e) check_preprocess_(__LINE__, a, b, c, d, e)
|
#define check_preprocess(a, b, c, d, e) check_preprocess_(__FILE__, __LINE__, a, b, c, d, e)
|
||||||
static void check_preprocess_(int line, const char *source, const D3D_SHADER_MACRO *macros,
|
static void check_preprocess_(const char *file, int line, const char *source,
|
||||||
ID3DInclude *include, const char *present, const char *absent)
|
const D3D_SHADER_MACRO *macros, ID3DInclude *include, const char *present, const char *absent)
|
||||||
{
|
{
|
||||||
ID3D10Blob *blob, *errors;
|
ID3D10Blob *blob, *errors;
|
||||||
const char *code;
|
const char *code;
|
||||||
@ -39,20 +39,20 @@ static void check_preprocess_(int line, const char *source, const D3D_SHADER_MAC
|
|||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
hr = D3DPreprocess(source, strlen(source), NULL, macros, include, &blob, &errors);
|
hr = D3DPreprocess(source, strlen(source), NULL, macros, include, &blob, &errors);
|
||||||
assert_that_(line)(hr == S_OK, "Failed to preprocess shader, hr %#x.\n", hr);
|
assert_that_(file, line)(hr == S_OK, "Failed to preprocess shader, hr %#x.\n", hr);
|
||||||
if (errors)
|
if (errors)
|
||||||
{
|
{
|
||||||
if (vkd3d_test_state.debug_level)
|
if (vkd3d_test_state.debug_level)
|
||||||
trace_(line)("%s\n", (char *)ID3D10Blob_GetBufferPointer(errors));
|
trace_(file, line)("%s\n", (char *)ID3D10Blob_GetBufferPointer(errors));
|
||||||
ID3D10Blob_Release(errors);
|
ID3D10Blob_Release(errors);
|
||||||
}
|
}
|
||||||
code = ID3D10Blob_GetBufferPointer(blob);
|
code = ID3D10Blob_GetBufferPointer(blob);
|
||||||
size = ID3D10Blob_GetBufferSize(blob);
|
size = ID3D10Blob_GetBufferSize(blob);
|
||||||
if (present)
|
if (present)
|
||||||
ok_(line)(vkd3d_memmem(code, size, present, strlen(present)),
|
ok_(file, line)(vkd3d_memmem(code, size, present, strlen(present)),
|
||||||
"\"%s\" not found in preprocessed shader.\n", present);
|
"\"%s\" not found in preprocessed shader.\n", present);
|
||||||
if (absent)
|
if (absent)
|
||||||
ok_(line)(!vkd3d_memmem(code, size, absent, strlen(absent)),
|
ok_(file, line)(!vkd3d_memmem(code, size, absent, strlen(absent)),
|
||||||
"\"%s\" found in preprocessed shader.\n", absent);
|
"\"%s\" found in preprocessed shader.\n", absent);
|
||||||
ID3D10Blob_Release(blob);
|
ID3D10Blob_Release(blob);
|
||||||
}
|
}
|
||||||
@ -464,19 +464,20 @@ static void test_preprocess(void)
|
|||||||
ID3D10Blob_Release(errors);
|
ID3D10Blob_Release(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define compile_shader(a, b) compile_shader_(__LINE__, a, b, 0)
|
#define compile_shader(a, b) compile_shader_(__FILE__, __LINE__, a, b, 0)
|
||||||
#define compile_shader_flags(a, b, c) compile_shader_(__LINE__, a, b, c)
|
#define compile_shader_flags(a, b, c) compile_shader_(__FILE__, __LINE__, a, b, c)
|
||||||
static ID3D10Blob *compile_shader_(unsigned int line, const char *source, const char *target, UINT flags)
|
static ID3D10Blob *compile_shader_(const char *file, unsigned int line,
|
||||||
|
const char *source, const char *target, UINT flags)
|
||||||
{
|
{
|
||||||
ID3D10Blob *blob = NULL, *errors = NULL;
|
ID3D10Blob *blob = NULL, *errors = NULL;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
hr = D3DCompile(source, strlen(source), NULL, NULL, NULL, "main", target, flags, 0, &blob, &errors);
|
hr = D3DCompile(source, strlen(source), NULL, NULL, NULL, "main", target, flags, 0, &blob, &errors);
|
||||||
ok_(line)(hr == S_OK, "Failed to compile shader, hr %#x.\n", hr);
|
ok_(file, line)(hr == S_OK, "Failed to compile shader, hr %#x.\n", hr);
|
||||||
if (errors)
|
if (errors)
|
||||||
{
|
{
|
||||||
if (vkd3d_test_state.debug_level)
|
if (vkd3d_test_state.debug_level)
|
||||||
trace_(line)("%s\n", (char *)ID3D10Blob_GetBufferPointer(errors));
|
trace_(file, line)("%s\n", (char *)ID3D10Blob_GetBufferPointer(errors));
|
||||||
ID3D10Blob_Release(errors);
|
ID3D10Blob_Release(errors);
|
||||||
}
|
}
|
||||||
return blob;
|
return blob;
|
||||||
@ -1371,18 +1372,19 @@ static void test_get_blob_part(void)
|
|||||||
ok(!refcount, "Got refcount %u.\n", refcount);
|
ok(!refcount, "Got refcount %u.\n", refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_type_desc_(int line, const D3D12_SHADER_TYPE_DESC *type, const D3D12_SHADER_TYPE_DESC *expect)
|
#define check_type_desc(a, b) check_type_desc_(__FILE__, __LINE__, a, b)
|
||||||
|
static void check_type_desc_(const char *file, int line,
|
||||||
|
const D3D12_SHADER_TYPE_DESC *type, const D3D12_SHADER_TYPE_DESC *expect)
|
||||||
{
|
{
|
||||||
ok_(line)(type->Class == expect->Class, "Got class %#x.\n", type->Class);
|
ok_(file, line)(type->Class == expect->Class, "Got class %#x.\n", type->Class);
|
||||||
ok_(line)(type->Type == expect->Type, "Got type %#x.\n", type->Type);
|
ok_(file, line)(type->Type == expect->Type, "Got type %#x.\n", type->Type);
|
||||||
ok_(line)(type->Rows == expect->Rows, "Got %u rows.\n", type->Rows);
|
ok_(file, line)(type->Rows == expect->Rows, "Got %u rows.\n", type->Rows);
|
||||||
ok_(line)(type->Columns == expect->Columns, "Got %u columns.\n", type->Columns);
|
ok_(file, line)(type->Columns == expect->Columns, "Got %u columns.\n", type->Columns);
|
||||||
ok_(line)(type->Elements == expect->Elements, "Got %u elements.\n", type->Elements);
|
ok_(file, line)(type->Elements == expect->Elements, "Got %u elements.\n", type->Elements);
|
||||||
ok_(line)(type->Members == expect->Members, "Got %u members.\n", type->Members);
|
ok_(file, line)(type->Members == expect->Members, "Got %u members.\n", type->Members);
|
||||||
ok_(line)(type->Offset == expect->Offset, "Got offset %u.\n", type->Offset);
|
ok_(file, line)(type->Offset == expect->Offset, "Got offset %u.\n", type->Offset);
|
||||||
ok_(line)(!strcmp(type->Name, expect->Name), "Got name \"%s\".\n", type->Name);
|
ok_(file, line)(!strcmp(type->Name, expect->Name), "Got name \"%s\".\n", type->Name);
|
||||||
}
|
}
|
||||||
#define check_type_desc(a, b) check_type_desc_(__LINE__, a, b)
|
|
||||||
|
|
||||||
static void test_reflection(void)
|
static void test_reflection(void)
|
||||||
{
|
{
|
||||||
@ -2023,27 +2025,27 @@ static void test_default_values_reflection(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_signature_element_(int line, const D3D12_SIGNATURE_PARAMETER_DESC *desc,
|
#define check_signature_element(a, b, c) check_signature_element_(__FILE__, __LINE__, a, b, c)
|
||||||
|
static void check_signature_element_(const char *file, int line, const D3D12_SIGNATURE_PARAMETER_DESC *desc,
|
||||||
const D3D12_SIGNATURE_PARAMETER_DESC *expect, bool is_todo)
|
const D3D12_SIGNATURE_PARAMETER_DESC *expect, bool is_todo)
|
||||||
{
|
{
|
||||||
todo_if(is_todo && strcmp(desc->SemanticName, expect->SemanticName))
|
todo_if(is_todo && strcmp(desc->SemanticName, expect->SemanticName))
|
||||||
ok_(line)(!strcmp(desc->SemanticName, expect->SemanticName), "Got name \"%s\".\n", desc->SemanticName);
|
ok_(file, line)(!strcmp(desc->SemanticName, expect->SemanticName), "Got name \"%s\".\n", desc->SemanticName);
|
||||||
todo_if(is_todo && desc->SemanticIndex != expect->SemanticIndex)
|
todo_if(is_todo && desc->SemanticIndex != expect->SemanticIndex)
|
||||||
ok_(line)(desc->SemanticIndex == expect->SemanticIndex, "Got index %u.\n", desc->SemanticIndex);
|
ok_(file, line)(desc->SemanticIndex == expect->SemanticIndex, "Got index %u.\n", desc->SemanticIndex);
|
||||||
todo_if(is_todo && desc->Register != expect->Register)
|
todo_if(is_todo && desc->Register != expect->Register)
|
||||||
ok_(line)(desc->Register == expect->Register, "Got register %u.\n", desc->Register);
|
ok_(file, line)(desc->Register == expect->Register, "Got register %u.\n", desc->Register);
|
||||||
todo_if(is_todo && desc->SystemValueType != expect->SystemValueType)
|
todo_if(is_todo && desc->SystemValueType != expect->SystemValueType)
|
||||||
ok_(line)(desc->SystemValueType == expect->SystemValueType, "Got sysval %u.\n", desc->SystemValueType);
|
ok_(file, line)(desc->SystemValueType == expect->SystemValueType, "Got sysval %u.\n", desc->SystemValueType);
|
||||||
todo_if(is_todo && desc->ComponentType != expect->ComponentType)
|
todo_if(is_todo && desc->ComponentType != expect->ComponentType)
|
||||||
ok_(line)(desc->ComponentType == expect->ComponentType, "Got data type %u.\n", desc->ComponentType);
|
ok_(file, line)(desc->ComponentType == expect->ComponentType, "Got data type %u.\n", desc->ComponentType);
|
||||||
todo_if(is_todo && desc->Mask != expect->Mask)
|
todo_if(is_todo && desc->Mask != expect->Mask)
|
||||||
ok_(line)(desc->Mask == expect->Mask, "Got mask %#x.\n", desc->Mask);
|
ok_(file, line)(desc->Mask == expect->Mask, "Got mask %#x.\n", desc->Mask);
|
||||||
todo_if(desc->ReadWriteMask != expect->ReadWriteMask)
|
todo_if(desc->ReadWriteMask != expect->ReadWriteMask)
|
||||||
ok_(line)(desc->ReadWriteMask == expect->ReadWriteMask, "Got used mask %#x.\n", desc->ReadWriteMask);
|
ok_(file, line)(desc->ReadWriteMask == expect->ReadWriteMask, "Got used mask %#x.\n", desc->ReadWriteMask);
|
||||||
todo_if(is_todo && desc->Stream != expect->Stream)
|
todo_if(is_todo && desc->Stream != expect->Stream)
|
||||||
ok_(line)(desc->Stream == expect->Stream, "Got stream %u.\n", desc->Stream);
|
ok_(file, line)(desc->Stream == expect->Stream, "Got stream %u.\n", desc->Stream);
|
||||||
}
|
}
|
||||||
#define check_signature_element(a, b, c) check_signature_element_(__LINE__, a, b, c)
|
|
||||||
|
|
||||||
static void test_signature_reflection(void)
|
static void test_signature_reflection(void)
|
||||||
{
|
{
|
||||||
|
@ -120,7 +120,7 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co
|
|||||||
if (params->desc.sample_count > 1 && params->desc.level_count > 1)
|
if (params->desc.sample_count > 1 && params->desc.level_count > 1)
|
||||||
fatal_error("Multisampled texture has multiple levels.\n");
|
fatal_error("Multisampled texture has multiple levels.\n");
|
||||||
|
|
||||||
resource->resource = create_default_texture_(__LINE__, device, D3D12_RESOURCE_DIMENSION_TEXTURE2D,
|
resource->resource = create_default_texture_(__FILE__, __LINE__, device, D3D12_RESOURCE_DIMENSION_TEXTURE2D,
|
||||||
params->desc.width, params->desc.height, 1, params->desc.level_count, params->desc.sample_count,
|
params->desc.width, params->desc.height, 1, params->desc.level_count, params->desc.sample_count,
|
||||||
params->desc.format, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET, initial_state);
|
params->desc.format, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET, initial_state);
|
||||||
ID3D12Device_CreateRenderTargetView(device, resource->resource,
|
ID3D12Device_CreateRenderTargetView(device, resource->resource,
|
||||||
@ -169,9 +169,9 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co
|
|||||||
if (params->desc.sample_count > 1 && params->desc.level_count > 1)
|
if (params->desc.sample_count > 1 && params->desc.level_count > 1)
|
||||||
fatal_error("Multisampled texture has multiple levels.\n");
|
fatal_error("Multisampled texture has multiple levels.\n");
|
||||||
|
|
||||||
resource->resource = create_default_texture_(__LINE__, device, D3D12_RESOURCE_DIMENSION_TEXTURE2D,
|
resource->resource = create_default_texture_(__FILE__, __LINE__, device,
|
||||||
params->desc.width, params->desc.height, 1, params->desc.level_count,
|
D3D12_RESOURCE_DIMENSION_TEXTURE2D, params->desc.width, params->desc.height, 1,
|
||||||
params->desc.sample_count, params->desc.format,
|
params->desc.level_count, params->desc.sample_count, params->desc.format,
|
||||||
/* Multisampled textures must have ALLOW_RENDER_TARGET set. */
|
/* Multisampled textures must have ALLOW_RENDER_TARGET set. */
|
||||||
(params->desc.sample_count > 1) ? D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET : 0, initial_state);
|
(params->desc.sample_count > 1) ? D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET : 0, initial_state);
|
||||||
if (params->data)
|
if (params->data)
|
||||||
|
@ -1419,13 +1419,8 @@ static void run_tests(enum shading_language language)
|
|||||||
|
|
||||||
void run_shader_tests_gl(void)
|
void run_shader_tests_gl(void)
|
||||||
{
|
{
|
||||||
const char *test_name;
|
|
||||||
|
|
||||||
test_name = vkd3d_test_name;
|
|
||||||
vkd3d_test_name = "shader_runner_gl";
|
|
||||||
run_tests(SPIR_V);
|
run_tests(SPIR_V);
|
||||||
run_tests(GLSL);
|
run_tests(GLSL);
|
||||||
vkd3d_test_name = test_name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -267,9 +267,9 @@ static const struct uvec4 *get_readback_uvec4(const struct resource_readback *rb
|
|||||||
return get_readback_data(rb, x, y, 0, sizeof(struct uvec4));
|
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)
|
#define check_readback_data_float(a, b, c, d) check_readback_data_float_(__FILE__, __LINE__, a, b, c, d)
|
||||||
static inline void check_readback_data_float_(unsigned int line, const struct resource_readback *rb,
|
static inline void check_readback_data_float_(const char *file, unsigned int line,
|
||||||
const RECT *rect, float expected, unsigned int max_diff)
|
const struct resource_readback *rb, const RECT *rect, float expected, unsigned int max_diff)
|
||||||
{
|
{
|
||||||
RECT r = {0, 0, rb->width, rb->height};
|
RECT r = {0, 0, rb->width, rb->height};
|
||||||
unsigned int x = 0, y;
|
unsigned int x = 0, y;
|
||||||
@ -293,12 +293,12 @@ static inline void check_readback_data_float_(unsigned int line, const struct re
|
|||||||
if (!all_match)
|
if (!all_match)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ok_(line)(all_match, "Got %.8e, expected %.8e at (%u, %u).\n", got, expected, x, y);
|
ok_(file, line)(all_match, "Got %.8e, expected %.8e at (%u, %u).\n", got, expected, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define check_readback_data_double(a, b, c, d) check_readback_data_double_(__LINE__, a, b, c, d)
|
#define check_readback_data_double(a, b, c, d) check_readback_data_double_(__FILE__, __LINE__, a, b, c, d)
|
||||||
static inline void check_readback_data_double_(unsigned int line, const struct resource_readback *rb,
|
static inline void check_readback_data_double_(const char *file, unsigned int line,
|
||||||
const RECT *rect, double expected, unsigned int max_diff)
|
const struct resource_readback *rb, const RECT *rect, double expected, unsigned int max_diff)
|
||||||
{
|
{
|
||||||
RECT r = {0, 0, rb->width, rb->height};
|
RECT r = {0, 0, rb->width, rb->height};
|
||||||
unsigned int x = 0, y;
|
unsigned int x = 0, y;
|
||||||
@ -322,12 +322,12 @@ static inline void check_readback_data_double_(unsigned int line, const struct r
|
|||||||
if (!all_match)
|
if (!all_match)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ok_(line)(all_match, "Got %.15le, expected %.15le at (%u, %u).\n", got, expected, x, y);
|
ok_(file, line)(all_match, "Got %.15le, expected %.15le at (%u, %u).\n", got, expected, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define check_readback_data_uint(a, b, c, d) check_readback_data_uint_(__LINE__, a, b, c, d)
|
#define check_readback_data_uint(a, b, c, d) check_readback_data_uint_(__FILE__, __LINE__, a, b, c, d)
|
||||||
static inline void check_readback_data_uint_(unsigned int line, struct resource_readback *rb,
|
static inline void check_readback_data_uint_(const char *file, unsigned int line,
|
||||||
const D3D12_BOX *box, unsigned int expected, unsigned int max_diff)
|
struct resource_readback *rb, const D3D12_BOX *box, unsigned int expected, unsigned int max_diff)
|
||||||
{
|
{
|
||||||
D3D12_BOX b = {0, 0, 0, rb->width, rb->height, rb->depth};
|
D3D12_BOX b = {0, 0, 0, rb->width, rb->height, rb->depth};
|
||||||
unsigned int x = 0, y = 0, z;
|
unsigned int x = 0, y = 0, z;
|
||||||
@ -356,12 +356,12 @@ static inline void check_readback_data_uint_(unsigned int line, struct resource_
|
|||||||
if (!all_match)
|
if (!all_match)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ok_(line)(all_match, "Got 0x%08x, expected 0x%08x at (%u, %u, %u).\n", got, expected, x, y, z);
|
ok_(file, line)(all_match, "Got 0x%08x, expected 0x%08x at (%u, %u, %u).\n", got, expected, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define check_readback_data_uint64(a, b, c, d) check_readback_data_uint64_(__LINE__, a, b, c, d)
|
#define check_readback_data_uint64(a, b, c, d) check_readback_data_uint64_(__FILE__, __LINE__, a, b, c, d)
|
||||||
static inline void check_readback_data_uint64_(unsigned int line, struct resource_readback *rb,
|
static inline void check_readback_data_uint64_(const char *file, unsigned int line,
|
||||||
const D3D12_BOX *box, uint64_t expected, unsigned int max_diff)
|
struct resource_readback *rb, const D3D12_BOX *box, uint64_t expected, unsigned int max_diff)
|
||||||
{
|
{
|
||||||
D3D12_BOX b = {0, 0, 0, rb->width, rb->height, rb->depth};
|
D3D12_BOX b = {0, 0, 0, rb->width, rb->height, rb->depth};
|
||||||
unsigned int x = 0, y = 0;
|
unsigned int x = 0, y = 0;
|
||||||
@ -385,12 +385,12 @@ static inline void check_readback_data_uint64_(unsigned int line, struct resourc
|
|||||||
if (!all_match)
|
if (!all_match)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ok_(line)(all_match, "Got 0x%016"PRIx64", expected 0x%016"PRIx64" at (%u, %u).\n", got, expected, x, y);
|
ok_(file, line)(all_match, "Got 0x%016"PRIx64", expected 0x%016"PRIx64" at (%u, %u).\n", got, expected, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define check_readback_data_vec2(a, b, c, d) check_readback_data_vec_(__LINE__, a, b, c, d, 2)
|
#define check_readback_data_vec2(a, b, c, d) check_readback_data_vec_(__FILE__, __LINE__, a, b, c, d, 2)
|
||||||
#define check_readback_data_vec4(a, b, c, d) check_readback_data_vec_(__LINE__, a, b, c, d, 4)
|
#define check_readback_data_vec4(a, b, c, d) check_readback_data_vec_(__FILE__, __LINE__, a, b, c, d, 4)
|
||||||
static inline void check_readback_data_vec_(unsigned int line, const struct resource_readback *rb,
|
static inline void check_readback_data_vec_(const char *file, unsigned int line, const struct resource_readback *rb,
|
||||||
const RECT *rect, const struct vec4 *expected, unsigned int max_diff, unsigned component_count)
|
const RECT *rect, const struct vec4 *expected, unsigned int max_diff, unsigned component_count)
|
||||||
{
|
{
|
||||||
RECT r = {0, 0, rb->width, rb->height};
|
RECT r = {0, 0, rb->width, rb->height};
|
||||||
@ -415,14 +415,15 @@ static inline void check_readback_data_vec_(unsigned int line, const struct reso
|
|||||||
if (!all_match)
|
if (!all_match)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ok_(line)(all_match, "Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e} at (%u, %u).\n",
|
ok_(file, line)(all_match, "Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e} at (%u, %u).\n",
|
||||||
got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
|
got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define check_readback_data_ivec4(a, b, c) check_readback_data_uvec4_(__LINE__, a, b, (const struct uvec4 *)(c))
|
#define check_readback_data_ivec4(a, b, c) \
|
||||||
#define check_readback_data_uvec4(a, b, c) check_readback_data_uvec4_(__LINE__, a, b, c)
|
check_readback_data_uvec4_(__FILE__, __LINE__, a, b, (const struct uvec4 *)(c))
|
||||||
static inline void check_readback_data_uvec4_(unsigned int line, const struct resource_readback *rb,
|
#define check_readback_data_uvec4(a, b, c) check_readback_data_uvec4_(__FILE__, __LINE__, a, b, c)
|
||||||
const RECT *rect, const struct uvec4 *expected)
|
static inline void check_readback_data_uvec4_(const char *file, unsigned int line,
|
||||||
|
const struct resource_readback *rb, const RECT *rect, const struct uvec4 *expected)
|
||||||
{
|
{
|
||||||
RECT r = {0, 0, rb->width, rb->height};
|
RECT r = {0, 0, rb->width, rb->height};
|
||||||
unsigned int x = 0, y = 0;
|
unsigned int x = 0, y = 0;
|
||||||
@ -446,7 +447,8 @@ static inline void check_readback_data_uvec4_(unsigned int line, const struct re
|
|||||||
if (!all_match)
|
if (!all_match)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ok_(line)(all_match, "Got {0x%08x, 0x%08x, 0x%08x, 0x%08x}, expected {0x%08x, 0x%08x, 0x%08x, 0x%08x} at (%u, %u).\n",
|
ok_(file, line)(all_match,
|
||||||
|
"Got {0x%08x, 0x%08x, 0x%08x, 0x%08x}, expected {0x%08x, 0x%08x, 0x%08x, 0x%08x} at (%u, %u).\n",
|
||||||
got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
|
got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ HRESULT WINAPI D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC *root
|
|||||||
return vkd3d_serialize_root_signature(root_signature_desc, version, blob, error_blob);
|
return vkd3d_serialize_root_signature(root_signature_desc, version, blob, error_blob);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue)
|
static void wait_queue_idle_(const char *file, unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue)
|
||||||
{
|
{
|
||||||
VkQueue vk_queue;
|
VkQueue vk_queue;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user