made rendering work
This commit is contained in:
@@ -4,9 +4,6 @@
|
||||
#include "tier1/utlvector.h"
|
||||
#include "vulkan_state.h"
|
||||
|
||||
CUtlVector<VkCommandBuffer> g_vkCommandBuffers;
|
||||
IVkCommandBufferManager *g_pCommandBufferManager;
|
||||
|
||||
struct VulkanCommandLastUsage_t
|
||||
{
|
||||
uint32_t m_nLastUsedCommand;
|
||||
@@ -24,6 +21,7 @@ struct VulkanSwapchainCommandLastUsage_t
|
||||
class CVkCommandBuffer: public IVkCommandBuffer
|
||||
{
|
||||
public:
|
||||
virtual void SetVulkanHandlers( VkDevice hDevice, IVkCommandBufferManager *pManager ) override;
|
||||
virtual void AddCommand( CVkCommand *pCommand ) override;
|
||||
virtual void Reset() override;
|
||||
virtual void Submit( int iFrameIndex ) override;
|
||||
@@ -39,25 +37,34 @@ private:
|
||||
CUtlVector<CUtlVector<VulkanCommandLastUsage_t>> m_dependencies;
|
||||
CUtlVector<VulkanSwapchainCommandLastUsage_t> m_usedSwapchainDependencies;
|
||||
CUtlVector<CUtlVector<VulkanSwapchainCommandLastUsage_t>> m_swapchainDependencies;
|
||||
|
||||
VkDevice m_hDevice;
|
||||
IVkCommandBufferManager *m_pMgr;
|
||||
VkCommandPool m_hPool;
|
||||
};
|
||||
|
||||
void CVkCommandBuffer::SetVulkanHandlers( VkDevice hDevice, IVkCommandBufferManager *pManager )
|
||||
{
|
||||
m_hDevice = hDevice;
|
||||
m_pMgr = pManager;
|
||||
}
|
||||
|
||||
void CVkCommandBuffer::Reset()
|
||||
{
|
||||
VkCommandBufferAllocateInfo commandBufferAllocInfo = {};
|
||||
int i = 0;
|
||||
VkCommandPoolCreateInfo stCreateInfo = {};
|
||||
|
||||
stCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
stCreateInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
|
||||
vkCreateCommandPool(m_hDevice, &stCreateInfo, NULL, &m_hPool);
|
||||
m_hBuffers = {};
|
||||
m_hBuffers.Resize(g_vkCommandPools.GetSize());
|
||||
m_hBuffers.Resize(FRAMES_IN_FLIGHT);
|
||||
|
||||
for ( auto pool: g_vkCommandPools)
|
||||
{
|
||||
commandBufferAllocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
commandBufferAllocInfo.commandPool = pool;
|
||||
commandBufferAllocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
|
||||
commandBufferAllocInfo.commandBufferCount = 1;
|
||||
vkAllocateCommandBuffers(g_vkDevice, &commandBufferAllocInfo, &m_hBuffers[i]);
|
||||
i++;
|
||||
}
|
||||
commandBufferAllocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
commandBufferAllocInfo.commandPool = m_hPool;
|
||||
commandBufferAllocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
|
||||
commandBufferAllocInfo.commandBufferCount = FRAMES_IN_FLIGHT;
|
||||
vkAllocateCommandBuffers(m_hDevice, &commandBufferAllocInfo, m_hBuffers.GetData());
|
||||
|
||||
m_commands = {};
|
||||
}
|
||||
@@ -69,7 +76,7 @@ void CVkCommandBuffer::AddCommand( CVkCommand *pCommand )
|
||||
|
||||
void CVkCommandBuffer::Submit( int iFrameIndex )
|
||||
{
|
||||
g_vkCommandBuffers.AppendTail(m_hBuffers[iFrameIndex]);
|
||||
m_pMgr->GetVulkanCommands().AppendTail(m_hBuffers[iFrameIndex]);
|
||||
};
|
||||
|
||||
struct VulkanBarrierObjects_t
|
||||
@@ -332,8 +339,15 @@ class CVkCommandBufferManager: public IVkCommandBufferManager
|
||||
public:
|
||||
virtual void Init() override;
|
||||
virtual void Shutdown() override;
|
||||
virtual void SetVulkanHandlers( VkInstance hInstance, VkDevice hDevice ) override;
|
||||
virtual IVkCommandBuffer *CreateCommandBuffer() override;
|
||||
virtual CVkCommand *CreateCommand( const char *szName ) override;
|
||||
virtual CUtlVector<VkCommandBuffer> &GetVulkanCommands() override;
|
||||
virtual void RenderingFinished() override;
|
||||
private:
|
||||
|
||||
VkDevice m_hDevice;
|
||||
CUtlVector<VkCommandBuffer> m_commands;
|
||||
};
|
||||
|
||||
EXPOSE_INTERFACE(CVkCommandBufferManager, IVkCommandBufferManager, VULKAN_COMMAND_BUFFER_MANAGER_INTERFACE_NAME);
|
||||
@@ -348,9 +362,17 @@ void CVkCommandBufferManager::Shutdown()
|
||||
|
||||
}
|
||||
|
||||
void CVkCommandBufferManager::SetVulkanHandlers( VkInstance hInstance, VkDevice hDevice )
|
||||
{
|
||||
m_hDevice = hDevice;
|
||||
}
|
||||
|
||||
|
||||
IVkCommandBuffer *CVkCommandBufferManager::CreateCommandBuffer()
|
||||
{
|
||||
return new CVkCommandBuffer;
|
||||
IVkCommandBuffer *pBuffer = new CVkCommandBuffer;
|
||||
pBuffer->SetVulkanHandlers(m_hDevice, this);
|
||||
return pBuffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -373,6 +395,17 @@ CVkCommand *CVkCommandBufferManager::CreateCommand( const char *szName )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CUtlVector<VkCommandBuffer> &CVkCommandBufferManager::GetVulkanCommands()
|
||||
{
|
||||
return m_commands;
|
||||
}
|
||||
|
||||
void CVkCommandBufferManager::RenderingFinished()
|
||||
{
|
||||
m_commands = {};
|
||||
}
|
||||
|
||||
|
||||
CVkCommandRegistry::CVkCommandRegistry( const char *szName, fnCreateVulkanCommand_t pfnCreate )
|
||||
{
|
||||
VulkanCommandRegistry_t *pCommand = new VulkanCommandRegistry_t;
|
||||
|
||||
Reference in New Issue
Block a user