@@ -125,14 +125,6 @@ vk::Extent2D GPUDisplayBackendVulkan::chooseSwapExtent(const vk::SurfaceCapabili
125125 }
126126}
127127
128- static vk::ShaderModule createShaderModule (const char * code, size_t size, vk::Device device)
129- {
130- vk::ShaderModuleCreateInfo createInfo{};
131- createInfo.codeSize = size;
132- createInfo.pCode = reinterpret_cast <const uint32_t *>(code);
133- return device.createShaderModule (createInfo, nullptr );
134- }
135-
136128static void cmdImageMemoryBarrier (vk::CommandBuffer cmdbuffer, vk::Image image, vk::PipelineStageFlags2 srcStageMask, vk::AccessFlags2 srcAccessMask, vk::PipelineStageFlags2 dstStageMask, vk::AccessFlags2 dstAccessMask, vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageAspectFlags aspect = vk::ImageAspectFlagBits::eColor)
137129{
138130 vk::ImageMemoryBarrier2 barrier{srcStageMask, srcAccessMask, dstStageMask, dstAccessMask, oldLayout, newLayout, VK_QUEUE_FAMILY_IGNORED , VK_QUEUE_FAMILY_IGNORED , image, {aspect, 0 , 1 , 0 , 1 }};
@@ -502,7 +494,7 @@ void GPUDisplayBackendVulkan::createDevice()
502494 auto & reqFeatures10 = reqDeviceFeatures.get <vk::PhysicalDeviceFeatures2>().features ;
503495 reqFeatures10.geometryShader = reqFeatures10.wideLines = reqFeatures10.largePoints = reqFeatures10.multiDrawIndirect = VK_TRUE ;
504496 reqDeviceFeatures.get <vk::PhysicalDeviceVulkan12Features>().timelineSemaphore = VK_TRUE ;
505- reqDeviceFeatures.get <vk::PhysicalDeviceVulkan14Features>().pushDescriptor = VK_TRUE ;
497+ reqDeviceFeatures.get <vk::PhysicalDeviceVulkan14Features>().pushDescriptor = reqDeviceFeatures. get <vk::PhysicalDeviceVulkan14Features>(). maintenance5 = VK_TRUE ;
506498 reqDeviceFeatures.get <vk::PhysicalDeviceVulkan13Features>().dynamicRendering = reqDeviceFeatures.get <vk::PhysicalDeviceVulkan13Features>().synchronization2 = VK_TRUE ;
507499 reqDeviceFeatures.get <vk::PhysicalDeviceVulkan13Features>().shaderDemoteToHelperInvocation = VK_TRUE ; // discard in SPIR-V 1.6
508500 reqDeviceFeatures.get <vk::PhysicalDeviceSwapchainMaintenance1FeaturesKHR>().swapchainMaintenance1 = VK_TRUE ;
@@ -913,11 +905,11 @@ void GPUDisplayBackendVulkan::createPipeline()
913905 vk::PipelineShaderStageCreateInfo shaderStages[2 ] = {vk::PipelineShaderStageCreateInfo{}, vk::PipelineShaderStageCreateInfo{}};
914906 vk::PipelineShaderStageCreateInfo& vertShaderStageInfo = shaderStages[0 ];
915907 vertShaderStageInfo.stage = vk::ShaderStageFlagBits::eVertex;
916- // vertShaderStageInfo.module // below
908+ // vertShaderStageInfo.pNext // below: SPIR-V
917909 vertShaderStageInfo.pName = " main" ;
918910 vk::PipelineShaderStageCreateInfo& fragShaderStageInfo = shaderStages[1 ];
919911 fragShaderStageInfo.stage = vk::ShaderStageFlagBits::eFragment;
920- // fragShaderStageInfo.module // below
912+ // fragShaderStageInfo.pNext // below: SPIR-V
921913 fragShaderStageInfo.pName = " main" ;
922914
923915 vk::VertexInputBindingDescription bindingDescription{};
@@ -1043,8 +1035,8 @@ void GPUDisplayBackendVulkan::createPipeline()
10431035 bindingDescription.stride = 4 * sizeof (float );
10441036 attributeDescriptions.format = vk::Format::eR32G32B32A32Sfloat;
10451037 inputAssembly.topology = vk::PrimitiveTopology::eTriangleList;
1046- vertShaderStageInfo.module = mShaders [ " vertexTexture" ] ;
1047- fragShaderStageInfo.module = mShaders [ " fragmentTexture" ] ;
1038+ vertShaderStageInfo.pNext = & mShaders . at ( " vertexTexture" ) ;
1039+ fragShaderStageInfo.pNext = & mShaders . at ( " fragmentTexture" ) ;
10481040 dynamicState.dynamicStateCount = 2 ;
10491041 pipelineInfo.layout = mPipelineLayoutTexture ;
10501042 renderingInfo.depthAttachmentFormat = vk::Format::eUndefined;
@@ -1056,8 +1048,8 @@ void GPUDisplayBackendVulkan::createPipeline()
10561048 bindingDescription.stride = 4 * sizeof (float );
10571049 attributeDescriptions.format = vk::Format::eR32G32B32A32Sfloat;
10581050 inputAssembly.topology = vk::PrimitiveTopology::eTriangleList;
1059- vertShaderStageInfo.module = mShaders [ " vertexTexture" ] ;
1060- fragShaderStageInfo.module = mShaders [ " fragmentText" ] ;
1051+ vertShaderStageInfo.pNext = & mShaders . at ( " vertexTexture" ) ;
1052+ fragShaderStageInfo.pNext = & mShaders . at ( " fragmentText" ) ;
10611053 dynamicState.dynamicStateCount = 2 ;
10621054 pipelineInfo.layout = mPipelineLayoutTexture ;
10631055 renderingInfo.depthAttachmentFormat = vk::Format::eUndefined;
@@ -1070,8 +1062,8 @@ void GPUDisplayBackendVulkan::createPipeline()
10701062 const uint32_t drawIdx = i >= 5 ? i - 5 : i;
10711063 inputAssembly.topology = types[drawIdx];
10721064 rasterizer.pNext = mSmoothLines && (i == 1 || i == 2 ) ? &smoothLineState : nullptr ;
1073- vertShaderStageInfo.module = mShaders [ i < 5 ? (drawIdx == 0 ? " vertexPoint" : " vertex" ) : (drawIdx == 0 ? " vertexSmoothPoint" : " vertexSmoothLine" )] ;
1074- fragShaderStageInfo.module = mShaders [ i < 5 ? " fragment" : (drawIdx == 0 ? " fragmentSmoothPoint" : " fragmentSmoothLine" )] ;
1065+ vertShaderStageInfo.pNext = & mShaders . at ( i < 5 ? (drawIdx == 0 ? " vertexPoint" : " vertex" ) : (drawIdx == 0 ? " vertexSmoothPoint" : " vertexSmoothLine" )) ;
1066+ fragShaderStageInfo.pNext = & mShaders . at ( i < 5 ? " fragment" : (drawIdx == 0 ? " fragmentSmoothPoint" : " fragmentSmoothLine" )) ;
10751067 pipelineInfo.layout = mPipelineLayout ;
10761068 renderingInfo.depthAttachmentFormat = mZActive ? vk::Format::eD32Sfloat : vk::Format::eUndefined;
10771069 pipelineInfo.pDepthStencilState = mZActive ? &depthStencil : nullptr ;
@@ -1142,9 +1134,9 @@ void GPUDisplayBackendVulkan::clearPipeline()
11421134// ---------------------------- VULKAN SHADERS ----------------------------
11431135
11441136#define LOAD_SHADER (file, ext ) \
1145- mShaders [#file] = createShaderModule( _binary_vulkan_##file##_##ext##_spv_start, _binary_vulkan_##file##_##ext##_spv_len, mDevice )
1137+ mShaders [#file] = vk::ShaderModuleCreateInfo { {}, _binary_vulkan_##file##_##ext##_spv_len, reinterpret_cast < const uint32_t *>( _binary_vulkan_##file##_##ext##_spv_start) }
11461138
1147- void GPUDisplayBackendVulkan::createShaders ()
1139+ void GPUDisplayBackendVulkan::loadShaders ()
11481140{
11491141 LOAD_SHADER (vertex, vert);
11501142 LOAD_SHADER (fragment, frag);
@@ -1158,11 +1150,6 @@ void GPUDisplayBackendVulkan::createShaders()
11581150 LOAD_SHADER (fragmentText, frag);
11591151}
11601152
1161- void GPUDisplayBackendVulkan::clearShaders ()
1162- {
1163- clearVector (mShaders , [&](auto & x) { mDevice .destroyShaderModule (x.second , nullptr ); });
1164- }
1165-
11661153// ---------------------------- VULKAN BUFFERS ----------------------------
11671154
11681155void GPUDisplayBackendVulkan::writeToBuffer (VulkanBuffer& buffer, size_t size, const void * srcData)
@@ -1299,7 +1286,7 @@ int32_t GPUDisplayBackendVulkan::InitBackendA()
12991286 mFramesInFlight = mDisplay ->cfg ().vulkan .nFramesInFlight ;
13001287
13011288 createDevice ();
1302- createShaders ();
1289+ loadShaders ();
13031290 createTextureSampler ();
13041291 createSwapChain ();
13051292 createOffscreenBuffers ();
@@ -1325,7 +1312,6 @@ void GPUDisplayBackendVulkan::ExitBackendA()
13251312 clearUniformLayoutsAndBuffers ();
13261313 }
13271314 clearTextureSampler ();
1328- clearShaders ();
13291315 clearDevice ();
13301316}
13311317
0 commit comments