From b9ecd0a36a99f4645df5b21b01d8f0e5fdc35ec5 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Wed, 25 Apr 2018 16:39:58 +0100 Subject: [PATCH] minor vulkan updates --- WickedEngine/wiGraphicsDevice_Vulkan.cpp | 32 ++++++++++++++++++++---- WickedEngine/wiGraphicsDevice_Vulkan.h | 2 ++ WickedEngine/wiRenderer.cpp | 5 ++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.cpp b/WickedEngine/wiGraphicsDevice_Vulkan.cpp index abfecbc23..72da3ad96 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.cpp +++ b/WickedEngine/wiGraphicsDevice_Vulkan.cpp @@ -1591,6 +1591,8 @@ namespace wiGraphicsTypes queueCreateInfos.push_back(queueCreateInfo); } + vkGetPhysicalDeviceProperties(physicalDevice, &physicalDeviceProperties); + VkPhysicalDeviceFeatures deviceFeatures = {}; vkGetPhysicalDeviceFeatures(physicalDevice, &deviceFeatures); @@ -4334,14 +4336,14 @@ namespace wiGraphicsTypes VkMemoryBarrier barrier; barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER; barrier.pNext = nullptr; - barrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; - barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_SHADER_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_SHADER_READ_BIT; vkCmdPipelineBarrier(GetDirectCommandList(threadID), VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_DEPENDENCY_BY_REGION_BIT, - 0, nullptr, + 0, + 1, &barrier, 0, nullptr, 0, nullptr); } @@ -4598,7 +4600,7 @@ namespace wiGraphicsTypes void GraphicsDevice_Vulkan::WaitForGPU() { - vkQueueWaitIdle(presentQueue); + //vkQueueWaitIdle(presentQueue); } void GraphicsDevice_Vulkan::QueryBegin(GPUQuery *query, GRAPHICSTHREAD threadID) @@ -4617,6 +4619,26 @@ namespace wiGraphicsTypes } void GraphicsDevice_Vulkan::TransitionBarrier(GPUResource *const* resources, UINT NumBarriers, RESOURCE_STATES stateBefore, RESOURCE_STATES stateAfter, GRAPHICSTHREAD threadID) { + //if (stateBefore == RESOURCE_STATE_UNORDERED_ACCESS && stateAfter == RESOURCE_STATE_GENERIC_READ) + //{ + // VkBufferMemoryBarrier barrier = {}; + // barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; + // barrier.pNext = nullptr; + // barrier.buffer = static_cast(resources[0]->resource_Vulkan); + // barrier.size = ((GPUBuffer*)resources[0])->desc.ByteWidth; + // barrier.offset = 0; + // barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_SHADER_WRITE_BIT; + // barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_SHADER_READ_BIT; + // vkCmdPipelineBarrier(GetDirectCommandList(threadID), + // VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, + // 0, + // 0, nullptr, + // 1, &barrier, + // 0, nullptr); + //} + + //renderPass[threadID].disable(GetDirectCommandList(threadID)); //for (UINT i = 0; i < NumBarriers; ++i) diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.h b/WickedEngine/wiGraphicsDevice_Vulkan.h index 7241cb161..44a498ccc 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.h +++ b/WickedEngine/wiGraphicsDevice_Vulkan.h @@ -40,6 +40,8 @@ namespace wiGraphicsTypes VkQueue graphicsQueue; VkQueue presentQueue; + VkPhysicalDeviceProperties physicalDeviceProperties; + VkQueue copyQueue; VkCommandPool copyCommandPool; VkCommandBuffer copyCommandBuffer; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 097436873..d9517d3b3 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -5402,6 +5402,11 @@ void wiRenderer::DrawWorld(Camera* camera, bool tessellation, GRAPHICSTHREAD thr if (shaderType == SHADERTYPE_TILEDFORWARD) { + //GPUResource* res[] = + //{ + // resourceBuffers[RBTYPE_ENTITYINDEXLIST_OPAQUE] + //}; + //GetDevice()->TransitionBarrier(res, ARRAYSIZE(res), RESOURCE_STATE_UNORDERED_ACCESS, RESOURCE_STATE_GENERIC_READ, threadID); GetDevice()->BindResource(PS, resourceBuffers[RBTYPE_ENTITYINDEXLIST_OPAQUE], SBSLOT_ENTITYINDEXLIST, threadID); }