Merge pull request 'Enhancements & Fixes' (#78) from enhancements into master
Reviewed-on: https://git.madvoxel.net/OpenVulkano/OpenVulkano/pulls/78
This commit is contained in:
@@ -133,7 +133,11 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
GetCmdBuffer().end();
|
||||
vk::SubmitInfo si = { 0, nullptr, nullptr, 1, &frameResources[currentBuffer].cmdBuffer, 1, &frameResources[currentBuffer].semaphore };
|
||||
transferQueue.submit(1, &si, vk::Fence());
|
||||
vk::Result result = transferQueue.submit(1, &si, vk::Fence());
|
||||
if (result != vk::Result::eSuccess) [[unlikely]]
|
||||
{
|
||||
Logger::RENDER->error("Failed to submit resource manager transfer queue");
|
||||
}
|
||||
return frameResources[currentBuffer].semaphore;
|
||||
}
|
||||
|
||||
@@ -222,12 +226,22 @@ namespace OpenVulkano::Vulkan
|
||||
return static_cast<VulkanCamera*>(camera->renderCamera);
|
||||
}
|
||||
|
||||
UniformBuffer* ResourceManager::CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId)
|
||||
UniformBuffer* ResourceManager::CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId, bool hostVis)
|
||||
{
|
||||
const std::unique_lock lock(mutex);
|
||||
const vk::DeviceSize allocSize = Utils::Align(size, uniformBufferAlignment);
|
||||
|
||||
auto buffer = CreateDeviceOnlyBufferWithData(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, data);
|
||||
MemoryPool::ManagedBufferPtr buffer;
|
||||
if (hostVis)
|
||||
{
|
||||
buffer = memPool.CreateBuffer(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible);
|
||||
buffer->Map();
|
||||
buffer->Copy(data, size, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = CreateDeviceOnlyBufferWithData(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, data);
|
||||
}
|
||||
|
||||
UniformBuffer* uBuffer = new UniformBuffer();
|
||||
uBuffer->Init(std::move(buffer), 0, allocSize, GetDescriptorLayoutSet(binding), binding, setId);
|
||||
@@ -322,10 +336,8 @@ namespace OpenVulkano::Vulkan
|
||||
VulkanUniformBuffer* vkBuffer;
|
||||
ManagedBuffer::Ptr mBuffer;
|
||||
const vk::DeviceSize allocSize = Utils::Align(buffer->size, uniformBufferAlignment);
|
||||
vk::DeviceSize frameSize = 0;
|
||||
if (buffer->GetUpdateFrequency() != Scene::UpdateFrequency::Never)
|
||||
{
|
||||
frameSize = allocSize;
|
||||
vkBuffer = new VulkanUniformBufferDynamic();
|
||||
const uint32_t imgs = context->swapChain.GetImageCount();
|
||||
mBuffer = memPool.CreateBuffer(imgs * allocSize, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible);
|
||||
@@ -354,4 +366,19 @@ namespace OpenVulkano::Vulkan
|
||||
if (!sampler) sampler = device.createSampler(samplerConfig);
|
||||
return sampler;
|
||||
}
|
||||
|
||||
Unique<Scene::Texture> ResourceManager::CreateSharedMemoryTexture(const Math::Vector3ui& resolution, DataFormat format)
|
||||
{
|
||||
const std::unique_lock lock(mutex);
|
||||
Unique<Scene::Texture> texture = std::make_unique<Scene::Texture>();
|
||||
texture->resolution = resolution;
|
||||
texture->format = format;
|
||||
texture->size = resolution.x * resolution.y * resolution.z * format.GetBytesPerPixel();
|
||||
|
||||
VulkanTexture* vkTexture = new VulkanTexture();
|
||||
vkTexture->InitSharedMem(this, texture.get(), GetDescriptorLayoutSet(Scene::Texture::DESCRIPTOR_SET_LAYOUT_BINDING), Scene::Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
textures.emplace_back(vkTexture);
|
||||
|
||||
return texture;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user