summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-09-28 18:35:40 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-09-28 18:35:40 +0000
commit010aaab94dc6c199d384462665609074a9d34222 (patch)
treeee60b1f2741c8423d8e6fa1202a642c83f49cd43 /Graphics/GraphicsEngineVulkan
parentAdded initial implementations of Metal backend tests (diff)
downloadDiligentCore-010aaab94dc6c199d384462665609074a9d34222.tar.gz
DiligentCore-010aaab94dc6c199d384462665609074a9d34222.zip
Vulkan backend: few fixes to
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp25
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp6
3 files changed, 20 insertions, 13 deletions
diff --git a/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp b/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp
index ebb1ea22..5261235a 100644
--- a/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp
@@ -253,7 +253,7 @@ void EngineFactoryVkImpl::CreateDeviceAndContextsVk(const EngineVkCreateInfo& _E
if (EngineCI.Features.MeshShaders == DEVICE_FEATURE_STATE_ENABLED && !MeshShadersSupported)
LOG_ERROR_AND_THROW("Mesh shaders are not supported by this device");
- // The actual state of Features.MeshShaders in device caps is set by VulkanLogicalDevice
+ // The actual state of Features.MeshShaders in device caps is set by RenderDeviceVkImpl
#if defined(_MSC_VER) && defined(_WIN64)
static_assert(sizeof(DeviceFeatures) == 23, "Did you add a new feature to DeviceFeatures? Please handle its satus here.");
diff --git a/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp
index c010e460..63792bc5 100644
--- a/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp
@@ -136,15 +136,22 @@ RenderPassVkImpl::RenderPassVkImpl(IReferenceCounters* pRefCounters,
std::vector<VkSubpassDependency> vkDependencies(Desc.DependencyCount);
for (Uint32 i = 0; i < Desc.DependencyCount; ++i)
{
- const auto& DependencyDesc = m_Desc.pDependencies[i];
- auto& vkDependency = vkDependencies[i];
- vkDependency.srcSubpass = DependencyDesc.SrcSubpass;
- vkDependency.dstSubpass = DependencyDesc.DstSubpass;
- vkDependency.srcStageMask = DependencyDesc.SrcStageMask;
- vkDependency.dstStageMask = DependencyDesc.DstStageMask;
- vkDependency.srcAccessMask = DependencyDesc.SrcAccessMask;
- vkDependency.dstAccessMask = DependencyDesc.DstAccessMask;
- vkDependency.dependencyFlags = 0;
+ const auto& DependencyDesc = m_Desc.pDependencies[i];
+ auto& vkDependency = vkDependencies[i];
+ vkDependency.srcSubpass = DependencyDesc.SrcSubpass;
+ vkDependency.dstSubpass = DependencyDesc.DstSubpass;
+ vkDependency.srcStageMask = DependencyDesc.SrcStageMask;
+ vkDependency.dstStageMask = DependencyDesc.DstStageMask;
+ vkDependency.srcAccessMask = DependencyDesc.SrcAccessMask;
+ vkDependency.dstAccessMask = DependencyDesc.DstAccessMask;
+
+ // VK_DEPENDENCY_BY_REGION_BIT specifies that dependencies will be framebuffer-local.
+ // Framebuffer-local dependencies are more optimal for most architectures; particularly
+ // tile-based architectures - which can keep framebuffer-regions entirely in on-chip registers
+ // and thus avoid external bandwidth across such a dependency. Including a framebuffer-global
+ // dependency in your rendering will usually force all implementations to flush data to memory,
+ // or to a higher level cache, breaking any potential locality optimizations.
+ vkDependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
}
RenderPassCI.dependencyCount = Desc.DependencyCount;
RenderPassCI.pDependencies = vkDependencies.data();
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp
index 25966163..c9336b79 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp
@@ -1172,10 +1172,10 @@ static VkAccessFlags ResourceStateFlagToVkAccessFlags(RESOURCE_STATE StateFlag)
case RESOURCE_STATE_INDIRECT_ARGUMENT: return VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
case RESOURCE_STATE_COPY_DEST: return VK_ACCESS_TRANSFER_WRITE_BIT;
case RESOURCE_STATE_COPY_SOURCE: return VK_ACCESS_TRANSFER_READ_BIT;
- case RESOURCE_STATE_RESOLVE_DEST: return VK_ACCESS_MEMORY_READ_BIT;
- case RESOURCE_STATE_RESOLVE_SOURCE: return VK_ACCESS_MEMORY_WRITE_BIT;
+ case RESOURCE_STATE_RESOLVE_DEST: return VK_ACCESS_TRANSFER_WRITE_BIT;
+ case RESOURCE_STATE_RESOLVE_SOURCE: return VK_ACCESS_TRANSFER_READ_BIT;
case RESOURCE_STATE_INPUT_ATTACHMENT: return VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
- case RESOURCE_STATE_PRESENT: return VK_ACCESS_MEMORY_READ_BIT;
+ case RESOURCE_STATE_PRESENT: return 0;
// clang-format on
default: