add stencil op funcs
This commit is contained in:
parent
138ed66590
commit
5b448ab728
66
vulkan.d
66
vulkan.d
@ -92,6 +92,7 @@ const char*[] VK_BASE_DEVICE_EXTENSIONS = [
|
|||||||
cast(char*)VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME,
|
cast(char*)VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME,
|
||||||
cast(char*)VK_KHR_8BIT_STORAGE_EXTENSION_NAME,
|
cast(char*)VK_KHR_8BIT_STORAGE_EXTENSION_NAME,
|
||||||
cast(char*)VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME,
|
cast(char*)VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME,
|
||||||
|
cast(char*)VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME,
|
||||||
];
|
];
|
||||||
|
|
||||||
const char*[] VK_AMD_DEVICE_EXTENSIONS = [
|
const char*[] VK_AMD_DEVICE_EXTENSIONS = [
|
||||||
@ -112,6 +113,33 @@ const VkFormat[] VK_IMAGE_FORMATS = [
|
|||||||
VK_FORMAT_R8G8B8A8_UNORM,
|
VK_FORMAT_R8G8B8A8_UNORM,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
enum StencilOp : VkStencilOp
|
||||||
|
{
|
||||||
|
Keep = VK_STENCIL_OP_KEEP,
|
||||||
|
Zero = VK_STENCIL_OP_ZERO,
|
||||||
|
Replace = VK_STENCIL_OP_REPLACE,
|
||||||
|
} alias SOP = StencilOp;
|
||||||
|
|
||||||
|
enum CompareOp : VkCompareOp
|
||||||
|
{
|
||||||
|
Never = VK_COMPARE_OP_NEVER,
|
||||||
|
Less = VK_COMPARE_OP_LESS,
|
||||||
|
Equal = VK_COMPARE_OP_EQUAL,
|
||||||
|
LessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
|
||||||
|
Greater = VK_COMPARE_OP_GREATER,
|
||||||
|
NotEqual = VK_COMPARE_OP_NOT_EQUAL,
|
||||||
|
GreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
|
||||||
|
Always = VK_COMPARE_OP_ALWAYS,
|
||||||
|
} alias COP = CompareOp;
|
||||||
|
|
||||||
|
|
||||||
|
enum StencilFace : VkStencilFaceFlagBits
|
||||||
|
{
|
||||||
|
Front = VK_STENCIL_FACE_FRONT_BIT,
|
||||||
|
Back = VK_STENCIL_FACE_BACK_BIT,
|
||||||
|
Both = VK_STENCIL_FACE_FRONT_AND_BACK,
|
||||||
|
} alias SF = StencilFace;
|
||||||
|
|
||||||
enum ShaderStage : VkShaderStageFlagBits
|
enum ShaderStage : VkShaderStageFlagBits
|
||||||
{
|
{
|
||||||
None = cast(VkShaderStageFlagBits)0,
|
None = cast(VkShaderStageFlagBits)0,
|
||||||
@ -1701,7 +1729,12 @@ CreateGraphicsPipeline(Vulkan* vk, Pipeline* pipeline_handle, GfxPipelineInfo* b
|
|||||||
pipeline.type = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
pipeline.type = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||||
pipeline.layout = build_info.layout;
|
pipeline.layout = build_info.layout;
|
||||||
|
|
||||||
VkDynamicState[2] dyn_state = [ VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR ];
|
VkDynamicState[4] dyn_state = [
|
||||||
|
VK_DYNAMIC_STATE_VIEWPORT,
|
||||||
|
VK_DYNAMIC_STATE_SCISSOR,
|
||||||
|
VK_DYNAMIC_STATE_STENCIL_OP,
|
||||||
|
VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
|
||||||
|
];
|
||||||
|
|
||||||
VkPipelineDynamicStateCreateInfo dyn_info = {
|
VkPipelineDynamicStateCreateInfo dyn_info = {
|
||||||
sType: VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
|
sType: VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
|
||||||
@ -2548,7 +2581,6 @@ Destroy(VkSurfaceKHR surface, VkInstance instance)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keep
|
|
||||||
void
|
void
|
||||||
Destroy(VkSwapchainKHR swapchain, ImageView[] views, VkDevice device)
|
Destroy(VkSwapchainKHR swapchain, ImageView[] views, VkDevice device)
|
||||||
{
|
{
|
||||||
@ -2587,6 +2619,36 @@ PrintShaderDisassembly(Vulkan* vk, Pipeline pipeline_id, VkShaderStageFlagBits s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SetStencilWriteMask(Vulkan* vk, StencilFace face, u32 mask)
|
||||||
|
{
|
||||||
|
vkCmdSetStencilWriteMask(vk.cmds[vk.frame_index], face, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SetStencilReference(Vulkan* vk, StencilFace face, u32 reference)
|
||||||
|
{
|
||||||
|
vkCmdSetStencilReference(vk.cmds[vk.frame_index], face, reference);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SetStencilCompareMask(Vulkan* vk, StencilFace face, u32 mask)
|
||||||
|
{
|
||||||
|
vkCmdSetStencilCompareMask(vk.cmds[vk.frame_index], face, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SetStencilTest(Vulkan* vk, VkBool32 enable)
|
||||||
|
{
|
||||||
|
vkCmdSetStencilTestEnable(vk.cmds[vk.frame_index], enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SetStencilOp(Vulkan* vk, StencilFace face, StencilOp fail_op, StencilOp pass_op, StencilOp depth_fail_op, CompareOp cmp_op)
|
||||||
|
{
|
||||||
|
vkCmdSetStencilOp(vk.cmds[vk.frame_index], face, fail_op, pass_op, depth_fail_op, cmp_op);
|
||||||
|
}
|
||||||
|
|
||||||
Vulkan
|
Vulkan
|
||||||
Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
|
Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -66,7 +66,6 @@ PFN_vkCreateImage vkCreateImage = null;
|
|||||||
PFN_vkCreateImageView vkCreateImageView = null;
|
PFN_vkCreateImageView vkCreateImageView = null;
|
||||||
PFN_vkCreateBufferView vkCreateBufferView = null;
|
PFN_vkCreateBufferView vkCreateBufferView = null;
|
||||||
PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = null;
|
PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = null;
|
||||||
PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = null;
|
|
||||||
PFN_vkGetDeviceQueue vkGetDeviceQueue = null;
|
PFN_vkGetDeviceQueue vkGetDeviceQueue = null;
|
||||||
PFN_vkCreateSemaphore vkCreateSemaphore = null;
|
PFN_vkCreateSemaphore vkCreateSemaphore = null;
|
||||||
PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = null;
|
PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = null;
|
||||||
@ -86,7 +85,6 @@ PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = null;
|
|||||||
PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = null;
|
PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = null;
|
||||||
PFN_vkDestroyBufferView vkDestroyBufferView = null;
|
PFN_vkDestroyBufferView vkDestroyBufferView = null;
|
||||||
PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = null;
|
PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = null;
|
||||||
alias vkQueueSubmit2 = vkQueueSubmit2KHR;
|
|
||||||
PFN_vkDestroyImage vkDestroyImage = null;
|
PFN_vkDestroyImage vkDestroyImage = null;
|
||||||
PFN_vkCmdBlitImage vkCmdBlitImage = null;
|
PFN_vkCmdBlitImage vkCmdBlitImage = null;
|
||||||
PFN_vkDestroyImageView vkDestroyImageView = null;
|
PFN_vkDestroyImageView vkDestroyImageView = null;
|
||||||
@ -95,7 +93,7 @@ PFN_vkDestroySemaphore vkDestroySemaphore = null;
|
|||||||
PFN_vkDestroyFence vkDestroyFence = null;
|
PFN_vkDestroyFence vkDestroyFence = null;
|
||||||
PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = null;
|
PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = null;
|
||||||
PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = null;
|
PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = null;
|
||||||
PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = null;
|
PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = null;
|
||||||
PFN_vkDestroyPipeline vkDestroyPipeline = null;
|
PFN_vkDestroyPipeline vkDestroyPipeline = null;
|
||||||
PFN_vkWaitForFences vkWaitForFences = null;
|
PFN_vkWaitForFences vkWaitForFences = null;
|
||||||
PFN_vkBeginCommandBuffer vkBeginCommandBuffer = null;
|
PFN_vkBeginCommandBuffer vkBeginCommandBuffer = null;
|
||||||
@ -126,6 +124,16 @@ PFN_vkDestroySampler vkDestroySampler = null;
|
|||||||
PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = null;
|
PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = null;
|
||||||
PFN_vkWaitSemaphores vkWaitSemaphores = null;
|
PFN_vkWaitSemaphores vkWaitSemaphores = null;
|
||||||
PFN_vkQueueWaitIdle vkQueueWaitIdle = null;
|
PFN_vkQueueWaitIdle vkQueueWaitIdle = null;
|
||||||
|
PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = null;
|
||||||
|
PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = null;
|
||||||
|
PFN_vkCmdSetStencilReference vkCmdSetStencilReference = null;
|
||||||
|
PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = null;
|
||||||
|
PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = null;
|
||||||
|
|
||||||
|
alias vkQueueSubmit2 = vkQueueSubmit2KHR;
|
||||||
|
alias vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR;
|
||||||
|
alias vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT;
|
||||||
|
alias vkCmdSetStencilOp = vkCmdSetStencilOpEXT;
|
||||||
|
|
||||||
static string
|
static string
|
||||||
LoadDeviceFunc(alias fn, alias vk)()
|
LoadDeviceFunc(alias fn, alias vk)()
|
||||||
@ -162,7 +170,6 @@ LoadDeviceFunctions(Vulkan* vk)
|
|||||||
mixin(LoadDeviceFunc!(vkQueueSubmit2, vk));
|
mixin(LoadDeviceFunc!(vkQueueSubmit2, vk));
|
||||||
mixin(LoadDeviceFunc!(vkCreateBufferView, vk));
|
mixin(LoadDeviceFunc!(vkCreateBufferView, vk));
|
||||||
mixin(LoadDeviceFunc!(vkGetSwapchainImagesKHR, vk));
|
mixin(LoadDeviceFunc!(vkGetSwapchainImagesKHR, vk));
|
||||||
mixin(LoadDeviceFunc!(vkGetSwapchainStatusKHR, vk));
|
|
||||||
mixin(LoadDeviceFunc!(vkGetDeviceQueue, vk));
|
mixin(LoadDeviceFunc!(vkGetDeviceQueue, vk));
|
||||||
mixin(LoadDeviceFunc!(vkCreateSemaphore, vk));
|
mixin(LoadDeviceFunc!(vkCreateSemaphore, vk));
|
||||||
mixin(LoadDeviceFunc!(vkAllocateCommandBuffers, vk));
|
mixin(LoadDeviceFunc!(vkAllocateCommandBuffers, vk));
|
||||||
@ -220,14 +227,16 @@ LoadDeviceFunctions(Vulkan* vk)
|
|||||||
mixin(LoadDeviceFunc!(vkGetBufferDeviceAddress, vk));
|
mixin(LoadDeviceFunc!(vkGetBufferDeviceAddress, vk));
|
||||||
mixin(LoadDeviceFunc!(vkWaitSemaphores, vk));
|
mixin(LoadDeviceFunc!(vkWaitSemaphores, vk));
|
||||||
mixin(LoadDeviceFunc!(vkQueueWaitIdle, vk));
|
mixin(LoadDeviceFunc!(vkQueueWaitIdle, vk));
|
||||||
|
mixin(LoadDeviceFunc!(vkCmdSetStencilTestEnableEXT, vk));
|
||||||
|
mixin(LoadDeviceFunc!(vkCmdSetStencilOpEXT, vk));
|
||||||
|
mixin(LoadDeviceFunc!(vkCmdSetStencilReference, vk));
|
||||||
|
mixin(LoadDeviceFunc!(vkCmdSetStencilCompareMask, vk));
|
||||||
|
mixin(LoadDeviceFunc!(vkCmdSetStencilWriteMask, vk));
|
||||||
|
|
||||||
version(AMD_GPU)
|
version(AMD_GPU) version(VULKAN_DEBUG)
|
||||||
{
|
|
||||||
version(VULKAN_DEBUG)
|
|
||||||
{
|
{
|
||||||
mixin(LoadDeviceFunc!(vkGetShaderInfoAMD, vk));
|
mixin(LoadDeviceFunc!(vkGetShaderInfoAMD, vk));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -264,3 +273,4 @@ LoadInstanceFunctions(Vulkan* vk)
|
|||||||
mixin(LoadInstanceFunc!(vkDestroyDebugUtilsMessengerEXT, vk));
|
mixin(LoadInstanceFunc!(vkDestroyDebugUtilsMessengerEXT, vk));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user