vkd3d: Remove manual tracking of host barriers.
Just emit host barrier on submit unconditionally. Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
0f25b827e0
commit
3e15a3f06a
|
@ -103,12 +103,14 @@ HRESULT vkd3d_queue_create(struct d3d12_device *device,
|
|||
begin_info.pInheritanceInfo = NULL;
|
||||
VK_CALL(vkBeginCommandBuffer(object->barrier_command_buffer, &begin_info));
|
||||
|
||||
/* To avoid unnecessary tracking, just emit a host barrier on every submit. */
|
||||
memory_barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
memory_barrier.pNext = NULL;
|
||||
memory_barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
|
||||
memory_barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
|
||||
memory_barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_HOST_READ_BIT;
|
||||
VK_CALL(vkCmdPipelineBarrier(object->barrier_command_buffer,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_HOST_BIT, 0,
|
||||
1, &memory_barrier, 0, NULL, 0, NULL));
|
||||
VK_CALL(vkEndCommandBuffer(object->barrier_command_buffer));
|
||||
|
||||
|
@ -2795,7 +2797,6 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_Close(d3d12_command_list_ifa
|
|||
{
|
||||
struct d3d12_command_list *list = impl_from_ID3D12GraphicsCommandList(iface);
|
||||
const struct vkd3d_vk_device_procs *vk_procs;
|
||||
VkMemoryBarrier barrier;
|
||||
VkResult vr;
|
||||
|
||||
TRACE("iface %p.\n", iface);
|
||||
|
@ -2812,20 +2813,6 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_list_Close(d3d12_command_list_ifa
|
|||
if (list->is_predicated)
|
||||
VK_CALL(vkCmdEndConditionalRenderingEXT(list->vk_command_buffer));
|
||||
|
||||
if (list->need_host_barrier)
|
||||
{
|
||||
/* Need to emit host barrier here. There is no obvious RESOURCE_STATE we can map this to.
|
||||
* Rely on simple tracking to do this. */
|
||||
barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
barrier.pNext = NULL;
|
||||
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
barrier.dstAccessMask = VK_ACCESS_HOST_READ_BIT;
|
||||
|
||||
VK_CALL(vkCmdPipelineBarrier(list->vk_command_buffer,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0,
|
||||
1, &barrier, 0, NULL, 0, NULL));
|
||||
}
|
||||
|
||||
vkd3d_shader_debug_ring_end_command_buffer(list);
|
||||
|
||||
if ((vr = VK_CALL(vkEndCommandBuffer(list->vk_command_buffer))) < 0)
|
||||
|
@ -2870,7 +2857,6 @@ static void d3d12_command_list_reset_state(struct d3d12_command_list *list,
|
|||
|
||||
list->is_predicated = false;
|
||||
list->render_pass_suspended = false;
|
||||
list->need_host_barrier = false;
|
||||
#ifdef VKD3D_ENABLE_RENDERDOC
|
||||
list->debug_capture = vkd3d_renderdoc_active() && vkd3d_renderdoc_should_capture_shader_hash(0);
|
||||
#else
|
||||
|
@ -3808,10 +3794,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(d3d12_command_
|
|||
|
||||
VK_CALL(vkCmdCopyBuffer(list->vk_command_buffer,
|
||||
src_resource->vk_buffer, dst_resource->vk_buffer, 1, &buffer_copy));
|
||||
|
||||
/* There is no explicit host barrier for readbacks. */
|
||||
if (d3d12_heap_needs_host_barrier_for_write(dst_resource->heap))
|
||||
list->need_host_barrier = true;
|
||||
}
|
||||
|
||||
static void vk_image_subresource_layers_from_d3d12(VkImageSubresourceLayers *subresource,
|
||||
|
@ -4376,10 +4358,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyTextureRegion(d3d12_command
|
|||
{
|
||||
FIXME("Copy type %#x -> %#x not implemented.\n", src->Type, dst->Type);
|
||||
}
|
||||
|
||||
/* There is no explicit host barrier for readbacks. */
|
||||
if (d3d12_heap_needs_host_barrier_for_write(dst_resource->heap))
|
||||
list->need_host_barrier = true;
|
||||
}
|
||||
|
||||
static void STDMETHODCALLTYPE d3d12_command_list_CopyResource(d3d12_command_list_iface *iface,
|
||||
|
@ -4437,10 +4415,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyResource(d3d12_command_list
|
|||
src_resource, src_resource->format, &vk_image_copy, true);
|
||||
}
|
||||
}
|
||||
|
||||
/* There is no explicit host barrier for readbacks. */
|
||||
if (d3d12_heap_needs_host_barrier_for_write(dst_resource->heap))
|
||||
list->need_host_barrier = true;
|
||||
}
|
||||
|
||||
static unsigned int vkd3d_get_tile_index_from_region(const struct d3d12_sparse_info *sparse,
|
||||
|
@ -6368,10 +6342,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_ResolveQueryData(d3d12_command_
|
|||
VK_CALL(vkCmdCopyQueryPoolResults(list->vk_command_buffer,
|
||||
query_heap->vk_query_pool, first, count, buffer->vk_buffer,
|
||||
buffer->heap_offset + offset, stride, VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT));
|
||||
|
||||
/* There is no explicit host barrier for readbacks. */
|
||||
if (d3d12_heap_needs_host_barrier_for_write(buffer->heap))
|
||||
list->need_host_barrier = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -312,10 +312,6 @@ void vkd3d_shader_debug_ring_end_command_buffer(struct d3d12_command_list *list)
|
|||
list->device->debug_ring.host_buffer,
|
||||
1, &buffer_copy));
|
||||
|
||||
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
barrier.dstAccessMask = VK_ACCESS_HOST_READ_BIT;
|
||||
VK_CALL(vkCmdPipelineBarrier(list->vk_command_buffer,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0,
|
||||
1, &barrier, 0, NULL, 0, NULL));
|
||||
/* Host barrier is taken care of automatically. */
|
||||
}
|
||||
}
|
||||
|
|
|
@ -624,34 +624,6 @@ static HRESULT d3d12_resource_create(struct d3d12_device *device,
|
|||
const D3D12_CLEAR_VALUE *optimized_clear_value, bool placed,
|
||||
struct d3d12_resource **resource);
|
||||
|
||||
bool d3d12_heap_needs_host_barrier_for_write(struct d3d12_heap *heap)
|
||||
{
|
||||
if (!heap)
|
||||
{
|
||||
/* This is a reserved resource and we have no guarantee
|
||||
* it's not mapped to something with readback. */
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (heap->desc.Properties.Type)
|
||||
{
|
||||
case D3D12_HEAP_TYPE_DEFAULT:
|
||||
case D3D12_HEAP_TYPE_UPLOAD:
|
||||
return false;
|
||||
|
||||
case D3D12_HEAP_TYPE_READBACK:
|
||||
return true;
|
||||
|
||||
case D3D12_HEAP_TYPE_CUSTOM:
|
||||
return heap->desc.Properties.CPUPageProperty != D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static HRESULT d3d12_heap_init_omnipotent_buffer(struct d3d12_heap *heap, struct d3d12_device *device,
|
||||
const D3D12_HEAP_DESC *desc)
|
||||
{
|
||||
|
|
|
@ -1266,7 +1266,6 @@ struct d3d12_command_list
|
|||
|
||||
bool is_recording;
|
||||
bool is_valid;
|
||||
bool need_host_barrier;
|
||||
bool debug_capture;
|
||||
bool has_replaced_shaders;
|
||||
bool has_valid_index_buffer;
|
||||
|
|
Loading…
Reference in New Issue