render pass first work

This commit is contained in:
2026-08-26 21:07:12 +03:00
parent 8055881fef
commit a6818a6cf4
18 changed files with 342 additions and 84 deletions
+20 -4
View File
@@ -276,7 +276,9 @@ CVkBuffer::CVkBuffer( uint32_t nSize, VkBufferUsageFlags2 eUsage, uint32_t nAlig
stBufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
stBufferInfo.size = nSize;
stBufferInfo.pNext = &stUsage;
stBufferInfo.usage = stUsage.usage;
if (g_vkAvailableExtensions.bIsSupported_VK_KHR_MAINTENANCE_5)
stBufferInfo.pNext = &stUsage;
stAllocInfo.usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
stAllocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT;
@@ -286,7 +288,12 @@ CVkBuffer::CVkBuffer( uint32_t nSize, VkBufferUsageFlags2 eUsage, uint32_t nAlig
stAddress.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO;
stAddress.buffer = m_buffer;
m_address = vkGetBufferDeviceAddress(s_vkDevice, &stAddress);
if (vkGetBufferDeviceAddress)
m_address = vkGetBufferDeviceAddress(s_vkDevice, &stAddress);
else if (vkGetBufferDeviceAddressEXT)
m_address = vkGetBufferDeviceAddressEXT(s_vkDevice, &stAddress);
else if (vkGetBufferDeviceAddressKHR)
m_address = vkGetBufferDeviceAddressKHR(s_vkDevice, &stAddress);
m_nSize = nSize;
}
@@ -411,7 +418,7 @@ uint32_t CVkTextureArray::CreateTexture( uint32_t i, const char *szPath )
pBuffer->Unmap();
pBuffer->Unlock();
vkDeviceWaitIdle(s_vkDevice);
IImage *pImage = m_pRenderContext->CreateTexture(uWidth, uHeight, IMAGE_FORMAT_RGBA8_UNORM, MULTISAMPLE_TYPE_NONE);
IImage *pImage = m_pRenderContext->CreateTexture(uWidth, uHeight, IMAGE_FORMAT_RGBA8_UNORM, MULTISAMPLE_TYPE_1_SAMPLES);
m_pImages[i] = (CVkImage*)pImage;
stbi_image_free(pImg);
@@ -872,6 +879,10 @@ void CVkRenderContext::Init()
vk11Features.shaderDrawParameters = VK_TRUE;
vk11Features.multiview = VK_TRUE;
VkPhysicalDeviceFeatures features = {};
features.shaderStorageImageReadWithoutFormat = VK_TRUE;
features.shaderStorageImageWriteWithoutFormat = VK_TRUE;
stDeviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
stDeviceCreateInfo.queueCreateInfoCount = 1;
@@ -879,6 +890,7 @@ void CVkRenderContext::Init()
stDeviceCreateInfo.enabledExtensionCount = enabledDeviceExtensions.GetSize();
stDeviceCreateInfo.ppEnabledExtensionNames = enabledDeviceExtensions.GetData();
stDeviceCreateInfo.pNext = &vk11Features;
stDeviceCreateInfo.pEnabledFeatures = &features;
r = vkCreateDevice(s_vkPhysicalDevice, &stDeviceCreateInfo, NULL, &s_vkDevice);
VULKAN_RESULT_PRINT(r, vkEnumeratePhysicalDevices);
for (auto &extension: enabledDeviceExtensions)
@@ -994,6 +1006,7 @@ void CVkRenderContext::Frame( float fDeltaTime )
{
CVkBlitCommand *pBlitCommand = NULL;
if (s.m_pWindow->GetOutputImage())
{
@@ -1070,7 +1083,10 @@ void CVkRenderContext::Frame( float fDeltaTime )
wi.semaphoreCount = 1;
wi.pSemaphores = &semaphore;
wi.pValues = &v;
vkWaitSemaphores(s_vkDevice, &wi, UINT64_MAX);
if (vkWaitSemaphores)
vkWaitSemaphores(s_vkDevice, &wi, UINT64_MAX);
else
vkWaitSemaphoresKHR(s_vkDevice, &wi, UINT64_MAX);
VkPresentInfoKHR stPresentInfo = {};
stPresentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;