From d6a48260992c29e05aff32b5d1793b3745a58bb7 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 4 Feb 2021 19:51:31 +0100 Subject: [PATCH] vkd3d: Remove heap_offset member from d3d12_resource. Signed-off-by: Philip Rebohle --- libs/vkd3d/command.c | 32 ++++++++++++++++---------------- libs/vkd3d/resource.c | 19 +++++++------------ libs/vkd3d/vkd3d_private.h | 3 +-- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index c7c86997..4bcd0f9c 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -4922,8 +4922,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(d3d12_command_ d3d12_command_list_end_current_render_pass(list, true); - buffer_copy.srcOffset = src_offset + src_resource->heap_offset; - buffer_copy.dstOffset = dst_offset + dst_resource->heap_offset; + buffer_copy.srcOffset = src_offset + src_resource->mem.offset; + buffer_copy.dstOffset = dst_offset + dst_resource->mem.offset; buffer_copy.size = byte_count; VK_CALL(vkCmdCopyBuffer(list->vk_command_buffer, @@ -5388,7 +5388,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyTextureRegion(d3d12_command vk_image_buffer_copy_from_d3d12(&buffer_image_copy, &dst->PlacedFootprint, src->SubresourceIndex, &src_resource->desc, dst_format, src_box, dst_x, dst_y, dst_z); - buffer_image_copy.bufferOffset += dst_resource->heap_offset; + buffer_image_copy.bufferOffset += dst_resource->mem.offset; vk_layout = d3d12_resource_pick_layout(src_resource, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); @@ -5430,7 +5430,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyTextureRegion(d3d12_command vk_buffer_image_copy_from_d3d12(&buffer_image_copy, &src->PlacedFootprint, dst->SubresourceIndex, &dst_resource->desc, src_format, src_box, dst_x, dst_y, dst_z); - buffer_image_copy.bufferOffset += src_resource->heap_offset; + buffer_image_copy.bufferOffset += src_resource->mem.offset; vk_layout = d3d12_resource_pick_layout(dst_resource, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); @@ -5516,8 +5516,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyResource(d3d12_command_list assert(d3d12_resource_is_buffer(src_resource)); assert(src_resource->desc.Width == dst_resource->desc.Width); - vk_buffer_copy.srcOffset = src_resource->heap_offset; - vk_buffer_copy.dstOffset = dst_resource->heap_offset; + vk_buffer_copy.srcOffset = src_resource->mem.offset; + vk_buffer_copy.dstOffset = dst_resource->mem.offset; vk_buffer_copy.size = dst_resource->desc.Width; VK_CALL(vkCmdCopyBuffer(list->vk_command_buffer, src_resource->res.vk_buffer, dst_resource->res.vk_buffer, 1, &vk_buffer_copy)); @@ -7510,7 +7510,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ResolveQueryData(d3d12_command_ if (type != D3D12_QUERY_TYPE_BINARY_OCCLUSION) { copy_region.srcOffset = stride * start_index; - copy_region.dstOffset = buffer->heap_offset + aligned_dst_buffer_offset; + copy_region.dstOffset = buffer->mem.offset + aligned_dst_buffer_offset; copy_region.size = stride * query_count; VK_CALL(vkCmdCopyBuffer(list->vk_command_buffer, @@ -7523,7 +7523,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ResolveQueryData(d3d12_command_ d3d12_command_list_resolve_binary_occlusion_queries(list, query_heap->vk_buffer, start_index, buffer->res.vk_buffer, - buffer->heap_offset, buffer->desc.Width, dst_index, + buffer->mem.offset, buffer->desc.Width, dst_index, query_count); } } @@ -7531,7 +7531,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ResolveQueryData(d3d12_command_ { d3d12_command_list_read_query_range(list, query_heap->vk_query_pool, start_index, query_count); VK_CALL(vkCmdCopyQueryPoolResults(list->vk_command_buffer, query_heap->vk_query_pool, - start_index, query_count, buffer->res.vk_buffer, buffer->heap_offset + aligned_dst_buffer_offset, + start_index, query_count, buffer->res.vk_buffer, buffer->mem.offset + aligned_dst_buffer_offset, stride, VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT)); } } @@ -7606,7 +7606,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_SetPredication(d3d12_command_li { FIXME_ONCE("64-bit predicates not supported.\n"); - copy_region.srcOffset = resource->heap_offset + aligned_buffer_offset; + copy_region.srcOffset = resource->mem.offset + aligned_buffer_offset; copy_region.dstOffset = scratch.offset; copy_region.size = sizeof(uint32_t); @@ -7832,12 +7832,12 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l else if (count_buffer) { scratch.buffer = count_impl->res.vk_buffer; - scratch.offset = count_impl->heap_offset + count_buffer_offset; + scratch.offset = count_impl->mem.offset + count_buffer_offset; } else { scratch.buffer = arg_impl->res.vk_buffer; - scratch.offset = arg_impl->heap_offset + arg_buffer_offset; + scratch.offset = arg_impl->mem.offset + arg_buffer_offset; } switch (arg_desc->Type) @@ -7852,13 +7852,13 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l if (count_buffer || list->predicate_va) { VK_CALL(vkCmdDrawIndirectCountKHR(list->vk_command_buffer, arg_impl->res.vk_buffer, - arg_buffer_offset + arg_impl->heap_offset, scratch.buffer, scratch.offset, + arg_buffer_offset + arg_impl->mem.offset, scratch.buffer, scratch.offset, max_command_count, signature_desc->ByteStride)); } else { VK_CALL(vkCmdDrawIndirect(list->vk_command_buffer, arg_impl->res.vk_buffer, - arg_buffer_offset + arg_impl->heap_offset, max_command_count, signature_desc->ByteStride)); + arg_buffer_offset + arg_impl->mem.offset, max_command_count, signature_desc->ByteStride)); } break; @@ -7880,13 +7880,13 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l if (count_buffer || list->predicate_va) { VK_CALL(vkCmdDrawIndexedIndirectCountKHR(list->vk_command_buffer, arg_impl->res.vk_buffer, - arg_buffer_offset + arg_impl->heap_offset, scratch.buffer, scratch.offset, + arg_buffer_offset + arg_impl->mem.offset, scratch.buffer, scratch.offset, max_command_count, signature_desc->ByteStride)); } else { VK_CALL(vkCmdDrawIndexedIndirect(list->vk_command_buffer, arg_impl->res.vk_buffer, - arg_buffer_offset + arg_impl->heap_offset, max_command_count, signature_desc->ByteStride)); + arg_buffer_offset + arg_impl->mem.offset, max_command_count, signature_desc->ByteStride)); } break; diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index c5fe6591..7e3d953e 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -1310,7 +1310,7 @@ static bool d3d12_resource_get_mapped_memory_range(struct d3d12_resource *resour if (resource->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) { - vk_mapped_range->offset = resource->heap_offset; + vk_mapped_range->offset = resource->mem.offset; vk_mapped_range->size = resource->desc.Width; } else @@ -2322,8 +2322,6 @@ HRESULT d3d12_resource_create_committed(struct d3d12_device *device, const D3D12 if (FAILED(hr = vkd3d_allocate_resource_memory(device, &device->memory_allocator, &allocate_info, &object->mem))) goto fail; - - object->heap_offset = object->mem.offset; } else { @@ -2341,7 +2339,6 @@ HRESULT d3d12_resource_create_committed(struct d3d12_device *device, const D3D12 object->res.vk_buffer = object->mem.resource.vk_buffer; object->res.va = object->mem.resource.va; - object->heap_offset = object->mem.offset; } *resource = object; @@ -2362,12 +2359,12 @@ static HRESULT d3d12_resource_bind_image_memory(struct d3d12_resource *resource, VK_CALL(vkGetImageMemoryRequirements(device->vk_device, resource->res.vk_image, &memory_requirements)); /* TODO implement sparse fallback instead to enforce alignment */ - if (resource->heap_offset & (memory_requirements.alignment - 1)) + if (resource->mem.offset & (memory_requirements.alignment - 1)) { struct vkd3d_allocate_heap_memory_info allocate_info; FIXME("Cannot allocate image %p with alignment %#"PRIx64" at heap offset %#"PRIx64", allocating device memory.\n", - resource->res.vk_image, memory_requirements.alignment, resource->heap_offset); + resource->res.vk_image, memory_requirements.alignment, resource->mem.offset); memset(&allocate_info, 0, sizeof(allocate_info)); allocate_info.heap_desc.Properties = resource->heap->desc.Properties; @@ -2380,11 +2377,10 @@ static HRESULT d3d12_resource_bind_image_memory(struct d3d12_resource *resource, return hr; resource->flags |= VKD3D_RESOURCE_ALLOCATION; - resource->heap_offset = resource->mem.offset; } if ((vr = VK_CALL(vkBindImageMemory(device->vk_device, resource->res.vk_image, - resource->mem.vk_memory, resource->heap_offset)) < 0)) + resource->mem.vk_memory, resource->mem.offset)) < 0)) { ERR("Failed to bind image memory, vr %d.\n", vr); return hresult_from_vk_result(vr); @@ -2438,7 +2434,6 @@ HRESULT d3d12_resource_create_placed(struct d3d12_device *device, const D3D12_RE /* The exact allocation size is not important here since the * resource does not own the allocation, so just set it to 0. */ vkd3d_memory_allocation_slice(&object->mem, &heap->allocation, heap_offset, 0); - object->heap_offset = object->mem.offset; if (d3d12_resource_is_texture(object)) { @@ -2939,7 +2934,7 @@ static bool vkd3d_create_buffer_view_for_resource(struct d3d12_device *device, key.view_type = VKD3D_VIEW_TYPE_BUFFER; key.u.buffer.buffer = resource->res.vk_buffer; key.u.buffer.format = format; - key.u.buffer.offset = resource->heap_offset + offset * element_size; + key.u.buffer.offset = resource->mem.offset + offset * element_size; key.u.buffer.size = size * element_size; return !!(*view = vkd3d_view_map_create_view(&resource->view_map, device, &key)); @@ -3279,7 +3274,7 @@ static void vkd3d_buffer_view_get_bound_range_ssbo(struct d3d12_desc *descriptor /* heap_offset is guaranteed to have 64KiB alignment */ vk_buffer->buffer = resource->res.vk_buffer; - vk_buffer->offset = resource->heap_offset + aligned_begin; + vk_buffer->offset = resource->mem.offset + aligned_begin; vk_buffer->range = aligned_end - aligned_begin; bound_range->byte_offset = offset - aligned_begin; @@ -3841,7 +3836,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_ if (device->bindless_state.flags & VKD3D_RAW_VA_AUX_BUFFER) { VkDeviceAddress address = vkd3d_get_buffer_device_address(device, counter_resource->res.vk_buffer); - uav_counter_address = address + counter_resource->heap_offset + desc->Buffer.CounterOffsetInBytes; + uav_counter_address = address + counter_resource->mem.offset + desc->Buffer.CounterOffsetInBytes; } else { diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 89b4a0e0..e87b4e20 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -686,7 +686,6 @@ struct d3d12_resource struct vkd3d_unique_resource res; struct d3d12_heap *heap; - uint64_t heap_offset; uint32_t flags; @@ -2578,7 +2577,7 @@ VkDeviceAddress vkd3d_get_buffer_device_address(struct d3d12_device *device, VkB static inline VkDeviceAddress d3d12_resource_get_va(const struct d3d12_resource *resource, VkDeviceSize offset) { - return vkd3d_get_buffer_device_address(resource->device, resource->res.vk_buffer) + resource->heap_offset + offset; + return vkd3d_get_buffer_device_address(resource->device, resource->res.vk_buffer) + resource->mem.offset + offset; } static inline unsigned int vkd3d_compute_workgroup_count(unsigned int thread_count, unsigned int workgroup_size)