vkd3d: Remove obsolete COLOR -> COMPUTE workaround for Deathloop.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
2953ef8688
commit
e7f79c4962
|
@ -77,7 +77,6 @@ enum vkd3d_config_flags
|
|||
VKD3D_CONFIG_FLAG_FORCE_HOST_CACHED = 0x00002000,
|
||||
VKD3D_CONFIG_FLAG_DXR11 = 0x00004000,
|
||||
VKD3D_CONFIG_FLAG_FORCE_NO_INVARIANT_POSITION = 0x00008000,
|
||||
VKD3D_CONFIG_FLAG_WORKAROUND_MISSING_COLOR_COMPUTE_BARRIERS = 0x00010000,
|
||||
VKD3D_CONFIG_FLAG_GLOBAL_PIPELINE_CACHE = 0x00020000,
|
||||
VKD3D_CONFIG_FLAG_PIPELINE_LIBRARY_NO_SERIALIZE_SPIRV = 0x00040000,
|
||||
VKD3D_CONFIG_FLAG_PIPELINE_LIBRARY_SANITIZE_SPIRV = 0x00080000,
|
||||
|
|
|
@ -3024,8 +3024,6 @@ static void d3d12_command_list_emit_render_pass_transition(struct d3d12_command_
|
|||
stage_mask |= new_stages;
|
||||
j++;
|
||||
}
|
||||
|
||||
list->workaround_state.has_pending_color_write = true;
|
||||
}
|
||||
|
||||
dsv = &list->dsv;
|
||||
|
@ -4348,8 +4346,6 @@ static void d3d12_command_list_reset_api_state(struct d3d12_command_list *list,
|
|||
list->cbv_srv_uav_descriptors_view = NULL;
|
||||
list->vrs_image = NULL;
|
||||
|
||||
list->workaround_state.has_pending_color_write = false;
|
||||
|
||||
ID3D12GraphicsCommandList_SetPipelineState(iface, initial_pipeline_state);
|
||||
}
|
||||
|
||||
|
@ -5527,31 +5523,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_DrawIndexedInstanced(d3d12_comm
|
|||
VKD3D_BREADCRUMB_COMMAND(DRAW_INDEXED);
|
||||
}
|
||||
|
||||
static void d3d12_command_list_workaround_handle_missing_color_compute_barriers(struct d3d12_command_list *list)
|
||||
{
|
||||
const struct vkd3d_vk_device_procs *vk_procs = &list->device->vk_procs;
|
||||
VkMemoryBarrier barrier;
|
||||
|
||||
if (list->workaround_state.has_pending_color_write &&
|
||||
(vkd3d_config_flags & VKD3D_CONFIG_FLAG_WORKAROUND_MISSING_COLOR_COMPUTE_BARRIERS))
|
||||
{
|
||||
/* Very specifically, every render pass which writes color sets
|
||||
* has_pending_color_write = true.
|
||||
* If we observe a StateBefore == RENDER_TARGET, clear the flag.
|
||||
* If we come to a plain dispatch with this flag set,
|
||||
* insert a simple memory barrier. The image will still have wrong layout,
|
||||
* but this is good enough to workaround the game bug. */
|
||||
barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
barrier.pNext = NULL;
|
||||
barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
|
||||
VK_CALL(vkCmdPipelineBarrier(list->vk_command_buffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, 1, &barrier, 0, NULL, 0, NULL));
|
||||
list->workaround_state.has_pending_color_write = false;
|
||||
WARN("Injecting workaround barrier!\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void STDMETHODCALLTYPE d3d12_command_list_Dispatch(d3d12_command_list_iface *iface,
|
||||
UINT x, UINT y, UINT z)
|
||||
{
|
||||
|
@ -5578,8 +5549,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_Dispatch(d3d12_command_list_ifa
|
|||
return;
|
||||
}
|
||||
|
||||
d3d12_command_list_workaround_handle_missing_color_compute_barriers(list);
|
||||
|
||||
if (!list->predicate_va)
|
||||
VK_CALL(vkCmdDispatch(list->vk_command_buffer, x, y, z));
|
||||
else
|
||||
|
@ -7151,9 +7120,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_ResourceBarrier(d3d12_command_l
|
|||
VkImageLayout new_layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
uint32_t dsv_decay_mask = 0;
|
||||
|
||||
if (transition->StateBefore == D3D12_RESOURCE_STATE_RENDER_TARGET)
|
||||
list->workaround_state.has_pending_color_write = false;
|
||||
|
||||
if (!is_valid_resource_state(transition->StateBefore))
|
||||
{
|
||||
d3d12_command_list_mark_as_invalid(list,
|
||||
|
|
|
@ -492,9 +492,7 @@ struct vkd3d_instance_application_meta
|
|||
static const struct vkd3d_instance_application_meta application_override[] = {
|
||||
/* MSVC fails to compile empty array. */
|
||||
{ VKD3D_STRING_COMPARE_EXACT, "GravityMark.exe", VKD3D_CONFIG_FLAG_FORCE_MINIMUM_SUBGROUP_SIZE, 0 },
|
||||
/* The game forgets to do a barrier when going from render pass to compute. */
|
||||
{ VKD3D_STRING_COMPARE_EXACT, "Deathloop.exe",
|
||||
VKD3D_CONFIG_FLAG_IGNORE_RTV_HOST_VISIBLE | VKD3D_CONFIG_FLAG_WORKAROUND_MISSING_COLOR_COMPUTE_BARRIERS, 0 },
|
||||
{ VKD3D_STRING_COMPARE_EXACT, "Deathloop.exe", VKD3D_CONFIG_FLAG_IGNORE_RTV_HOST_VISIBLE, 0 },
|
||||
/* Shadow of the Tomb Raider (750920).
|
||||
* Invariant workarounds actually cause more issues than they resolve on NV.
|
||||
* RADV already has workarounds by default.
|
||||
|
|
|
@ -2138,14 +2138,6 @@ struct d3d12_command_list
|
|||
struct d3d12_buffer_copy_tracked_buffer tracked_copy_buffers[VKD3D_BUFFER_COPY_TRACKING_BUFFER_COUNT];
|
||||
unsigned int tracked_copy_buffer_count;
|
||||
|
||||
/* Hackery needed for game workarounds. */
|
||||
struct
|
||||
{
|
||||
/* Used to keep track of COLOR write -> COMPUTE where game forget to insert barrier
|
||||
* before the dispatch. */
|
||||
bool has_pending_color_write;
|
||||
} workaround_state;
|
||||
|
||||
struct vkd3d_private_store private_store;
|
||||
|
||||
#ifdef VKD3D_ENABLE_BREADCRUMBS
|
||||
|
|
Loading…
Reference in New Issue