From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d-shader/spirv.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 6fd198b4883d..b39a34571d84 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -2204,7 +2204,7 @@ struct vkd3d_shader_register_info unsigned int structure_stride; };
-static void vkd3d_dxbc_compiler_get_register_info(struct vkd3d_dxbc_compiler *compiler, +static bool vkd3d_dxbc_compiler_get_register_info(struct vkd3d_dxbc_compiler *compiler, const struct vkd3d_shader_register *reg, struct vkd3d_shader_register_info *register_info) { struct vkd3d_spirv_builder *builder = &compiler->spirv_builder; @@ -2218,12 +2218,17 @@ static void vkd3d_dxbc_compiler_get_register_info(struct vkd3d_dxbc_compiler *co assert(reg->idx[0].offset < compiler->temp_count); register_info->id = compiler->temp_id + reg->idx[0].offset; register_info->storage_class = SpvStorageClassFunction; - return; + return true; }
vkd3d_symbol_make_register(®_symbol, reg); - entry = rb_get(&compiler->symbol_table, ®_symbol); - assert(entry); + if (!(entry = rb_get(&compiler->symbol_table, ®_symbol))) + { + FIXME("Unrecognized register %#x.\n", reg->type); + memset(register_info, 0, sizeof(*register_info)); + return false; + } + symbol = RB_ENTRY_VALUE(entry, struct vkd3d_symbol, entry); register_info->id = symbol->id; register_info->storage_class = symbol->info.reg.storage_class; @@ -2258,6 +2263,8 @@ static void vkd3d_dxbc_compiler_get_register_info(struct vkd3d_dxbc_compiler *co { FIXME("Relative addressing not implemented.\n"); } + + return true; }
static uint32_t vkd3d_dxbc_compiler_get_register_id(struct vkd3d_dxbc_compiler *compiler, @@ -2280,8 +2287,9 @@ static uint32_t vkd3d_dxbc_compiler_get_register_id(struct vkd3d_dxbc_compiler * case VKD3DSPR_LOCALTHREADID: case VKD3DSPR_LOCALTHREADINDEX: case VKD3DSPR_THREADGROUPID: - vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®ister_info); - return register_info.id; + if (vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®ister_info)) + return register_info.id; + return vkd3d_dxbc_compiler_emit_undef(compiler, &builder->global_stream, reg); case VKD3DSPR_IMMCONST: ERR("Unexpected register type %#x.\n", reg->type); return vkd3d_dxbc_compiler_emit_undef(compiler, &builder->global_stream, reg); @@ -2361,7 +2369,12 @@ static uint32_t vkd3d_dxbc_compiler_emit_load_scalar(struct vkd3d_dxbc_compiler component_idx = vkd3d_write_mask_get_component_idx(write_mask); component_idx = vkd3d_swizzle_get_component(swizzle, component_idx);
- vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®_info); + if (!vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®_info)) + { + type_id = vkd3d_spirv_get_type_id(builder, + vkd3d_component_type_from_data_type(reg->data_type), 1); + return vkd3d_spirv_build_op_undef(builder, &builder->global_stream, type_id); + }
type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_FLOAT, 1); ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, reg_info.storage_class, type_id); @@ -2489,7 +2502,8 @@ static void vkd3d_dxbc_compiler_emit_store_scalar(struct vkd3d_dxbc_compiler *co
assert(reg->type != VKD3DSPR_IMMCONST);
- vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®_info); + if (!vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®_info)) + return;
type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_FLOAT, 1); ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, reg_info.storage_class, type_id); @@ -4827,7 +4841,9 @@ static void vkd3d_dxbc_compiler_emit_ld_tgsm(struct vkd3d_dxbc_compiler *compile unsigned int i, j;
resource = &src[instruction->src_count - 1]; - vkd3d_dxbc_compiler_get_register_info(compiler, &resource->reg, ®_info); + if (!vkd3d_dxbc_compiler_get_register_info(compiler, &resource->reg, ®_info)) + return; + type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_UINT, 1); ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, reg_info.storage_class, type_id); base_coordinate_id = vkd3d_dxbc_compiler_emit_raw_structured_addressing(compiler, @@ -4950,7 +4966,9 @@ static void vkd3d_dxbc_compiler_emit_store_tgsm(struct vkd3d_dxbc_compiler *comp struct vkd3d_shader_register_info reg_info; unsigned int component_count;
- vkd3d_dxbc_compiler_get_register_info(compiler, &dst->reg, ®_info); + if (!vkd3d_dxbc_compiler_get_register_info(compiler, &dst->reg, ®_info)) + return; + type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_UINT, 1); ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, reg_info.storage_class, type_id); assert((instruction->handler_idx == VKD3DSIH_STORE_STRUCTURED) != !reg_info.structure_stride); @@ -5157,7 +5175,8 @@ static void vkd3d_dxbc_compiler_emit_atomic_instruction(struct vkd3d_dxbc_compil { scope = SpvScopeWorkgroup; coordinate_mask = 1u; - vkd3d_dxbc_compiler_get_register_info(compiler, &resource->reg, ®_info); + if (!vkd3d_dxbc_compiler_get_register_info(compiler, &resource->reg, ®_info)) + return; structure_stride = reg_info.structure_stride; raw = !structure_stride; }
From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d-shader/spirv.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index b39a34571d84..79127c527201 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -2164,17 +2164,6 @@ static uint32_t vkd3d_dxbc_compiler_emit_variable(struct vkd3d_dxbc_compiler *co return vkd3d_spirv_build_op_variable(builder, stream, ptr_type_id, storage_class, 0); }
-static uint32_t vkd3d_dxbc_compiler_emit_undef(struct vkd3d_dxbc_compiler *compiler, - struct vkd3d_spirv_stream *stream, const struct vkd3d_shader_register *reg) -{ - struct vkd3d_spirv_builder *builder = &compiler->spirv_builder; - uint32_t type_id, ptr_type_id; - - type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_FLOAT, VKD3D_VEC4_SIZE); - ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, SpvStorageClassPrivate, type_id); - return vkd3d_spirv_build_op_undef(builder, stream, ptr_type_id); -} - static uint32_t vkd3d_dxbc_compiler_emit_load_src(struct vkd3d_dxbc_compiler *compiler, const struct vkd3d_shader_src_param *src, DWORD write_mask);
@@ -2289,13 +2278,16 @@ static uint32_t vkd3d_dxbc_compiler_get_register_id(struct vkd3d_dxbc_compiler * case VKD3DSPR_THREADGROUPID: if (vkd3d_dxbc_compiler_get_register_info(compiler, reg, ®ister_info)) return register_info.id; - return vkd3d_dxbc_compiler_emit_undef(compiler, &builder->global_stream, reg); + return vkd3d_dxbc_compiler_emit_variable(compiler, &builder->global_stream, + SpvStorageClassPrivate, VKD3D_TYPE_FLOAT, VKD3D_VEC4_SIZE); case VKD3DSPR_IMMCONST: ERR("Unexpected register type %#x.\n", reg->type); - return vkd3d_dxbc_compiler_emit_undef(compiler, &builder->global_stream, reg); + return vkd3d_dxbc_compiler_emit_variable(compiler, &builder->global_stream, + SpvStorageClassPrivate, VKD3D_TYPE_FLOAT, VKD3D_VEC4_SIZE); default: FIXME("Unhandled register type %#x.\n", reg->type); - return vkd3d_dxbc_compiler_emit_undef(compiler, &builder->global_stream, reg); + return vkd3d_dxbc_compiler_emit_variable(compiler, &builder->global_stream, + SpvStorageClassPrivate, VKD3D_TYPE_FLOAT, VKD3D_VEC4_SIZE); } }
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d/resource.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 780b358f8fa6..72848a4457b7 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -963,6 +963,12 @@ void d3d12_desc_create_cbv(struct d3d12_desc *descriptor, return; }
+ if (!desc->BufferLocation) + { + FIXME("NULL CBV not implemented.\n"); + return; + } + resource = vkd3d_gpu_va_allocator_dereference(&device->gpu_va_allocator, desc->BufferLocation); buffer_info = &descriptor->u.vk_cbv_info; buffer_info->buffer = resource->u.vk_buffer;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- tests/d3d12.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)
diff --git a/tests/d3d12.c b/tests/d3d12.c index 963ecff3a292..c9e6336e110e 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -11558,6 +11558,75 @@ static void test_descriptors_visibility(void) destroy_test_context(&context); }
+static void test_null_descriptors(void) +{ + D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc; + D3D12_CONSTANT_BUFFER_VIEW_DESC cbv_desc; + D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc; + D3D12_DESCRIPTOR_HEAP_DESC heap_desc; + struct test_context_desc desc; + struct test_context context; + ID3D12DescriptorHeap *heap; + ID3D12Device *device; + HRESULT hr; + + memset(&desc, 0, sizeof(desc)); + desc.no_root_signature = true; + if (!init_test_context(&context, &desc)) + return; + device = context.device; + + heap_desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + heap_desc.NumDescriptors = 16; + heap_desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + heap_desc.NodeMask = 0; + hr = ID3D12Device_CreateDescriptorHeap(device, &heap_desc, + &IID_ID3D12DescriptorHeap, (void **)&heap); + ok(SUCCEEDED(hr), "Failed to create descriptor heap, hr %#x.\n", hr); + + cbv_desc.BufferLocation = 0; + cbv_desc.SizeInBytes = 0; + ID3D12Device_CreateConstantBufferView(device, &cbv_desc, + get_cpu_descriptor_handle(&context, heap, 0)); + + memset(&srv_desc, 0, sizeof(srv_desc)); + srv_desc.Format = DXGI_FORMAT_R32_TYPELESS; + srv_desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + srv_desc.Buffer.FirstElement = 0; + srv_desc.Buffer.NumElements = 1; + srv_desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + ID3D12Device_CreateShaderResourceView(device, NULL, &srv_desc, + get_cpu_descriptor_handle(&context, heap, 1)); + + memset(&srv_desc, 0, sizeof(srv_desc)); + srv_desc.Format = DXGI_FORMAT_R32_FLOAT; + srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + srv_desc.Texture2D.MipLevels = 1; + ID3D12Device_CreateShaderResourceView(device, NULL, &srv_desc, + get_cpu_descriptor_handle(&context, heap, 2)); + + memset(&uav_desc, 0, sizeof(uav_desc)); + uav_desc.Format = DXGI_FORMAT_R32_UINT; + uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + uav_desc.Buffer.FirstElement = 0; + uav_desc.Buffer.NumElements = 1; + ID3D12Device_CreateUnorderedAccessView(device, NULL, NULL, &uav_desc, + get_cpu_descriptor_handle(&context, heap, 3)); + + memset(&uav_desc, 0, sizeof(uav_desc)); + uav_desc.Format = DXGI_FORMAT_R32_UINT; + uav_desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + uav_desc.Texture2D.MipSlice = 0; + uav_desc.Texture2D.PlaneSlice = 0; + ID3D12Device_CreateUnorderedAccessView(device, NULL, NULL, &uav_desc, + get_cpu_descriptor_handle(&context, heap, 3)); + + ID3D12DescriptorHeap_Release(heap); + destroy_test_context(&context); +} + #define check_copyable_footprints(a, b, c, d, e, f, g) \ check_copyable_footprints_(__LINE__, a, b, c, d, e, f, g) static void check_copyable_footprints_(unsigned int line, const D3D12_RESOURCE_DESC *desc, @@ -16952,6 +17021,7 @@ START_TEST(d3d12) run_test(test_update_compute_descriptor_tables); run_test(test_copy_descriptors); run_test(test_descriptors_visibility); + run_test(test_null_descriptors); run_test(test_get_copyable_footprints); run_test(test_depth_stencil_sampling); run_test(test_depth_load);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d/vkd3d_private.h | 2 -- 1 file changed, 2 deletions(-)
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index f9c74491de30..9e0d6ae0eba4 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -730,8 +730,6 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo *crea const VkAllocationCallbacks *allocator, VkInstance *instance); VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *layer_name, uint32_t *property_count, VkExtensionProperties *properties); -VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *property_count, - VkLayerProperties *properties); VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *allocator); VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *allocator);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d/utils.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c index 05602242267e..f94dce50daa3 100644 --- a/libs/vkd3d/utils.c +++ b/libs/vkd3d/utils.c @@ -36,6 +36,8 @@ static const struct vkd3d_format vkd3d_formats[] = {DXGI_FORMAT_R8G8B8A8_TYPELESS, VK_FORMAT_R8G8B8A8_UNORM, 4, 1, 1, 1, COLOR}, {DXGI_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, 4, 1, 1, 1, COLOR}, {DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, VK_FORMAT_R8G8B8A8_SRGB, 4, 1, 1, 1, COLOR}, + {DXGI_FORMAT_R16G16_FLOAT, VK_FORMAT_R16G16_SFLOAT, 4, 1, 1, 1, COLOR}, + {DXGI_FORMAT_R16G16_UNORM, VK_FORMAT_R16G16_UNORM, 4, 1, 1, 1, COLOR}, {DXGI_FORMAT_R32_TYPELESS, VK_FORMAT_R32_UINT, 4, 1, 1, 1, COLOR}, {DXGI_FORMAT_D32_FLOAT, VK_FORMAT_D32_SFLOAT, 4, 1, 1, 1, DEPTH}, {DXGI_FORMAT_R32_FLOAT, VK_FORMAT_R32_SFLOAT, 4, 1, 1, 1, COLOR}, @@ -51,14 +53,19 @@ static const struct vkd3d_format vkd3d_formats[] = {DXGI_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_UNORM, 4, 1, 1, 1, COLOR}, {DXGI_FORMAT_B8G8R8A8_TYPELESS, VK_FORMAT_B8G8R8A8_UNORM, 4, 1, 1, 1, COLOR}, {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, VK_FORMAT_B8G8R8A8_SRGB, 4, 1, 1, 1, COLOR}, + {DXGI_FORMAT_BC1_TYPELESS, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, 1, 4, 4, 8, COLOR}, {DXGI_FORMAT_BC1_UNORM, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, 1, 4, 4, 8, COLOR}, {DXGI_FORMAT_BC1_UNORM_SRGB, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, 1, 4, 4, 8, COLOR}, + {DXGI_FORMAT_BC2_TYPELESS, VK_FORMAT_BC2_UNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC2_UNORM, VK_FORMAT_BC2_UNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC2_UNORM_SRGB, VK_FORMAT_BC2_SRGB_BLOCK, 1, 4, 4, 16, COLOR}, + {DXGI_FORMAT_BC3_TYPELESS, VK_FORMAT_BC3_UNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC3_UNORM, VK_FORMAT_BC3_UNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC3_UNORM_SRGB, VK_FORMAT_BC3_SRGB_BLOCK, 1, 4, 4, 16, COLOR}, + {DXGI_FORMAT_BC4_TYPELESS, VK_FORMAT_BC4_UNORM_BLOCK, 1, 4, 4, 8, COLOR}, {DXGI_FORMAT_BC4_UNORM, VK_FORMAT_BC4_UNORM_BLOCK, 1, 4, 4, 8, COLOR}, {DXGI_FORMAT_BC4_SNORM, VK_FORMAT_BC4_SNORM_BLOCK, 1, 4, 4, 8, COLOR}, + {DXGI_FORMAT_BC5_TYPELESS, VK_FORMAT_BC5_UNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC5_UNORM, VK_FORMAT_BC5_UNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC5_SNORM, VK_FORMAT_BC5_SNORM_BLOCK, 1, 4, 4, 16, COLOR}, {DXGI_FORMAT_BC6H_UF16, VK_FORMAT_BC6H_UFLOAT_BLOCK, 1, 4, 4, 16, COLOR},
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
d3d12_command_allocator_free_command_buffer() is not a very accurate name.
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d/command.c | 12 ++++++------ tests/d3d12.c | 13 ++++++++++++- 2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index a603c2b5d72c..cda3c1ffb8bf 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -1426,6 +1426,12 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_Close(ID3D12GraphicsCommandL return hresult_from_vk_result(vr); }
+ if (list->allocator) + { + d3d12_command_allocator_free_command_buffer(list->allocator, list); + list->allocator = NULL; + } + list->is_recording = false;
if (!list->is_valid) @@ -1459,12 +1465,6 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_Reset(ID3D12GraphicsCommandL return E_FAIL; }
- if (list->allocator) - { - d3d12_command_allocator_free_command_buffer(list->allocator, list); - list->allocator = NULL; - } - if (SUCCEEDED(hr = d3d12_command_allocator_allocate_command_buffer(allocator_impl, list))) { list->allocator = allocator_impl; diff --git a/tests/d3d12.c b/tests/d3d12.c index c9e6336e110e..dfc9257bff61 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -2928,12 +2928,23 @@ static void test_reset_command_allocator(void)
hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT, command_allocator2, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list2); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); + ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
hr = ID3D12GraphicsCommandList_Close(command_list2); ok(SUCCEEDED(hr), "Failed to close command list, hr %#x.\n", hr); hr = ID3D12GraphicsCommandList_Reset(command_list2, command_allocator, NULL); ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + ID3D12GraphicsCommandList_Release(command_list2); + + /* A command allocator can be re-used after closing the command list. */ + hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT, + command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list2); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + hr = ID3D12GraphicsCommandList_Close(command_list); + ok(SUCCEEDED(hr), "Failed to close command list, hr %#x.\n", hr); + hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT, + command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list2); + ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
ID3D12CommandAllocator_Release(command_allocator); ID3D12CommandAllocator_Release(command_allocator2);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com