android port

This commit is contained in:
2026-08-28 21:23:08 +03:00
parent aaf298d8cc
commit eef7d2b046
41 changed files with 1428 additions and 142 deletions
+7
View File
@@ -23,6 +23,9 @@ DECLARE_VULKAN_COMMAND(Begin)
{
if (vkCmdBeginRendering || vkCmdBeginRenderingKHR)
{
V_printf("USING DYNAMIC RENDERING\n");
V_printf("%p\n", vkCmdBeginRendering);
V_printf("%p\n", vkCmdBeginRenderingKHR);
VkRenderingInfo stRenderingInfo = {};
CUtlVector<VkRenderingAttachmentInfo> attachments = {};
VkRenderingAttachmentInfo depthAttachment = {};
@@ -75,6 +78,7 @@ DECLARE_VULKAN_COMMAND(Begin)
}
else
{
V_printf("USING RENDERPASS");
CUtlVector<VkAttachmentDescription> attachments = {};
CUtlVector<VkAttachmentReference> input_refs = {};
CUtlVector<VkImageView> image_views = {};
@@ -184,7 +188,10 @@ DECLARE_VULKAN_COMMAND(End)
else if (vkCmdEndRenderingKHR)
vkCmdEndRenderingKHR(hCommandBuffer);
else
{
vkCmdEndRenderPass(hCommandBuffer);
}
}
DECLARE_VULKAN_COMMAND(SetShader)
+8 -1
View File
@@ -8,6 +8,7 @@ void CVkComputeShader::Build()
VulkanInputMetaData_t *pMetaData = (VulkanInputMetaData_t*)m_shader.GetLumpPtr(s->m_nMetadataLump);
VkPipelineLayoutCreateInfo stPipelineLayout = {};
CUtlVector<CUtlVector<VkDescriptorSetLayoutBinding>> bindings = {};
VkShaderModule sm;
for ( int u = 0; u < pMetaData->nDescriptorsCount; u++ )
{
@@ -45,8 +46,14 @@ void CVkComputeShader::Build()
mod.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
mod.pCode = (uint32_t*)m_shader.GetLumpPtr(s->m_nDataLump);
mod.codeSize = m_shader.GetLumpSize(s->m_nDataLump);
if (g_vkAvailableExtensions.bIsSupported_VK_KHR_MAINTENANCE_5)
stage.pNext = &mod;
else
{
vkCreateShaderModule(m_hDevice, &mod, NULL, &sm);
stage.module = sm;
}
stage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
stage.pNext = &mod;
stage.pName = "main";
stage.stage = VK_SHADER_STAGE_COMPUTE_BIT;
+1 -1
View File
@@ -6,6 +6,7 @@ REQUIRED_EXTENSION(VK_EXT_DESCRIPTOR_INDEXING)
REQUIRED_EXTENSION(VK_KHR_TIMELINE_SEMAPHORE )
REQUIRED_EXTENSION(VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS)
OPTIONAL_EXTENSION(VK_KHR_RAY_TRACING_PIPELINE)
OPTIONAL_EXTENSION(VK_KHR_CREATE_RENDERPASS_2)
OPTIONAL_EXTENSION(VK_KHR_ACCELERATION_STRUCTURE)
OPTIONAL_EXTENSION(VK_KHR_DEFERRED_HOST_OPERATIONS)
OPTIONAL_EXTENSION(VK_KHR_BUFFER_DEVICE_ADDRESS)
@@ -14,4 +15,3 @@ OPTIONAL_EXTENSION(VK_KHR_MAINTENANCE_5)
//OPTIONAL_EXTENSION(VK_KHR_DYNAMIC_RENDERING)
//OPTIONAL_EXTENSION(VK_KHR_SYNCHRONIZATION2)
//OPTIONAL_EXTENSION(VK_KHR_COPY_COMMANDS2)
//OPTIONAL_EXTENSION(VK_KHR_DYNAMIC_RENDERING)
@@ -42,6 +42,7 @@ void CVkRenderCommandList::Begin( BeginInfo *pBegin )
output.m_eLoadMode = pBegin->pDepth->eLoadMode;
output.m_eStoreMode = pBegin->pDepth->eStoreMode;
pBeginCommand->stDepthImage = output;
pBeginCommand->bDepthEnabled = true;
}
m_pCurrentBegin = pBeginCommand;
m_pCommandBuffer->AddCommand(pBeginCommand);
+9 -9
View File
@@ -228,7 +228,7 @@ void CVkImage::SetDebugName( const char *szName )
nameInfo.objectHandle = (uint64_t)m_image;
nameInfo.pObjectName = szName;
vkSetDebugUtilsObjectNameEXT(s_vkDevice, &nameInfo);
//vkSetDebugUtilsObjectNameEXT(s_vkDevice, &nameInfo);
}
@@ -807,7 +807,7 @@ void CVkRenderContext::Init()
stInstanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
stInstanceCreateInfo.pApplicationInfo = &stApplicationInfo;
enabledInstanceExtensions.AppendTail(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
enabledInstanceExtensions.AppendTail(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
//enabledInstanceExtensions.AppendTail(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
stInstanceCreateInfo.enabledExtensionCount = enabledInstanceExtensions.GetSize();
stInstanceCreateInfo.ppEnabledExtensionNames = enabledInstanceExtensions.GetData();
@@ -898,12 +898,14 @@ void CVkRenderContext::Init()
vkGetDeviceQueue(s_vkDevice, g_iDrawFamily, 0, &s_vkDrawQueue);
vkGetDeviceQueue(s_vkDevice, g_iPresentFamily, 0, &s_vkPresentQueue);
volkLoadDevice(s_vkDevice);
vkCmdBeginRendering = NULL;
vkCmdEndRendering = NULL;
VmaAllocatorCreateInfo stAllocatorInfo = {};
stAllocatorInfo.flags = VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT
| VMA_ALLOCATOR_CREATE_KHR_MAINTENANCE5_BIT
;
stAllocatorInfo.vulkanApiVersion = VK_API_VERSION_1_4;
stAllocatorInfo.flags = VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT;
if (g_vkAvailableExtensions.bIsSupported_VK_KHR_MAINTENANCE_5)
stAllocatorInfo.flags |= VMA_ALLOCATOR_CREATE_KHR_MAINTENANCE5_BIT;
stAllocatorInfo.vulkanApiVersion = VK_API_VERSION_1_1;
stAllocatorInfo.physicalDevice = s_vkPhysicalDevice;
stAllocatorInfo.device = s_vkDevice;
stAllocatorInfo.instance = s_vkInstance;
@@ -946,7 +948,6 @@ void CVkRenderContext::Frame( float fDeltaTime )
{
uint32_t i;
CUtlVector<VkSwapchainKHR> swapchains = {};
CUtlVector<uint32_t> uImageIndexes = {};
CUtlVector<uint32_t> uSwapchainImageIndexes = {};
CUtlVector<VulkanWindow_t> recreatedWindows = {};
@@ -975,7 +976,6 @@ void CVkRenderContext::Frame( float fDeltaTime )
for ( auto &s: m_renderWindows)
{
swapchains.AppendTail(s.m_swapchain);
uImageIndexes.AppendTail(s.m_uCurrentFrame);
}
uSwapchainImageIndexes.Resize(m_renderWindows.GetSize());
@@ -1092,7 +1092,7 @@ void CVkRenderContext::Frame( float fDeltaTime )
stPresentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
stPresentInfo.swapchainCount = swapchains.GetSize();
stPresentInfo.pSwapchains = swapchains.GetData();
stPresentInfo.pImageIndices = uImageIndexes.GetData();
stPresentInfo.pImageIndices = uSwapchainImageIndexes.GetData();
vkQueuePresentKHR(s_vkPresentQueue, &stPresentInfo);
vkDeviceWaitIdle(s_vkDevice);
+3 -3
View File
@@ -298,9 +298,9 @@ void CVkShaderLinker::Build()
m_out.m_data = spv.data;
m_out.m_size = spv.count;
IFileHandle *ph = filesystem->Open("a.txt", FILEMODE_WRITE);
filesystem->Write(ph, spv.data, spv.count*4);
filesystem->Close(ph);
//IFileHandle *ph = filesystem->Open("a.txt", FILEMODE_WRITE);
//filesystem->Write(ph, spv.data, spv.count*4);
//filesystem->Close(ph);
mspv_array_destroy(spv);
+13 -1
View File
@@ -70,6 +70,7 @@ void CVkShader::Build()
VkGraphicsPipelineCreateInfo createInfo = {};
CUtlVector<VkPipelineShaderStageCreateInfo> stages = {};
CUtlVector<VkShaderModuleCreateInfo> modules = {};
CUtlVector<VkShaderModule> sms = {};
VkPipelineVertexInputStateCreateInfo vertexInput = {};
VkPipelineInputAssemblyStateCreateInfo inputAssembly = {};
VkPipelineDynamicStateCreateInfo dynamicState = {};
@@ -91,6 +92,7 @@ void CVkShader::Build()
// TODO: Filter by vulkan shaders at some points
stages.Resize(m_shader.m_objects.GetSize());
modules.Resize(m_shader.m_objects.GetSize());
sms.Resize(m_shader.m_objects.GetSize());
for ( int i = 0; i < m_shader.m_objects.GetSize(); i++ )
{
VulkanInputMetaData_t *pMetaData = (VulkanInputMetaData_t*)m_shader.GetLumpPtr(m_shader.m_objects[i].m_nMetadataLump);
@@ -127,11 +129,21 @@ void CVkShader::Build()
bindings[stDescriptor.uSet].AppendTail(bind);
m_bindings.AppendTail(stDescriptor);
}
modules[i] = {};
modules[i].sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
modules[i].pCode = (uint32_t*)m_shader.GetLumpPtr(m_shader.m_objects[i].m_nDataLump);
modules[i].codeSize = m_shader.GetLumpSize(m_shader.m_objects[i].m_nDataLump);
if (!g_vkAvailableExtensions.bIsSupported_VK_KHR_MAINTENANCE_5)
{
VkResult r = vkCreateShaderModule(m_hDevice, &modules[i], NULL, &sms[i]);
VULKAN_RESULT_PRINT(r, vkCreateShaderModule);
}
stages[i] = {};
stages[i].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
stages[i].pNext = &modules[i];
if (g_vkAvailableExtensions.bIsSupported_VK_KHR_MAINTENANCE_5)
stages[i].pNext = &modules[i];
else
stages[i].module = sms[i];
stages[i].pName = "main";
stages[i].stage = VulkanGetShaderStage(m_shader.m_objects[i].m_eStage);
}