Integration Guide
Learn how to integrate GPULang into your game engine and optimize rendering performance
Overview
GPULang is designed from the ground up to make shader development more efficient and maintainable. This guide covers integration patterns, performance optimization, and best practices for using GPULang in real-time rendering applications.
Vulkan integration
struct Program
{
char* memory;
GPULang::Loader loader;
GPULang::VulkanPipelineInfo pipelineInfo;
};
//------------------------------------------------------------------------------
/**
*/
Program
LoadShader(char* fileBuffer, size_t fileBufferSize, VkDevice device, std::string shader)
{
GPULang::Loader loader;
loader.Load(fileBuffer, fileBufferSize);
auto prog = loader.Get("TestProgram");
GPULang::VulkanPipelineInfo vulkanPipeline = GPULang::SetupVulkan(
device
, prog
, loader.variables.data()
, loader.variables.size()
, GPULang::VulkanFunctions{ .vkCreateShaderModule = vkCreateShaderModule, .vkCreatePipelineLayout = vkCreatePipelineLayout, .vkCreateDescriptorSetLayout = vkCreateDescriptorSetLayout }
);
Program ret;
ret.pipelineInfo = vulkanPipeline;
ret.memory = buf;
ret.loader = loader;
return ret;
}
//------------------------------------------------------------------------------
/**
*/
void main()
{
... // Setup vulkan
Program computeProgram = LoadShader(device, "mycomputeshader.gplb");
VkComputePipelineCreateInfo cmpPsoInfo = GPULang::GetComputePipeline(computeProgram.pipelineInfo);
VkPipeline computePipeline;
VERIFY(vkCreateComputePipelines(device, VK_NULL_HANDLE, 1, &cmpPsoInfo, nullptr, &computePipeline));
}