vkd3d: Remove heap_offset member from d3d12_resource.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2021-02-04 19:51:31 +01:00 committed by Hans-Kristian Arntzen
parent 56ff4622b6
commit d6a4826099
3 changed files with 24 additions and 30 deletions

View File

@ -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;

View File

@ -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
{

View File

@ -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)