mirror of
https://github.com/libretro/RetroArch
synced 2025-04-25 09:02:44 +00:00
Vulkan: Host writes are implicitly flushed on submit.
Use TOP_OF_PIPE/0 access instead to work around spammy asserts on Anvil. We still have to invalidate the caches however.
This commit is contained in:
parent
6add83e3ec
commit
f1a5725f66
@ -444,8 +444,8 @@ struct vk_texture vulkan_create_texture(vk_t *vk,
|
|||||||
|
|
||||||
vulkan_image_layout_transition(vk, staging, tmp.image,
|
vulkan_image_layout_transition(vk, staging, tmp.image,
|
||||||
VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_GENERAL,
|
VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_GENERAL,
|
||||||
VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
|
0, VK_ACCESS_TRANSFER_READ_BIT,
|
||||||
VK_PIPELINE_STAGE_HOST_BIT,
|
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||||
|
|
||||||
vulkan_image_layout_transition(vk, staging, tex.image,
|
vulkan_image_layout_transition(vk, staging, tex.image,
|
||||||
@ -565,16 +565,16 @@ void vulkan_transition_texture(vk_t *vk, struct vk_texture *texture)
|
|||||||
case VULKAN_TEXTURE_STREAMED:
|
case VULKAN_TEXTURE_STREAMED:
|
||||||
vulkan_image_layout_transition(vk, vk->cmd, texture->image,
|
vulkan_image_layout_transition(vk, vk->cmd, texture->image,
|
||||||
texture->layout, VK_IMAGE_LAYOUT_GENERAL,
|
texture->layout, VK_IMAGE_LAYOUT_GENERAL,
|
||||||
VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
|
0, VK_ACCESS_SHADER_READ_BIT,
|
||||||
VK_PIPELINE_STAGE_HOST_BIT,
|
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VULKAN_TEXTURE_STAGING:
|
case VULKAN_TEXTURE_STAGING:
|
||||||
vulkan_image_layout_transition(vk, vk->cmd, texture->image,
|
vulkan_image_layout_transition(vk, vk->cmd, texture->image,
|
||||||
texture->layout, VK_IMAGE_LAYOUT_GENERAL,
|
texture->layout, VK_IMAGE_LAYOUT_GENERAL,
|
||||||
VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
|
0, VK_ACCESS_TRANSFER_READ_BIT,
|
||||||
VK_PIPELINE_STAGE_HOST_BIT,
|
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1354,11 +1354,11 @@ static void vulkan_readback(vk_t *vk)
|
|||||||
static void vulkan_flush_caches(vk_t *vk)
|
static void vulkan_flush_caches(vk_t *vk)
|
||||||
{
|
{
|
||||||
VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER };
|
VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER };
|
||||||
barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT;
|
barrier.srcAccessMask = 0;
|
||||||
barrier.dstAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_UNIFORM_READ_BIT;
|
barrier.dstAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_UNIFORM_READ_BIT;
|
||||||
|
|
||||||
VKFUNC(vkCmdPipelineBarrier)(vk->cmd,
|
VKFUNC(vkCmdPipelineBarrier)(vk->cmd,
|
||||||
VK_PIPELINE_STAGE_HOST_BIT,
|
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||||
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
|
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
|
||||||
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
|
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
|
||||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user