metal clear swapchain with blue
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user