added barriers, started working on libraries
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include "vulkan/vulkan_core.h"
|
||||
#include "vulkan_state.h"
|
||||
#include "igamewindow.h"
|
||||
#include "raster_libraries.h"
|
||||
|
||||
|
||||
#define REQUIRED_EXTENSION(ext) ext##_EXTENSION_NAME,
|
||||
@@ -126,6 +127,7 @@ void CVkImage::CreateImageView()
|
||||
stImageViewCreateInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
stImageViewCreateInfo.subresourceRange.layerCount = 1;
|
||||
stImageViewCreateInfo.subresourceRange.levelCount = 1;
|
||||
m_range = stImageViewCreateInfo.subresourceRange;
|
||||
vkCreateImageView(g_vkDevice, &stImageViewCreateInfo, NULL, &m_imageView);
|
||||
}
|
||||
void CVkImage::SetDebugName( const char *szName )
|
||||
@@ -155,25 +157,6 @@ EMultisampleType CVkImage::GetMultisampleType()
|
||||
}
|
||||
|
||||
|
||||
class CVkBuffer: public IBuffer
|
||||
{
|
||||
public:
|
||||
CVkBuffer( uint32_t nSize, VkBufferUsageFlags2 eUsage, uint32_t nAlignment );
|
||||
~CVkBuffer();
|
||||
|
||||
virtual void SetDebugName( const char *szName ) override;
|
||||
virtual void Lock() override;
|
||||
virtual void Unlock() override;
|
||||
virtual void *Map() override;
|
||||
virtual void Unmap() override;
|
||||
virtual uint32_t GetSize() override;
|
||||
|
||||
VmaAllocation allocation;
|
||||
VkBuffer buffer;
|
||||
VkDeviceAddress address;
|
||||
uint32_t nSize;
|
||||
};
|
||||
|
||||
CVkBuffer::CVkBuffer( uint32_t nSize, VkBufferUsageFlags2 eUsage, uint32_t nAlignment )
|
||||
{
|
||||
}
|
||||
@@ -360,8 +343,7 @@ void CVkRenderContext::DrawPrimitivesIndexed( uint32_t nIndexCount, uint32_t nFi
|
||||
}
|
||||
|
||||
IVkCommandBuffer *pCommandBuffer;
|
||||
IVkCommandBuffer *s_pPresentCommandBuffer;
|
||||
IImage *pCurrentImage;
|
||||
static IVkCommandBuffer *s_pPresentCommandBuffer;
|
||||
void CVkRenderContext::Init()
|
||||
{
|
||||
VkResult r;
|
||||
@@ -448,11 +430,16 @@ void CVkRenderContext::Init()
|
||||
stDeviceQueueCreateInfo.pQueuePriorities = &fPriority;
|
||||
stDeviceQueueCreateInfo.queueFamilyIndex = g_iDrawFamily;
|
||||
|
||||
VkPhysicalDeviceVulkan13Features vk13Features = {};
|
||||
vk13Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
|
||||
vk13Features.synchronization2 = VK_TRUE;
|
||||
|
||||
stDeviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
stDeviceCreateInfo.queueCreateInfoCount = 1;
|
||||
stDeviceCreateInfo.pQueueCreateInfos = &stDeviceQueueCreateInfo;
|
||||
stDeviceCreateInfo.enabledExtensionCount = enabledDeviceExtensions.GetSize();
|
||||
stDeviceCreateInfo.ppEnabledExtensionNames = enabledDeviceExtensions.GetData();
|
||||
stDeviceCreateInfo.pNext = &vk13Features;
|
||||
r = vkCreateDevice(g_vkPhysicalDevice, &stDeviceCreateInfo, NULL, &g_vkDevice);
|
||||
VULKAN_RESULT_PRINT(r, vkEnumeratePhysicalDevices);
|
||||
for (auto &extension: enabledDeviceExtensions)
|
||||
@@ -477,21 +464,44 @@ void CVkRenderContext::Init()
|
||||
g_pCommandBufferManager->Init();
|
||||
|
||||
pCommandBuffer = g_pCommandBufferManager->CreateCommandBuffer();
|
||||
s_pPresentCommandBuffer = g_pCommandBufferManager->CreateCommandBuffer();
|
||||
|
||||
CVkClearColorCommand *pCommand = (CVkClearColorCommand*)g_pCommandBufferManager->CreateCommand("ClearColor");
|
||||
|
||||
pCommand->pImage = NULL;
|
||||
pCommand->ppSwapchainImages = g_vkSwapchainImages.GetData();
|
||||
pCommand->r = 1;
|
||||
pCommand->b = 1;
|
||||
pCommand->g = 0;
|
||||
pCommand->AddSwapchainDependency( (IRenderingObject**)g_vkSwapchainImages.GetData(), DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION );
|
||||
|
||||
CVkFunctionsPipelineLibrary functions = {};
|
||||
functions.SetVertex("funnygame/shaders/flat.spv", "vsMain");
|
||||
functions.SetPixel("funnygame/shaders/flat.spv", "psMain");
|
||||
functions.Build();
|
||||
|
||||
CVkEmptyCommand *pPresentCommand = (CVkEmptyCommand*)g_pCommandBufferManager->CreateCommand("Empty");
|
||||
pPresentCommand->AddSwapchainDependency( (IRenderingObject**)g_vkSwapchainImages.GetData(), DEPENDENCY_MODE_IMAGE_PRESENT );
|
||||
|
||||
CVkBeginCommand *pBeginCommand = (CVkBeginCommand*)g_pCommandBufferManager->CreateCommand("Empty");
|
||||
pBeginCommand->AddSwapchainDependency((IRenderingObject**)g_vkSwapchainImages.GetData(), DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE);
|
||||
CVkBeginCommand *pEndCommand = (CVkBeginCommand*)g_pCommandBufferManager->CreateCommand("Empty");
|
||||
|
||||
pCommandBuffer->Reset();
|
||||
pCommandBuffer->AddCommand(pCommand);
|
||||
pCommandBuffer->Render();
|
||||
|
||||
s_pPresentCommandBuffer->Reset();
|
||||
s_pPresentCommandBuffer->AddCommand(pPresentCommand);
|
||||
s_pPresentCommandBuffer->Render();
|
||||
}
|
||||
|
||||
void CVkRenderContext::Frame( float fDeltaTime )
|
||||
{
|
||||
vkDeviceWaitIdle(g_vkDevice);
|
||||
pCommandBuffer->Render();
|
||||
s_pPresentCommandBuffer->Render();
|
||||
|
||||
static uint32_t s_nImageIndex = 0;
|
||||
uint32_t nImageIndex = 0;
|
||||
|
||||
@@ -499,6 +509,11 @@ void CVkRenderContext::Frame( float fDeltaTime )
|
||||
VkResult r = vkAcquireNextImageKHR(g_vkDevice, g_vkSwapchain, UINT64_MAX, g_vkGraphicsSemaphores[s_nImageIndex], NULL, &nImageIndex);
|
||||
|
||||
vkResetFences(g_vkDevice, 1, &g_vkFences[s_nImageIndex]);
|
||||
|
||||
g_vkCommandBuffers = {};
|
||||
|
||||
pCommandBuffer->Submit(nImageIndex);
|
||||
s_pPresentCommandBuffer->Submit(nImageIndex);
|
||||
|
||||
VkPipelineStageFlags uPipelineStageFlags = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
VkSubmitInfo stSubmitInfo = {};
|
||||
@@ -506,10 +521,6 @@ void CVkRenderContext::Frame( float fDeltaTime )
|
||||
stSubmitInfo.waitSemaphoreCount = 1;
|
||||
stSubmitInfo.pWaitSemaphores = &g_vkGraphicsSemaphores[s_nImageIndex];
|
||||
stSubmitInfo.pWaitDstStageMask = &uPipelineStageFlags;
|
||||
|
||||
pCurrentImage = g_vkSwapchainImages[nImageIndex];
|
||||
g_vkCommandBuffers = {};
|
||||
pCommandBuffer->Submit(nImageIndex);
|
||||
|
||||
stSubmitInfo.commandBufferCount = g_vkCommandBuffers.GetSize();
|
||||
stSubmitInfo.pCommandBuffers = g_vkCommandBuffers.GetData();
|
||||
|
||||
Reference in New Issue
Block a user