@@ -1611,9 +1611,9 @@ PVK_STATIC PVK_INLINE PVK_CONSTEXPR VkVertexInputAttributeDescription __pvkGetVe
1611
1611
return dsc;
1612
1612
}
1613
1613
1614
- PVK_LINKAGE VkPipeline __pvkCreateGraphicsPipeline (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t subpassIndex, uint32_t width, uint32_t height, VkPipelineColorBlendStateCreateInfo* colorBlend, bool enableDepth, uint32_t count, va_list args);
1614
+ PVK_LINKAGE VkPipeline __pvkCreateGraphicsPipeline (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t subpassIndex, uint32_t width, uint32_t height, uint32_t vertInputBindCount, VkVertexInputBindingDescription* vertexBindingDescriptions, uint32_t vertInputAttrCount, VkVertexInputAttributeDescription* vertexAttributeDescriptions, VkPipelineColorBlendStateCreateInfo* colorBlend, bool enableDepth, uint32_t count, va_list args);
1615
1615
#ifdef PVK_IMPLEMENTATION
1616
- PVK_LINKAGE VkPipeline __pvkCreateGraphicsPipeline (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t subpassIndex, uint32_t width, uint32_t height, VkPipelineColorBlendStateCreateInfo* colorBlend, bool enableDepth, uint32_t count, va_list args)
1616
+ PVK_LINKAGE VkPipeline __pvkCreateGraphicsPipeline (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t subpassIndex, uint32_t width, uint32_t height, uint32_t vertInputBindCount, VkVertexInputBindingDescription* vertexBindingDescriptions, uint32_t vertInputAttrCount, VkVertexInputAttributeDescription* vertexAttributeDescriptions, VkPipelineColorBlendStateCreateInfo* colorBlend, bool enableDepth, uint32_t count, va_list args)
1617
1617
{
1618
1618
/* Shader modules */
1619
1619
PvkShader shaderModules[count];
@@ -1622,24 +1622,12 @@ PVK_LINKAGE VkPipeline __pvkCreateGraphicsPipeline(VkDevice device, VkPipelineLa
1622
1622
VkPipelineShaderStageCreateInfo* stageCInfos = __pvkCreatePipelineShaderStageCreateInfos (count, shaderModules);
1623
1623
1624
1624
/* Vertex buffer layouts and their description */
1625
- VkVertexInputBindingDescription vertexBindingDescription = { };
1626
- {
1627
- vertexBindingDescription.binding = 0 ;
1628
- vertexBindingDescription.stride = PVK_VERTEX_SIZE;
1629
- vertexBindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
1630
- };
1631
- VkVertexInputAttributeDescription* vertexAttributeDescriptions = PVK_NEWV (VkVertexInputAttributeDescription, PVK_VERTEX_ATTRIBUTE_COUNT);
1632
- vertexAttributeDescriptions[0 ] = __pvkGetVertexInputAttributeDescription (0 , 0 , VK_FORMAT_R32G32B32_SFLOAT, PVK_VERTEX_POSITION_OFFSET);
1633
- vertexAttributeDescriptions[1 ] = __pvkGetVertexInputAttributeDescription (0 , 1 , VK_FORMAT_R32G32B32_SFLOAT, PVK_VERTEX_NORMAL_OFFSET);
1634
- vertexAttributeDescriptions[2 ] = __pvkGetVertexInputAttributeDescription (0 , 2 , VK_FORMAT_R32G32_SFLOAT, PVK_VERTEX_TEXCOORD_OFFSET);
1635
- vertexAttributeDescriptions[3 ] = __pvkGetVertexInputAttributeDescription (0 , 3 , VK_FORMAT_R32G32B32A32_SFLOAT, PVK_VERTEX_COLOR_OFFSET);
1636
-
1637
1625
VkPipelineVertexInputStateCreateInfo vertexInputStateCInfo = { };
1638
1626
{
1639
1627
vertexInputStateCInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
1640
- vertexInputStateCInfo.vertexBindingDescriptionCount = 1 ;
1641
- vertexInputStateCInfo.pVertexBindingDescriptions = &vertexBindingDescription ;
1642
- vertexInputStateCInfo.vertexAttributeDescriptionCount = PVK_VERTEX_ATTRIBUTE_COUNT ;
1628
+ vertexInputStateCInfo.vertexBindingDescriptionCount = vertInputBindCount ;
1629
+ vertexInputStateCInfo.pVertexBindingDescriptions = vertexBindingDescriptions ;
1630
+ vertexInputStateCInfo.vertexAttributeDescriptionCount = vertInputAttrCount ;
1643
1631
vertexInputStateCInfo.pVertexAttributeDescriptions = vertexAttributeDescriptions;
1644
1632
};
1645
1633
@@ -1728,18 +1716,59 @@ PVK_LINKAGE VkPipeline __pvkCreateGraphicsPipeline(VkDevice device, VkPipelineLa
1728
1716
PVK_CHECK (vkCreateGraphicsPipelines (device, VK_NULL_HANDLE, 1 , &pipelineCInfo, NULL , &pipeline));
1729
1717
1730
1718
PVK_DELETE (stageCInfos);
1731
- PVK_DELETE (vertexAttributeDescriptions);
1732
1719
return pipeline;
1733
1720
}
1734
1721
#endif
1735
1722
1736
1723
PVK_LINKAGE VkPipeline pvkCreateShadowMapGraphicsPipeline (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t subpassIndex, uint32_t width, uint32_t height, uint32_t count, ...);
1737
1724
#ifdef PVK_IMPLEMENTATION
1738
1725
PVK_LINKAGE VkPipeline pvkCreateShadowMapGraphicsPipeline (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t subpassIndex, uint32_t width, uint32_t height, uint32_t count, ...)
1726
+ {
1727
+ VkVertexInputBindingDescription vertexBindingDescription = { };
1728
+ {
1729
+ vertexBindingDescription.binding = 0 ;
1730
+ vertexBindingDescription.stride = PVK_VERTEX_SIZE;
1731
+ vertexBindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
1732
+ };
1733
+ VkVertexInputAttributeDescription* vertexAttributeDescriptions = PVK_NEWV (VkVertexInputAttributeDescription, PVK_VERTEX_ATTRIBUTE_COUNT);
1734
+ vertexAttributeDescriptions[0 ] = __pvkGetVertexInputAttributeDescription (0 , 0 , VK_FORMAT_R32G32B32_SFLOAT, PVK_VERTEX_POSITION_OFFSET);
1735
+ vertexAttributeDescriptions[1 ] = __pvkGetVertexInputAttributeDescription (0 , 1 , VK_FORMAT_R32G32B32_SFLOAT, PVK_VERTEX_NORMAL_OFFSET);
1736
+ vertexAttributeDescriptions[2 ] = __pvkGetVertexInputAttributeDescription (0 , 2 , VK_FORMAT_R32G32_SFLOAT, PVK_VERTEX_TEXCOORD_OFFSET);
1737
+ vertexAttributeDescriptions[3 ] = __pvkGetVertexInputAttributeDescription (0 , 3 , VK_FORMAT_R32G32B32A32_SFLOAT, PVK_VERTEX_COLOR_OFFSET);
1738
+
1739
+ va_list shaderModuleList;
1740
+ va_start (shaderModuleList, count);
1741
+ VkPipeline pipeline = __pvkCreateGraphicsPipeline (device, layout, renderPass, subpassIndex, width, height, 1 , &vertexBindingDescription, 4 , vertexAttributeDescriptions, NULL , true , count, shaderModuleList);
1742
+ va_end (shaderModuleList);
1743
+
1744
+ PVK_DELETE (vertexAttributeDescriptions);
1745
+ return pipeline;
1746
+ }
1747
+ #endif
1748
+
1749
+ PVK_LINKAGE VkPipeline pvkCreateGraphicsPipelineProfile0 (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t width, uint32_t height, uint32_t count, ...);
1750
+ #ifdef PVK_IMPLEMENTATION
1751
+ PVK_LINKAGE VkPipeline pvkCreateGraphicsPipelineProfile0 (VkDevice device, VkPipelineLayout layout, VkRenderPass renderPass, uint32_t width, uint32_t height, uint32_t count, ...)
1739
1752
{
1740
1753
va_list shaderModuleList;
1741
1754
va_start (shaderModuleList, count);
1742
- VkPipeline pipeline = __pvkCreateGraphicsPipeline (device, layout, renderPass, subpassIndex, width, height, NULL , true , count, shaderModuleList);
1755
+
1756
+ /* Color attachment configuration */
1757
+ VkPipelineColorBlendAttachmentState colorAttachment = { };
1758
+ {
1759
+ colorAttachment.blendEnable = VK_FALSE;
1760
+ colorAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
1761
+ };
1762
+
1763
+ VkPipelineColorBlendStateCreateInfo colorBlend = { };
1764
+ {
1765
+ colorBlend.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
1766
+ colorBlend.logicOpEnable = VK_FALSE;
1767
+ colorBlend.attachmentCount = 1 ;
1768
+ colorBlend.pAttachments = &colorAttachment;
1769
+ };
1770
+
1771
+ VkPipeline pipeline = __pvkCreateGraphicsPipeline (device, layout, renderPass, 0 , width, height, 0 , NULL , 0 , NULL , &colorBlend, true , count, shaderModuleList);
1743
1772
va_end (shaderModuleList);
1744
1773
return pipeline;
1745
1774
}
@@ -1772,9 +1801,22 @@ PVK_LINKAGE VkPipeline pvkCreateGraphicsPipeline(VkDevice device, VkPipelineLayo
1772
1801
colorBlend.pAttachments = colorAttachments;
1773
1802
};
1774
1803
1775
- VkPipeline pipeline = __pvkCreateGraphicsPipeline (device, layout, renderPass, subpassIndex, width, height, &colorBlend, true , count, shaderModuleList);
1804
+ VkVertexInputBindingDescription vertexBindingDescription = { };
1805
+ {
1806
+ vertexBindingDescription.binding = 0 ;
1807
+ vertexBindingDescription.stride = PVK_VERTEX_SIZE;
1808
+ vertexBindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
1809
+ };
1810
+ VkVertexInputAttributeDescription* vertexAttributeDescriptions = PVK_NEWV (VkVertexInputAttributeDescription, PVK_VERTEX_ATTRIBUTE_COUNT);
1811
+ vertexAttributeDescriptions[0 ] = __pvkGetVertexInputAttributeDescription (0 , 0 , VK_FORMAT_R32G32B32_SFLOAT, PVK_VERTEX_POSITION_OFFSET);
1812
+ vertexAttributeDescriptions[1 ] = __pvkGetVertexInputAttributeDescription (0 , 1 , VK_FORMAT_R32G32B32_SFLOAT, PVK_VERTEX_NORMAL_OFFSET);
1813
+ vertexAttributeDescriptions[2 ] = __pvkGetVertexInputAttributeDescription (0 , 2 , VK_FORMAT_R32G32_SFLOAT, PVK_VERTEX_TEXCOORD_OFFSET);
1814
+ vertexAttributeDescriptions[3 ] = __pvkGetVertexInputAttributeDescription (0 , 3 , VK_FORMAT_R32G32B32A32_SFLOAT, PVK_VERTEX_COLOR_OFFSET);
1815
+
1816
+ VkPipeline pipeline = __pvkCreateGraphicsPipeline (device, layout, renderPass, subpassIndex, width, height, 1 , &vertexBindingDescription, 4 , vertexAttributeDescriptions, &colorBlend, true , count, shaderModuleList);
1776
1817
va_end (shaderModuleList);
1777
1818
PVK_DELETE (colorAttachments);
1819
+ PVK_DELETE (vertexAttributeDescriptions);
1778
1820
return pipeline;
1779
1821
}
1780
1822
#endif
0 commit comments