From 72a469aa9bf9e5e0252977ed6534690e31bf4c1f Mon Sep 17 00:00:00 2001 From: NebulousDev Date: Sat, 23 Jan 2021 11:39:44 -0500 Subject: [PATCH] Fixed long-standing memory locality oversight --- Source/Engine/Engine.vcxproj | 8 ++--- Source/Engine/src/graphics/VGFXContext.h | 2 ++ Source/Sandbox/Sandbox.vcxproj | 8 ++--- Source/Sandbox/src/Sandbox.cpp | 27 ++++++++++----- Source/Vulkan/Vulkan.vcxproj | 8 ++--- Source/Vulkan/src/VulkanContext.cpp | 42 ++++++++++++++++++++++++ Source/Vulkan/src/VulkanContext.h | 2 ++ Source/Vulkan/src/VulkanDeviceMemory.cpp | 10 +++--- Source/Vulkan/src/VulkanDeviceMemory.h | 2 +- Source/VulkanWin32/VulkanWin32.vcxproj | 8 ++--- Source/Win32/Win32.vcxproj | 8 ++--- 11 files changed, 92 insertions(+), 33 deletions(-) diff --git a/Source/Engine/Engine.vcxproj b/Source/Engine/Engine.vcxproj index 60a5379..2ac5920 100644 --- a/Source/Engine/Engine.vcxproj +++ b/Source/Engine/Engine.vcxproj @@ -101,7 +101,7 @@ QUARTZ_DEBUG;QUARTZ_API_EXPORT;_WINDLL;%(PreprocessorDefinitions) - core.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration); @@ -115,7 +115,7 @@ QUARTZ_DEBUG;QUARTZ_64;QUARTZ_API_EXPORT;_WINDLL;%(PreprocessorDefinitions) - core.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration); @@ -135,7 +135,7 @@ true true - core.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration); @@ -155,7 +155,7 @@ true true - core.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration); diff --git a/Source/Engine/src/graphics/VGFXContext.h b/Source/Engine/src/graphics/VGFXContext.h index c55b301..8f21951 100644 --- a/Source/Engine/src/graphics/VGFXContext.h +++ b/Source/Engine/src/graphics/VGFXContext.h @@ -491,6 +491,8 @@ namespace Quartz virtual void UnmapBuffer(HGFXBuffer buffer) = 0; + virtual void CopyBuffer(HGFXBuffer source, HGFXBuffer dest) = 0; + virtual void CopyBufferToImage(HGFXBuffer buffer, HGFXImage image) = 0; virtual void TransitionImage(HGFXImage image, GFXImageLayout oldLayout, GFXImageLayout newLayout) = 0; diff --git a/Source/Sandbox/Sandbox.vcxproj b/Source/Sandbox/Sandbox.vcxproj index ea2eee9..7312206 100644 --- a/Source/Sandbox/Sandbox.vcxproj +++ b/Source/Sandbox/Sandbox.vcxproj @@ -93,7 +93,7 @@ QUARTZ_DEBUG;_CRT_SECURE_NO_WARNINGS;QUARTZ_DEBUG;_MBCS;%(PreprocessorDefinitions) - core.lib;engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib32 @@ -116,7 +116,7 @@ call compile_and_resources.bat QUARTZ_DEBUG;QUARTZ_64;_CRT_SECURE_NO_WARNINGS;QUARTZ_DEBUG;QUARTZ_64;_MBCS;%(PreprocessorDefinitions) - core.lib;engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib @@ -145,7 +145,7 @@ call compile_and_resources.bat true true - core.lib;engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib32 @@ -174,7 +174,7 @@ call compile_and_resources.bat true true - core.lib;engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan_win32.lib;vulkan.lib;vulkan-1.lib;%(AdditionalDependencies) $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib diff --git a/Source/Sandbox/src/Sandbox.cpp b/Source/Sandbox/src/Sandbox.cpp index 8c6762d..238d850 100644 --- a/Source/Sandbox/src/Sandbox.cpp +++ b/Source/Sandbox/src/Sandbox.cpp @@ -42,7 +42,7 @@ namespace Quartz SCENE RESOURCES =====================================*/ - #define MODEL_PATH "models/testscene.obj" + #define MODEL_PATH "models/sponza2.obj" #define DIFFUSE_PATH "textures/stone.png" #define NORMAL_PATH "textures/stone_normal.png" #define SPECULAR_PATH "textures/stone_specular.png" @@ -400,17 +400,28 @@ int main(int argc, char* argv[]) BUFFERS =====================================*/ - HGFXBuffer vertexBuffer = pVulkanContext->CreateBuffer(GFX_BUFFER_USAGE_VERTEX_BUFFER_BIT, + HGFXBuffer vertexStagingBuffer = pVulkanContext->CreateBuffer(GFX_BUFFER_USAGE_VERTEX_BUFFER_BIT | GFX_BUFFER_USAGE_TRANSFER_SRC_BIT, GFX_BUFFER_ACCESS_HOST_VISIBLE_BIT | GFX_BUFFER_ACCESS_HOST_COHERENT_BIT, mModel.vertexData.buffer.Size()); - void* pVertexData = pVulkanContext->MapBuffer(vertexBuffer); + void* pVertexData = pVulkanContext->MapBuffer(vertexStagingBuffer); memcpy(pVertexData, mModel.vertexData.buffer.Data(), mModel.vertexData.buffer.Size()); - pVulkanContext->UnmapBuffer(vertexBuffer); + pVulkanContext->UnmapBuffer(vertexStagingBuffer); - HGFXBuffer indexBuffer = pVulkanContext->CreateBuffer(GFX_BUFFER_USAGE_INDEX_BUFFER_BIT, + HGFXBuffer indexStagingBuffer = pVulkanContext->CreateBuffer(GFX_BUFFER_USAGE_INDEX_BUFFER_BIT | GFX_BUFFER_USAGE_TRANSFER_SRC_BIT, GFX_BUFFER_ACCESS_HOST_VISIBLE_BIT | GFX_BUFFER_ACCESS_HOST_COHERENT_BIT, mModel.indexData.buffer.Size()); - void* pIndexData = pVulkanContext->MapBuffer(indexBuffer); + void* pIndexData = pVulkanContext->MapBuffer(indexStagingBuffer); memcpy(pIndexData, mModel.indexData.buffer.Data(), mModel.indexData.buffer.Size()); - pVulkanContext->UnmapBuffer(indexBuffer); + pVulkanContext->UnmapBuffer(indexStagingBuffer); + + HGFXBuffer vertexBuffer = pVulkanContext->CreateBuffer(GFX_BUFFER_USAGE_VERTEX_BUFFER_BIT | GFX_BUFFER_USAGE_TRANSFER_DEST_BIT, + GFX_BUFFER_ACCESS_DEVICE_LOCAL_BIT, mModel.vertexData.buffer.Size()); + + HGFXBuffer indexBuffer = pVulkanContext->CreateBuffer(GFX_BUFFER_USAGE_INDEX_BUFFER_BIT | GFX_BUFFER_USAGE_TRANSFER_DEST_BIT, + GFX_BUFFER_ACCESS_DEVICE_LOCAL_BIT, mModel.vertexData.buffer.Size()); + + pVulkanContext->CopyBuffer(vertexStagingBuffer, vertexBuffer); + pVulkanContext->CopyBuffer(indexStagingBuffer, indexBuffer); + + //pVulkanContext.DestroyBuffer(); /*===================================== TEXTURES @@ -476,7 +487,7 @@ int main(int argc, char* argv[]) GFX_IMAGE_VIEW_TYPE_2D, GFX_IMAGE_USAGE_SAMPLED_TEXTURE, 0, 1, 0, 1); HGFXSampler textureSampler = pVulkanContext->CreateSampler(GFX_SAMPLER_FILTER_LINEAR, - GFX_SAMPLER_FILTER_LINEAR, GFX_SAMPLER_MODE_REPEAT, 16); + GFX_SAMPLER_FILTER_LINEAR, GFX_SAMPLER_MODE_REPEAT, 8); /*===================================== GENERATE COMMAND BUFFERS diff --git a/Source/Vulkan/Vulkan.vcxproj b/Source/Vulkan/Vulkan.vcxproj index c7eac72..0c7f1eb 100644 --- a/Source/Vulkan/Vulkan.vcxproj +++ b/Source/Vulkan/Vulkan.vcxproj @@ -98,7 +98,7 @@ $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib32 - core.lib;engine.lib;vulkan-1.lib;spirv-cross-c.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;vulkan-1.lib;spirv-cross-c.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -112,7 +112,7 @@ $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib - core.lib;engine.lib;$(VULKAN_SDK)\Lib\*.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;$(VULKAN_SDK)\Lib\*.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -132,7 +132,7 @@ true true $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib32 - core.lib;engine.lib;vulkan-1.lib;spirv-cross-c.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;vulkan-1.lib;spirv-cross-c.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -153,7 +153,7 @@ true true $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib - core.lib;engine.lib;$(VULKAN_SDK)\Lib\*.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;$(VULKAN_SDK)\Lib\*.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) diff --git a/Source/Vulkan/src/VulkanContext.cpp b/Source/Vulkan/src/VulkanContext.cpp index a434738..dcc73e3 100644 --- a/Source/Vulkan/src/VulkanContext.cpp +++ b/Source/Vulkan/src/VulkanContext.cpp @@ -1312,6 +1312,48 @@ namespace Quartz pVulkanBuffer->pMemory->UnmapMemory(); } + void VPLVulkanContext::CopyBuffer(HGFXBuffer source, HGFXBuffer dest) + { + // @TODO: Probably clean this up to not have to recreate command buffers + + VulkanBuffer* pVulkanBufferSource = static_cast(source); + VulkanBuffer* pVulkanBufferDest = static_cast(dest); + + VkCommandBufferAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocInfo.commandPool = mpDevice->GetTransferCommandPoolHandle(); + allocInfo.commandBufferCount = 1; + + VkCommandBuffer commandBuffer; + vkAllocateCommandBuffers(mpDevice->GetDeviceHandle(), &allocInfo, &commandBuffer); + + VkCommandBufferBeginInfo beginInfo{}; + beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; + + vkBeginCommandBuffer(commandBuffer, &beginInfo); + + VkBufferCopy copyRegion{}; + copyRegion.srcOffset = 0; + copyRegion.dstOffset = 0; + copyRegion.size = pVulkanBufferSource->sizeBytes; + + vkCmdCopyBuffer(commandBuffer, pVulkanBufferSource->vkBuffer, pVulkanBufferDest->vkBuffer, 1, ©Region); + + vkEndCommandBuffer(commandBuffer); + + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &commandBuffer; + + vkQueueSubmit(mpDevice->GetTransferQueue().GetQueueHandle(), 1, &submitInfo, VK_NULL_HANDLE); + vkQueueWaitIdle(mpDevice->GetTransferQueue().GetQueueHandle()); + + vkFreeCommandBuffers(mpDevice->GetDeviceHandle(), mpDevice->GetTransferCommandPoolHandle(), 1, &commandBuffer); + } + void VPLVulkanContext::CopyBufferToImage(HGFXBuffer buffer, HGFXImage image) { // @TODO: Probably clean this up to not have to recreate command buffers diff --git a/Source/Vulkan/src/VulkanContext.h b/Source/Vulkan/src/VulkanContext.h index 5c896f3..04d1128 100644 --- a/Source/Vulkan/src/VulkanContext.h +++ b/Source/Vulkan/src/VulkanContext.h @@ -285,6 +285,8 @@ namespace Quartz void UnmapBuffer(HGFXBuffer buffer) override; + void CopyBuffer(HGFXBuffer source, HGFXBuffer dest) override; + void CopyBufferToImage(HGFXBuffer buffer, HGFXImage image) override; void TransitionImage(HGFXImage image, GFXImageLayout oldLayout, GFXImageLayout newLayout) override; diff --git a/Source/Vulkan/src/VulkanDeviceMemory.cpp b/Source/Vulkan/src/VulkanDeviceMemory.cpp index 4544be2..cc5b673 100644 --- a/Source/Vulkan/src/VulkanDeviceMemory.cpp +++ b/Source/Vulkan/src/VulkanDeviceMemory.cpp @@ -88,13 +88,15 @@ namespace Quartz return nullptr; } - VulkanDeviceMemoryAllocation allocation(mpParentDevice->GetDeviceHandle(), deviceMemory, memoryProperties, memoryTypeBits, sizeBytes); - VulkanDeviceMemoryAllocation* pStoredAllocation = mDeviceHeapAllocations.PushBack(allocation); - mAllocationIndexMap.Put((VulkanDeviceMemoryHandle)pStoredAllocation, mDeviceHeapAllocations.Size() - 1); + VulkanDeviceMemoryAllocation* pAllocation = new VulkanDeviceMemoryAllocation(mpParentDevice->GetDeviceHandle(), + deviceMemory, memoryProperties, memoryTypeBits, sizeBytes); + + mDeviceHeapAllocations.PushBack(pAllocation); + mAllocationIndexMap.Put((VulkanDeviceMemoryHandle)pAllocation, mDeviceHeapAllocations.Size() - 1); mTotalAllocatedSize += sizeBytes; - return pStoredAllocation; + return pAllocation; } void VulkanDeviceMemoryAllocator::Free(VulkanDeviceMemoryAllocation* deviceAllocation) diff --git a/Source/Vulkan/src/VulkanDeviceMemory.h b/Source/Vulkan/src/VulkanDeviceMemory.h index d0e201e..9992548 100644 --- a/Source/Vulkan/src/VulkanDeviceMemory.h +++ b/Source/Vulkan/src/VulkanDeviceMemory.h @@ -45,7 +45,7 @@ namespace Quartz { private: VulkanDevice* mpParentDevice; - Array mDeviceHeapAllocations; + Array mDeviceHeapAllocations; Map mAllocationIndexMap; UInt64 mTotalAllocatedSize; diff --git a/Source/VulkanWin32/VulkanWin32.vcxproj b/Source/VulkanWin32/VulkanWin32.vcxproj index 87f3518..35dd4c7 100644 --- a/Source/VulkanWin32/VulkanWin32.vcxproj +++ b/Source/VulkanWin32/VulkanWin32.vcxproj @@ -104,7 +104,7 @@ $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib - core.lib;engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -118,7 +118,7 @@ $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib32 - core.lib;engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -138,7 +138,7 @@ true true $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib32 - core.lib;engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -158,7 +158,7 @@ true true $(SolutionDir)$(Configuration);$(VULKAN_SDK)\Lib - core.lib;engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;platform_win32.lib;vulkan.lib;vulkan-1.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) diff --git a/Source/Win32/Win32.vcxproj b/Source/Win32/Win32.vcxproj index eeccb71..dd87177 100644 --- a/Source/Win32/Win32.vcxproj +++ b/Source/Win32/Win32.vcxproj @@ -102,7 +102,7 @@ $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) - core.lib;engine.lib;Cfgmgr32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;Cfgmgr32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -116,7 +116,7 @@ $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) - core.lib;engine.lib;Cfgmgr32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;Cfgmgr32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -136,7 +136,7 @@ true true $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) - core.lib;engine.lib;Cfgmgr32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;Cfgmgr32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -156,7 +156,7 @@ true true $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) - core.lib;engine.lib;Cfgmgr32.lib;Hid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + engine.lib;Cfgmgr32.lib;Hid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)