metal clear swapchain with blue

This commit is contained in:
2025-06-29 22:40:43 +03:00
parent b8e78174ad
commit 99eafb9443
13 changed files with 343 additions and 136 deletions

View File

@@ -65,6 +65,35 @@ VkFormat IRenderer_FormatToVk( EImageFormat format )
}
};
VkFormat IRenderer_VertexToVk( EVertexFormat format )
{
switch (format)
{
case VERTEX_FORMAT_X16: return VK_FORMAT_R16_SFLOAT;
case VERTEX_FORMAT_X16Y16: return VK_FORMAT_R16G16_SFLOAT;
case VERTEX_FORMAT_X16Y16Z16: return VK_FORMAT_R16G16B16_SFLOAT;
case VERTEX_FORMAT_X16Y16Z16W16: return VK_FORMAT_R16G16B16A16_SFLOAT;
case VERTEX_FORMAT_X32: return VK_FORMAT_R32_SFLOAT;
case VERTEX_FORMAT_X32Y32: return VK_FORMAT_R32G32_SFLOAT;
case VERTEX_FORMAT_X32Y32Z32: return VK_FORMAT_R32G32B32_SFLOAT;
case VERTEX_FORMAT_X32Y32Z32W32: return VK_FORMAT_R32G32B32A32_SFLOAT;
}
};
uint32_t IRenderer_VertexToSize( EVertexFormat format )
{
switch (format)
{
case VERTEX_FORMAT_X16: return 2;
case VERTEX_FORMAT_X16Y16: return 4;
case VERTEX_FORMAT_X16Y16Z16: return 6;
case VERTEX_FORMAT_X16Y16Z16W16: return 8;
case VERTEX_FORMAT_X32: return 4;
case VERTEX_FORMAT_X32Y32: return 8;
case VERTEX_FORMAT_X32Y32Z32: return 12;
case VERTEX_FORMAT_X32Y32Z32W32: return 16;
}
}
VkAttachmentLoadOp IRenderer_LoadOpVk( EAttachmentLoadMode mode )
{
switch (mode)
@@ -228,11 +257,13 @@ void vk_shader_t::Destroy( void )
void vk_tripipeline_t::Create(
CUtlVector<vk_shader_t> &shaders,
CUtlVector<VkDescriptorSetLayoutBinding> &bindings,
uint32_t pushConstantSize,
CUtlVector<VkFormat> formats
)
CUtlVector<vk_shader_t> &shaders,
CUtlVector<VkDescriptorSetLayoutBinding> &bindings,
uint32_t pushConstantSize,
uint32_t nVertexSize,
CUtlVector<VertexAttribute_t> vertexFormat,
CUtlVector<VkFormat> formats
)
{
VkPushConstantRange pushConstantRange = {};
pushConstantRange.stageFlags = VK_SHADER_STAGE_ALL;
@@ -295,11 +326,32 @@ void vk_tripipeline_t::Create(
VK_DYNAMIC_STATE_BLEND_CONSTANTS,
};
VkVertexInputBindingDescription vibd = {
.binding = 0,
.stride = nVertexSize,
.inputRate = VK_VERTEX_INPUT_RATE_VERTEX,
};
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo = {
.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
.dynamicStateCount = sizeof(dynamicStates)/sizeof(VkDynamicState),
.pDynamicStates = dynamicStates,
};
CUtlVector<VkVertexInputAttributeDescription> viad(vertexFormat.GetSize());
for ( uint32_t i = 0; i < viad.GetSize(); i++ )
{
viad[i].location = 0;
viad[i].binding = vertexFormat[i].binding;
viad[i].format = IRenderer_VertexToVk(vertexFormat[i].format);
viad[i].offset = vertexFormat[i].offset;
}
VkPipelineVertexInputStateCreateInfo pvisci = {
.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
.vertexBindingDescriptionCount = 1,
.pVertexBindingDescriptions = &vibd,
.vertexAttributeDescriptionCount = (uint32_t)vertexFormat.GetSize(),
};
VkPipelineInputAssemblyStateCreateInfo piasci = {
.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
@@ -318,6 +370,7 @@ void vk_tripipeline_t::Create(
VkGraphicsPipelineCreateInfo graphicsPipelineCreateInfo = {};
graphicsPipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
graphicsPipelineCreateInfo.pVertexInputState = &pvisci;
graphicsPipelineCreateInfo.pInputAssemblyState = &piasci;
graphicsPipelineCreateInfo.layout = m_layout;
graphicsPipelineCreateInfo.pDynamicState = &pipelineDynamicStateCreateInfo;
@@ -808,6 +861,8 @@ IGraphicsPipeline *IRenderer::CreateGraphicsPipeline(
CUtlVector<Shader_t> shaders,
CUtlVector<ShaderInput_t> inputs,
uint32_t nConstantsSize,
uint32_t nVertexSize,
CUtlVector<VertexAttribute_t> vertexFormats,
CUtlVector<EImageFormat> outputFormats
)
{
@@ -816,6 +871,7 @@ IGraphicsPipeline *IRenderer::CreateGraphicsPipeline(
CUtlVector<vk_shader_t> vkshaders(shaders.GetSize());
CUtlVector<VkDescriptorSetLayoutBinding> vkbindings(inputs.GetSize());
CUtlVector<VkFormat> vkformats(outputFormats.GetSize());
CUtlVector<VkVertexInputAttributeDescription> vkVertexFormats(vertexFormats.GetSize());
for ( uint32_t i = 0; i < vkshaders.GetSize(); i++ )
{
@@ -842,8 +898,9 @@ IGraphicsPipeline *IRenderer::CreateGraphicsPipeline(
{
vkformats[i] = IRenderer_FormatToVk(outputFormats[i]);
}
pipeline->m_pipeline.Create(vkshaders, vkbindings, nConstantsSize, vkformats);
return 0;
pipeline->m_pipeline.Create(vkshaders, vkbindings, nConstantsSize, nVertexSize, vertexFormats, vkformats);
return pipeline;
};