@@ -554,8 +554,8 @@ void GPUDisplayBackendVulkan::createUniformLayoutsAndBuffers()
554554 mUniformBuffersMat [j].resize (mFramesInFlight );
555555 mUniformBuffersCol [j].resize (mFramesInFlight );
556556 for (unsigned int i = 0 ; i < mFramesInFlight ; i++) {
557- mUniformBuffersMat [j][i] = createBuffer (sizeof (hmm_mat4), nullptr , vk::BufferUsageFlagBits::eUniformBuffer, false );
558- mUniformBuffersCol [j][i] = createBuffer (sizeof (float ) * 4 , nullptr , vk::BufferUsageFlagBits::eUniformBuffer, false );
557+ mUniformBuffersMat [j][i] = createBuffer (sizeof (hmm_mat4), nullptr , vk::BufferUsageFlagBits::eUniformBuffer, mDisplay -> cfg (). vulkan . uniformBuffersInDeviceMemory ? 2 : 0 );
558+ mUniformBuffersCol [j][i] = createBuffer (sizeof (float ) * 4 , nullptr , vk::BufferUsageFlagBits::eUniformBuffer, mDisplay -> cfg (). vulkan . uniformBuffersInDeviceMemory ? 2 : 0 );
559559 }
560560 }
561561
@@ -966,7 +966,7 @@ void GPUDisplayBackendVulkan::createOffscreenBuffers(bool forScreenshot, bool fo
966966 {0 , (float )mRenderHeight , 0 .0f , 1 .0f },
967967 {(float )mRenderWidth , 0 , 1 .0f , 0 .0f },
968968 {(float )mRenderWidth , (float )mRenderHeight , 1 .0f , 1 .0f }};
969- mMixingTextureVertexArray = createBuffer (sizeof (vertices), &vertices[0 ][0 ], vk::BufferUsageFlagBits::eVertexBuffer, true );
969+ mMixingTextureVertexArray = createBuffer (sizeof (vertices), &vertices[0 ][0 ], vk::BufferUsageFlagBits::eVertexBuffer, 1 );
970970
971971 if (mCommandBufferPerImage ) {
972972 for (unsigned int i = 0 ; i < mFramesInFlight ; i++) {
@@ -1245,13 +1245,13 @@ void GPUDisplayBackendVulkan::clearShaders()
12451245
12461246void GPUDisplayBackendVulkan::writeToBuffer (VulkanBuffer& buffer, size_t size, const void * srcData)
12471247{
1248- if (! buffer.deviceMemory ) {
1248+ if (buffer.deviceMemory != 1 ) {
12491249 void * dstData;
12501250 CHKERR (mDevice .mapMemory (buffer.memory , 0 , buffer.size , {}, &dstData));
12511251 memcpy (dstData, srcData, size);
12521252 mDevice .unmapMemory (buffer.memory );
12531253 } else {
1254- auto tmp = createBuffer (size, srcData, vk::BufferUsageFlagBits::eTransferSrc, false );
1254+ auto tmp = createBuffer (size, srcData, vk::BufferUsageFlagBits::eTransferSrc, 0 );
12551255
12561256 vk::CommandBuffer commandBuffer = getSingleTimeCommandBuffer ();
12571257 vk::BufferCopy copyRegion{};
@@ -1265,7 +1265,13 @@ void GPUDisplayBackendVulkan::writeToBuffer(VulkanBuffer& buffer, size_t size, c
12651265
12661266GPUDisplayBackendVulkan::VulkanBuffer GPUDisplayBackendVulkan::createBuffer (size_t size, const void * srcData, vk::BufferUsageFlags type, int deviceMemory)
12671267{
1268- vk::MemoryPropertyFlags properties = deviceMemory ? vk::MemoryPropertyFlagBits::eDeviceLocal : (vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
1268+ vk::MemoryPropertyFlags properties;
1269+ if (deviceMemory) {
1270+ properties |= vk::MemoryPropertyFlagBits::eDeviceLocal;
1271+ }
1272+ if (deviceMemory == 0 || deviceMemory == 2 ) {
1273+ properties |= (vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
1274+ }
12691275 if (deviceMemory == 1 ) {
12701276 type |= vk::BufferUsageFlagBits::eTransferDst;
12711277 }
@@ -1324,7 +1330,7 @@ void GPUDisplayBackendVulkan::clearVertexBuffers()
13241330
13251331void GPUDisplayBackendVulkan::writeToImage (VulkanImage& image, const void * srcData, size_t srcSize)
13261332{
1327- auto tmp = createBuffer (srcSize, srcData, vk::BufferUsageFlagBits::eTransferSrc, false );
1333+ auto tmp = createBuffer (srcSize, srcData, vk::BufferUsageFlagBits::eTransferSrc, 0 );
13281334
13291335 vk::CommandBuffer commandBuffer = getSingleTimeCommandBuffer ();
13301336 cmdImageMemoryBarrier (commandBuffer, image.image , {}, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer);
@@ -1430,10 +1436,10 @@ void GPUDisplayBackendVulkan::loadDataToGPU(size_t totalVertizes)
14301436{
14311437 mDevice .waitIdle ();
14321438 clearVertexBuffers ();
1433- mVBO = createBuffer (totalVertizes * sizeof (mDisplay ->vertexBuffer ()[0 ][0 ]), mDisplay ->vertexBuffer ()[0 ].data ());
1439+ mVBO = createBuffer (totalVertizes * sizeof (mDisplay ->vertexBuffer ()[0 ][0 ]), mDisplay ->vertexBuffer ()[0 ].data (), vk::BufferUsageFlagBits::eVertexBuffer, 1 );
14341440 if (mDisplay ->cfgR ().useGLIndirectDraw ) {
14351441 fillIndirectCmdBuffer ();
1436- mIndirectCommandBuffer = createBuffer (mCmdBuffer .size () * sizeof (mCmdBuffer [0 ]), mCmdBuffer .data (), vk::BufferUsageFlagBits::eIndirectBuffer);
1442+ mIndirectCommandBuffer = createBuffer (mCmdBuffer .size () * sizeof (mCmdBuffer [0 ]), mCmdBuffer .data (), vk::BufferUsageFlagBits::eIndirectBuffer, 1 );
14371443 mCmdBuffer .clear ();
14381444 }
14391445 needRecordCommandBuffers ();
@@ -1665,7 +1671,7 @@ void GPUDisplayBackendVulkan::finishText()
16651671 if (mFontVertexBuffer [mCurrentBufferSet ].size ) {
16661672 clearBuffer (mFontVertexBuffer [mCurrentBufferSet ]);
16671673 }
1668- mFontVertexBuffer [mCurrentBufferSet ] = createBuffer (mFontVertexBufferHost .size () * sizeof (float ), mFontVertexBufferHost .data (), vk::BufferUsageFlagBits::eVertexBuffer, false );
1674+ mFontVertexBuffer [mCurrentBufferSet ] = createBuffer (mFontVertexBufferHost .size () * sizeof (float ), mFontVertexBufferHost .data (), vk::BufferUsageFlagBits::eVertexBuffer, 0 );
16691675
16701676 mCommandBuffersText [mCurrentBufferSet ].bindPipeline (vk::PipelineBindPoint::eGraphics, mPipelines [3 ]);
16711677 mCommandBuffersText [mCurrentBufferSet ].bindDescriptorSets (vk::PipelineBindPoint::eGraphics, mPipelineLayoutTexture , 0 , 1 , &mDescriptorSets [1 ][mCurrentBufferSet ], 0 , nullptr );
0 commit comments