finish depth buffering
This commit is contained in:
@@ -16,7 +16,7 @@ VkDynamicState vkGryphnDynamicStateToVulkanDynamicState(enum gnDynamicState_e st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VkPrimitiveTopology vkGryphnPrimitiveType(enum gnPrimitiveType_e primitiveType) {
|
VkPrimitiveTopology vkGryphnPrimitiveType(gnPrimitiveType primitiveType) {
|
||||||
switch (primitiveType) {
|
switch (primitiveType) {
|
||||||
case GN_PRIMITIVE_POINTS: return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
|
case GN_PRIMITIVE_POINTS: return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
|
||||||
case GN_PRIMITIVE_LINES: return VK_PRIMITIVE_TOPOLOGY_LINE_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) {
|
gnReturnCode gnCreateGraphicsPipelineFn(gnGraphicsPipeline graphicsPipeline, gnDevice device, gnGraphicsPipelineInfo info) {
|
||||||
graphicsPipeline->graphicsPipeline = malloc(sizeof(gnPlatformGraphicsPipeline));
|
graphicsPipeline->graphicsPipeline = malloc(sizeof(gnPlatformGraphicsPipeline));
|
||||||
for (int i = 0; i < GN_DYNAMIC_STATE_MAX; i++) graphicsPipeline->graphicsPipeline->isDynamic[i] = gnFalse;
|
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
|
.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->setCount = info.uniformLayout.setCount;
|
||||||
graphicsPipeline->graphicsPipeline->sets = malloc(sizeof(VkDescriptorSetLayout) * 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);
|
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,
|
.pViewportState = &graphicsPipeline->graphicsPipeline->viewportState,
|
||||||
.pRasterizationState = &graphicsPipeline->graphicsPipeline->rasterizer,
|
.pRasterizationState = &graphicsPipeline->graphicsPipeline->rasterizer,
|
||||||
.pMultisampleState = &multisampling,
|
.pMultisampleState = &multisampling,
|
||||||
.pDepthStencilState = NULL,
|
.pDepthStencilState = &graphicsPipeline->graphicsPipeline->depthStencil,
|
||||||
.pColorBlendState = &graphicsPipeline->graphicsPipeline->colorBlending,
|
.pColorBlendState = &graphicsPipeline->graphicsPipeline->colorBlending,
|
||||||
.pDynamicState = &graphicsPipeline->graphicsPipeline->dynamicState,
|
.pDynamicState = &graphicsPipeline->graphicsPipeline->dynamicState,
|
||||||
.layout = graphicsPipeline->graphicsPipeline->pipelineLayout,
|
.layout = graphicsPipeline->graphicsPipeline->pipelineLayout,
|
||||||
|
@@ -14,6 +14,7 @@ typedef struct gnPlatformGraphicsPipeline_t {
|
|||||||
VkPipelineRasterizationStateCreateInfo rasterizer;
|
VkPipelineRasterizationStateCreateInfo rasterizer;
|
||||||
VkPipelineColorBlendAttachmentState colorBlendAttachment;
|
VkPipelineColorBlendAttachmentState colorBlendAttachment;
|
||||||
VkPipelineColorBlendStateCreateInfo colorBlending;
|
VkPipelineColorBlendStateCreateInfo colorBlending;
|
||||||
|
VkPipelineDepthStencilStateCreateInfo depthStencil;
|
||||||
|
|
||||||
// gnBool createdPipelineLayout;
|
// gnBool createdPipelineLayout;
|
||||||
uint32_t setCount;
|
uint32_t setCount;
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#include "gryphn_graphics_pipeline.h"
|
#include "gryphn_graphics_pipeline.h"
|
||||||
#include "core/gryphn_platform_functions.h"
|
#include "core/gryphn_platform_functions.h"
|
||||||
|
|
||||||
gnReturnCode gnCreateGraphicsPipeline(gnGraphicsPipelineHandle* graphicsPipeline, struct gnOutputDevice_t* device, struct gnGraphicsPipelineInfo_t info) {
|
gnReturnCode gnCreateGraphicsPipeline(gnGraphicsPipelineHandle* graphicsPipeline, gnDevice device, gnGraphicsPipelineInfo info) {
|
||||||
*graphicsPipeline = malloc(sizeof(struct gnGraphicsPipeline_t));
|
*graphicsPipeline = malloc(sizeof(struct gnGraphicsPipeline_t));
|
||||||
(*graphicsPipeline)->device = device;
|
(*graphicsPipeline)->device = device;
|
||||||
(*graphicsPipeline)->info = info;
|
(*graphicsPipeline)->info = info;
|
||||||
|
@@ -14,14 +14,25 @@ typedef enum gnDynamicState_e {
|
|||||||
GN_DYNAMIC_STATE_MAX
|
GN_DYNAMIC_STATE_MAX
|
||||||
} gnDynamicState;
|
} gnDynamicState;
|
||||||
|
|
||||||
typedef struct gnDynamicStateInfo_t {
|
typedef struct gnDynamicStateInfo {
|
||||||
uint32_t dynamicStateCount;
|
uint32_t dynamicStateCount;
|
||||||
enum gnDynamicState_e* dynamicStates;
|
enum gnDynamicState_e* dynamicStates;
|
||||||
} gnDynamicStateInfo;
|
} gnDynamicStateInfo;
|
||||||
|
|
||||||
typedef enum gnPrimitiveType_e {
|
typedef enum gnPrimitiveType {
|
||||||
GN_PRIMITIVE_POINTS, GN_PRIMITIVE_LINES, GN_PRIMITIVE_LINE_STRIP, GN_PRIMITIVE_TRIANGLES, GN_PRIMITIVE_TRIANGLE_STRIP
|
GN_PRIMITIVE_POINTS, GN_PRIMITIVE_LINES, GN_PRIMITIVE_LINE_STRIP, GN_PRIMITIVE_TRIANGLES, GN_PRIMITIVE_TRIANGLE_STRIP
|
||||||
} gnPrimativeType;
|
} gnPrimitiveType;
|
||||||
|
|
||||||
|
typedef enum gnBlendFactor_e {
|
||||||
|
GN_BLEND_FACTOR_ZERO,
|
||||||
|
GN_BLEND_FACTOR_ONE,
|
||||||
|
GN_BLEND_FACTOR_SRC_ALPHA,
|
||||||
|
GN_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
|
||||||
|
} gnBlendFactor;
|
||||||
|
|
||||||
|
typedef enum gnBlendOperation_e {
|
||||||
|
GN_OPERATION_ADD
|
||||||
|
} gnBlendOperation;
|
||||||
|
|
||||||
typedef struct gnViewport_t {
|
typedef struct gnViewport_t {
|
||||||
gnVec2 position;
|
gnVec2 position;
|
||||||
@@ -47,41 +58,57 @@ typedef enum gnCullDirection_e {
|
|||||||
GN_DIRECTION_CLOCK_WISE, GN_DIRECTION_COUNTER_CLOCK_WISE
|
GN_DIRECTION_CLOCK_WISE, GN_DIRECTION_COUNTER_CLOCK_WISE
|
||||||
} gnCullDirection;
|
} gnCullDirection;
|
||||||
|
|
||||||
|
typedef enum gnCompareOperation {
|
||||||
|
GN_COMPARE_NEVER, GN_COMPARE_LESS, GN_COMPARE_EQUAL,
|
||||||
|
GN_COMPARE_LESS_OR_EQUAL, GN_COMPARE_GREATER, GN_COMPARE_NOT_EQUAL,
|
||||||
|
GN_COMPARE_GREATER_OR_EQUAL, GN_COMPARE_ALWAYS
|
||||||
|
} gnCompareOperation;
|
||||||
|
|
||||||
|
typedef enum gnStencilOperation {
|
||||||
|
GN_STENCIL_KEEP, GN_STENCIL_ZERO, GN_STENCIL_REPLACE,
|
||||||
|
GN_STENCIL_INCREMENT_AND_CLAMP, GN_STENCIL_DECREMENT_AND_CLAMP,
|
||||||
|
GN_STENCIL_INVERT, GN_STENCIL_INCREMENT_AND_WRAP,
|
||||||
|
GN_STENCIL_DECREMENT_AND_WRAP,
|
||||||
|
} gnStencilOperation;
|
||||||
|
|
||||||
typedef struct gnCullMode_t {
|
typedef struct gnCullMode_t {
|
||||||
enum gnCullFace_e face;
|
enum gnCullFace_e face;
|
||||||
enum gnCullDirection_e direction;
|
enum gnCullDirection_e direction;
|
||||||
} gnCullMode;
|
} gnCullMode;
|
||||||
|
|
||||||
typedef enum gnBlendFactor_e {
|
|
||||||
GN_BLEND_FACTOR_ZERO,
|
|
||||||
GN_BLEND_FACTOR_ONE,
|
|
||||||
GN_BLEND_FACTOR_SRC_ALPHA,
|
|
||||||
GN_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
|
|
||||||
} gnBlendFactor;
|
|
||||||
|
|
||||||
typedef enum gnBlendOperation_e {
|
|
||||||
GN_OPERATION_ADD
|
|
||||||
} gnBlendOperation;
|
|
||||||
|
|
||||||
typedef struct gnColorBlending_t {
|
typedef struct gnColorBlending_t {
|
||||||
gnBool enable;
|
gnBool enable;
|
||||||
enum gnBlendFactor_e sourceColorBlendFactor;
|
gnBlendFactor sourceColorBlendFactor;
|
||||||
enum gnBlendFactor_e sourceAlphaBlendFactor;
|
gnBlendFactor sourceAlphaBlendFactor;
|
||||||
enum gnBlendFactor_e destinationColorBlendFactor;
|
gnBlendFactor destinationColorBlendFactor;
|
||||||
enum gnBlendFactor_e destinationAlphaBlendFactor;
|
gnBlendFactor destinationAlphaBlendFactor;
|
||||||
|
|
||||||
enum gnBlendOperation_e colorBlendOperation;
|
gnBlendOperation colorBlendOperation;
|
||||||
enum gnBlendOperation_e alphaBlendOperation;
|
gnBlendOperation alphaBlendOperation;
|
||||||
} gnColorBlending;
|
} gnColorBlending;
|
||||||
|
|
||||||
|
typedef struct gnStencilState {
|
||||||
|
gnStencilOperation failOperation, passOperation, depthFailOperation;
|
||||||
|
gnCompareOperation compareOperation;
|
||||||
|
uint32_t compareMask, writeMask, reference;
|
||||||
|
} gnStencilState;
|
||||||
|
|
||||||
|
typedef struct gnDepthStencilState {
|
||||||
|
gnBool depthTestEnable, depthWriteEnable;
|
||||||
|
gnCompareOperation operation;
|
||||||
|
gnBool stencilTestEnable;
|
||||||
|
gnStencilState front, back;
|
||||||
|
} gnDepthStencilState;
|
||||||
|
|
||||||
typedef struct gnGraphicsPipelineInfo_t {
|
typedef struct gnGraphicsPipelineInfo_t {
|
||||||
struct gnDynamicStateInfo_t dynamicState;
|
gnDynamicStateInfo dynamicState;
|
||||||
enum gnPrimitiveType_e primitiveType;
|
gnPrimitiveType primitiveType;
|
||||||
struct gnViewport_t viewport;
|
gnViewport viewport;
|
||||||
struct gnScissor_t scissor;
|
gnScissor scissor;
|
||||||
enum gnFillMode_e fillMode;
|
gnFillMode fillMode;
|
||||||
struct gnCullMode_t cullMode;
|
gnCullMode cullMode;
|
||||||
struct gnColorBlending_t colorBlending;
|
gnColorBlending colorBlending;
|
||||||
|
gnDepthStencilState depthStencil;
|
||||||
|
|
||||||
uint32_t subpassIndex;
|
uint32_t subpassIndex;
|
||||||
gnRenderPassDescriptorHandle renderPassDescriptor;
|
gnRenderPassDescriptorHandle renderPassDescriptor;
|
||||||
@@ -101,5 +128,5 @@ struct gnGraphicsPipeline_t {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gnReturnCode gnCreateGraphicsPipeline(gnGraphicsPipelineHandle* graphicsPipeline, gnOutputDeviceHandle device, struct gnGraphicsPipelineInfo_t info);
|
gnReturnCode gnCreateGraphicsPipeline(gnGraphicsPipelineHandle* graphicsPipeline, gnOutputDeviceHandle device, gnGraphicsPipelineInfo info);
|
||||||
void gnDestroyGraphicsPipeline(gnGraphicsPipelineHandle graphicsPipeline);
|
void gnDestroyGraphicsPipeline(gnGraphicsPipelineHandle graphicsPipeline);
|
||||||
|
Reference in New Issue
Block a user