Signed-off-by: Conor McCarthy cmccarthy@codeweavers.com --- tests/d3d12.c | 26 +++++++++----------------- tests/d3d12_test_utils.h | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c index f723dbaa..eddd6cbf 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -7372,11 +7372,10 @@ static void test_bundle_state_inheritance(void) { static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f}; ID3D12GraphicsCommandList *command_list, *bundle; - ID3D12CommandAllocator *bundle_allocator; + struct bundle_context bundle_context; struct test_context context; struct resource_readback rb; ID3D12CommandQueue *queue; - ID3D12Device *device; unsigned int x, y; HRESULT hr;
@@ -7388,16 +7387,10 @@ static void test_bundle_state_inheritance(void)
if (!init_test_context(&context, NULL)) return; - device = context.device; command_list = context.list; queue = context.queue; - - hr = ID3D12Device_CreateCommandAllocator(device, D3D12_COMMAND_LIST_TYPE_BUNDLE, - &IID_ID3D12CommandAllocator, (void **)&bundle_allocator); - ok(SUCCEEDED(hr), "Failed to create command allocator, hr %#x.\n", hr); - hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_BUNDLE, - bundle_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&bundle); - ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr); + init_bundle_context(context.device, &bundle_context); + bundle = bundle_context.list;
/* A bundle does not inherit the current pipeline state. */ ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL); @@ -7431,7 +7424,7 @@ static void test_bundle_state_inheritance(void) release_resource_readback(&rb);
reset_command_list(command_list, context.allocator); - reset_command_list(bundle, bundle_allocator); + reset_command_list(bundle, bundle_context.allocator);
/* A bundle sets to null the pipeline state in the executing command list. */ ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL); @@ -7466,7 +7459,7 @@ static void test_bundle_state_inheritance(void) release_resource_readback(&rb);
reset_command_list(command_list, context.allocator); - reset_command_list(bundle, bundle_allocator); + reset_command_list(bundle, bundle_context.allocator);
/* A bundle does not inherit the current primitive topology. */ transition_resource_state(command_list, context.render_target, @@ -7503,7 +7496,7 @@ static void test_bundle_state_inheritance(void) release_resource_readback(&rb);
reset_command_list(command_list, context.allocator); - reset_command_list(bundle, bundle_allocator); + reset_command_list(bundle, bundle_context.allocator);
/* A bundle sets to undefined the primitive topology in the executing command list. */ transition_resource_state(command_list, context.render_target, @@ -7540,7 +7533,7 @@ static void test_bundle_state_inheritance(void) release_resource_readback(&rb);
reset_command_list(command_list, context.allocator); - reset_command_list(bundle, bundle_allocator); + reset_command_list(bundle, bundle_context.allocator);
/* A bundle inherit all other states. */ transition_resource_state(command_list, context.render_target, @@ -7566,7 +7559,7 @@ static void test_bundle_state_inheritance(void) check_sub_resource_uint(context.render_target, 0, queue, command_list, 0xff00ff00, 0);
reset_command_list(command_list, context.allocator); - reset_command_list(bundle, bundle_allocator); + reset_command_list(bundle, bundle_context.allocator);
/* All state that is set in a bundle affects a command list. */ transition_resource_state(command_list, context.render_target, @@ -7591,8 +7584,7 @@ static void test_bundle_state_inheritance(void) todo check_sub_resource_uint(context.render_target, 0, queue, command_list, 0xff00ff00, 0);
- ID3D12CommandAllocator_Release(bundle_allocator); - ID3D12GraphicsCommandList_Release(bundle); + destroy_bundle_context(&bundle_context); destroy_test_context(&context); }
diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h index 0374d8d1..5cf2c130 100644 --- a/tests/d3d12_test_utils.h +++ b/tests/d3d12_test_utils.h @@ -1008,6 +1008,29 @@ static inline void destroy_test_context_(unsigned int line, struct test_context ok_(line)(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount); }
+struct bundle_context +{ + ID3D12CommandAllocator *allocator; + ID3D12GraphicsCommandList *list; +}; + +#define init_bundle_context(device, context) init_bundle_context_(__LINE__, device, context) +static inline void init_bundle_context_(unsigned int line, ID3D12Device *device, struct bundle_context *bundle) +{ + HRESULT hr = ID3D12Device_CreateCommandAllocator(device, D3D12_COMMAND_LIST_TYPE_BUNDLE, + &IID_ID3D12CommandAllocator, (void **)&bundle->allocator); + ok_(line)(SUCCEEDED(hr), "Failed to create bundle command allocator, hr %#x.\n", hr); + hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_BUNDLE, + bundle->allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&bundle->list); + ok(SUCCEEDED(hr), "Failed to create bundle command list, hr %#x.\n", hr); +} + +static inline void destroy_bundle_context(struct bundle_context *bundle) +{ + ID3D12CommandAllocator_Release(bundle->allocator); + ID3D12GraphicsCommandList_Release(bundle->list); +} + static inline D3D12_CPU_DESCRIPTOR_HANDLE get_cpu_handle(ID3D12Device *device, ID3D12DescriptorHeap *heap, D3D12_DESCRIPTOR_HEAP_TYPE heap_type, unsigned int offset) {