finish depth buffering

This commit is contained in:
Gregory Wells
2025-06-17 15:21:16 -04:00
parent 86f2ac6e5a
commit e4e182610a
4 changed files with 116 additions and 31 deletions

View File

@@ -16,7 +16,7 @@ VkDynamicState vkGryphnDynamicStateToVulkanDynamicState(enum gnDynamicState_e st
}
}
VkPrimitiveTopology vkGryphnPrimitiveType(enum gnPrimitiveType_e primitiveType) {
VkPrimitiveTopology vkGryphnPrimitiveType(gnPrimitiveType primitiveType) {
switch (primitiveType) {
case GN_PRIMITIVE_POINTS: return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
case GN_PRIMITIVE_LINES: return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
@@ -64,6 +64,32 @@ VkFormat vkGryphnVertexFormat(gnVertexFormat format) {
}
}
VkCompareOp vkGrypnCompareOperation(gnCompareOperation operation) {
switch(operation) {
case GN_COMPARE_NEVER: return VK_COMPARE_OP_NEVER;
case GN_COMPARE_LESS: return VK_COMPARE_OP_LESS;
case GN_COMPARE_EQUAL: return VK_COMPARE_OP_EQUAL;
case GN_COMPARE_LESS_OR_EQUAL: return VK_COMPARE_OP_LESS_OR_EQUAL;
case GN_COMPARE_GREATER: return VK_COMPARE_OP_GREATER;
case GN_COMPARE_NOT_EQUAL: return VK_COMPARE_OP_NOT_EQUAL;
case GN_COMPARE_GREATER_OR_EQUAL: return VK_COMPARE_OP_GREATER_OR_EQUAL;
case GN_COMPARE_ALWAYS: return VK_COMPARE_OP_ALWAYS;
}
}
VkStencilOp vkGryphnStencilOperation(gnStencilOperation operation) {
switch(operation) {
case GN_STENCIL_KEEP: return VK_STENCIL_OP_KEEP;
case GN_STENCIL_ZERO: return VK_STENCIL_OP_ZERO;
case GN_STENCIL_REPLACE: return VK_STENCIL_OP_REPLACE;
case GN_STENCIL_INCREMENT_AND_CLAMP: return VK_STENCIL_OP_INCREMENT_AND_CLAMP;
case GN_STENCIL_DECREMENT_AND_CLAMP: return VK_STENCIL_OP_DECREMENT_AND_CLAMP;
case GN_STENCIL_INVERT: return VK_STENCIL_OP_INVERT;
case GN_STENCIL_INCREMENT_AND_WRAP: return VK_STENCIL_OP_INCREMENT_AND_WRAP;
case GN_STENCIL_DECREMENT_AND_WRAP: return VK_STENCIL_OP_DECREMENT_AND_WRAP;
}
}
gnReturnCode gnCreateGraphicsPipelineFn(gnGraphicsPipeline graphicsPipeline, gnDevice device, gnGraphicsPipelineInfo info) {
graphicsPipeline->graphicsPipeline = malloc(sizeof(gnPlatformGraphicsPipeline));
for (int i = 0; i < GN_DYNAMIC_STATE_MAX; i++) graphicsPipeline->graphicsPipeline->isDynamic[i] = gnFalse;
@@ -180,6 +206,37 @@ gnReturnCode gnCreateGraphicsPipelineFn(gnGraphicsPipeline graphicsPipeline, gnD
.blendConstants[3] = 0.0f
};
graphicsPipeline->graphicsPipeline->depthStencil = (VkPipelineDepthStencilStateCreateInfo){
.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
.depthWriteEnable = info.depthStencil.depthWriteEnable,
.depthTestEnable = info.depthStencil.depthWriteEnable,
.depthCompareOp = vkGrypnCompareOperation(info.depthStencil.operation),
.depthBoundsTestEnable = VK_FALSE,
.stencilTestEnable = info.depthStencil.stencilTestEnable,
};
if (info.depthStencil.stencilTestEnable) {
graphicsPipeline->graphicsPipeline->depthStencil.front = (VkStencilOpState){
.failOp = vkGryphnStencilOperation(info.depthStencil.front.failOperation),
.passOp = vkGryphnStencilOperation(info.depthStencil.front.passOperation),
.depthFailOp = vkGryphnStencilOperation(info.depthStencil.front.depthFailOperation),
.compareOp = vkGrypnCompareOperation(info.depthStencil.front.compareOperation),
.compareMask = info.depthStencil.front.compareMask,
.writeMask = info.depthStencil.front.writeMask,
.reference = info.depthStencil.front.reference,
};
graphicsPipeline->graphicsPipeline->depthStencil.back = (VkStencilOpState){
.failOp = vkGryphnStencilOperation(info.depthStencil.back.failOperation),
.passOp = vkGryphnStencilOperation(info.depthStencil.back.passOperation),
.depthFailOp = vkGryphnStencilOperation(info.depthStencil.back.depthFailOperation),
.compareOp = vkGrypnCompareOperation(info.depthStencil.back.compareOperation),
.compareMask = info.depthStencil.back.compareMask,
.writeMask = info.depthStencil.back.writeMask,
.reference = info.depthStencil.back.reference,
};
}
graphicsPipeline->graphicsPipeline->setCount = info.uniformLayout.setCount;
graphicsPipeline->graphicsPipeline->sets = malloc(sizeof(VkDescriptorSetLayout) * info.uniformLayout.setCount);
for (int i = 0; i < info.uniformLayout.setCount; i++) graphicsPipeline->graphicsPipeline->sets[i] = vkGryphnCreateSetLayouts(&info.uniformLayout.sets[i], device->outputDevice->device);
@@ -209,7 +266,7 @@ gnReturnCode gnCreateGraphicsPipelineFn(gnGraphicsPipeline graphicsPipeline, gnD
.pViewportState = &graphicsPipeline->graphicsPipeline->viewportState,
.pRasterizationState = &graphicsPipeline->graphicsPipeline->rasterizer,
.pMultisampleState = &multisampling,
.pDepthStencilState = NULL,
.pDepthStencilState = &graphicsPipeline->graphicsPipeline->depthStencil,
.pColorBlendState = &graphicsPipeline->graphicsPipeline->colorBlending,
.pDynamicState = &graphicsPipeline->graphicsPipeline->dynamicState,
.layout = graphicsPipeline->graphicsPipeline->pipelineLayout,

View File

@@ -14,6 +14,7 @@ typedef struct gnPlatformGraphicsPipeline_t {
VkPipelineRasterizationStateCreateInfo rasterizer;
VkPipelineColorBlendAttachmentState colorBlendAttachment;
VkPipelineColorBlendStateCreateInfo colorBlending;
VkPipelineDepthStencilStateCreateInfo depthStencil;
// gnBool createdPipelineLayout;
uint32_t setCount;