Add: Support for VK_EXT_extended_dynamic_state
This commit is contained in:
parent
2ebb72ea18
commit
259039ed2c
@ -25,6 +25,7 @@ Released TBD
|
||||
- `VK_KHR_dynamic_rendering`
|
||||
- `VK_KHR_separate_depth_stencil_layouts`
|
||||
- `VK_EXT_separate_stencil_usage`
|
||||
- `VK_EXT_extended_dynamic_state`
|
||||
- Support attachment clearing when some clearing formats are not specified.
|
||||
- Fix error where previously bound push constants can override a descriptor buffer binding
|
||||
used by a subsequent pipeline that does not use push constants.
|
||||
|
@ -442,3 +442,47 @@ protected:
|
||||
uint32_t _stencilReference;
|
||||
};
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark MVKCmdSetCullMode
|
||||
|
||||
/**
|
||||
* Vulkan command to dynamically set the cull mode. Originally from VK_EXT_extended_dynamic_state,
|
||||
* but also part of Vulkan 1.3.
|
||||
*/
|
||||
class MVKCmdSetCullMode : public MVKCommand {
|
||||
|
||||
public:
|
||||
VkResult setContent(MVKCommandBuffer* cmdBuff,
|
||||
VkCullModeFlags cullMode);
|
||||
|
||||
void encode(MVKCommandEncoder* cmdEncoder) override;
|
||||
|
||||
protected:
|
||||
MVKCommandTypePool<MVKCommand>* getTypePool(MVKCommandPool* cmdPool) override;
|
||||
|
||||
MTLCullMode _cullMode;
|
||||
};
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark MVKCmdSetFrontFace
|
||||
|
||||
/**
|
||||
* Vulkan command to dynamically set the front facing winding order. Originally from
|
||||
* VK_EXT_extended_dynamic_state, but also part of Vulkan 1.3.
|
||||
*/
|
||||
class MVKCmdSetFrontFace : public MVKCommand {
|
||||
|
||||
public:
|
||||
VkResult setContent(MVKCommandBuffer* cmdBuff,
|
||||
VkFrontFace frontFace);
|
||||
|
||||
void encode(MVKCommandEncoder* cmdEncoder) override;
|
||||
|
||||
protected:
|
||||
MVKCommandTypePool<MVKCommand>* getTypePool(MVKCommandPool* cmdPool) override;
|
||||
|
||||
MTLWinding _frontFace;
|
||||
};
|
||||
|
||||
|
@ -439,3 +439,51 @@ void MVKCmdSetStencilReference::encode(MVKCommandEncoder* cmdEncoder) {
|
||||
cmdEncoder->_stencilReferenceValueState.setReferenceValues(_faceMask, _stencilReference);
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark MVKCmdSetCullMode
|
||||
|
||||
VkResult MVKCmdSetCullMode::setContent(MVKCommandBuffer* cmdBuff,
|
||||
VkCullModeFlags cullMode) {
|
||||
switch (cullMode) {
|
||||
case VK_CULL_MODE_NONE: {
|
||||
_cullMode = MTLCullModeNone;
|
||||
break;
|
||||
}
|
||||
case VK_CULL_MODE_FRONT_BIT: {
|
||||
_cullMode = MTLCullModeFront;
|
||||
break;
|
||||
}
|
||||
case VK_CULL_MODE_BACK_BIT: {
|
||||
_cullMode = MTLCullModeBack;
|
||||
break;
|
||||
}
|
||||
case VK_CULL_MODE_FRONT_AND_BACK: {
|
||||
// Metal doesn't have a equivalent to this...
|
||||
}
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
void MVKCmdSetCullMode::encode(MVKCommandEncoder* cmdEncoder) {
|
||||
[((id<MTLRenderCommandEncoder>)cmdEncoder->getMTLEncoder()) setCullMode:_cullMode];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark MVKCmdSetFrontFace
|
||||
|
||||
VkResult MVKCmdSetFrontFace::setContent(MVKCommandBuffer* cmdBuff,
|
||||
VkFrontFace frontFace) {
|
||||
_frontFace = frontFace == VK_FRONT_FACE_COUNTER_CLOCKWISE
|
||||
? MTLWindingClockwise
|
||||
: MTLWindingCounterClockwise;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
void MVKCmdSetFrontFace::encode(MVKCommandEncoder* cmdEncoder) {
|
||||
[((id<MTLRenderCommandEncoder>)cmdEncoder->getMTLEncoder()) setFrontFacingWinding:_frontFace];
|
||||
}
|
||||
|
||||
|
@ -93,6 +93,8 @@ MVK_CMD_TYPE_POOL(SetDepthBounds)
|
||||
MVK_CMD_TYPE_POOL(SetStencilCompareMask)
|
||||
MVK_CMD_TYPE_POOL(SetStencilWriteMask)
|
||||
MVK_CMD_TYPE_POOL(SetStencilReference)
|
||||
MVK_CMD_TYPE_POOL(SetCullMode)
|
||||
MVK_CMD_TYPE_POOL(SetFrontFace)
|
||||
MVK_CMD_TYPE_POOLS_FROM_2_THRESHOLDS(BindVertexBuffers, 1, 2)
|
||||
MVK_CMD_TYPE_POOL(BindIndexBuffer)
|
||||
MVK_CMD_TYPE_POOL(Draw)
|
||||
|
@ -87,6 +87,7 @@ MVK_EXTENSION(EXT_debug_marker, EXT_DEBUG_MARKER,
|
||||
MVK_EXTENSION(EXT_debug_report, EXT_DEBUG_REPORT, INSTANCE, 10.11, 8.0)
|
||||
MVK_EXTENSION(EXT_debug_utils, EXT_DEBUG_UTILS, INSTANCE, 10.11, 8.0)
|
||||
MVK_EXTENSION(EXT_descriptor_indexing, EXT_DESCRIPTOR_INDEXING, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(EXT_extended_dynamic_state, EXT_extended_dynamic_state, DEVICE, 10.11, 8.0)
|
||||
MVK_EXTENSION(EXT_fragment_shader_interlock, EXT_FRAGMENT_SHADER_INTERLOCK, DEVICE, 10.13, 11.0)
|
||||
MVK_EXTENSION(EXT_hdr_metadata, EXT_HDR_METADATA, DEVICE, 10.15, MVK_NA)
|
||||
MVK_EXTENSION(EXT_host_query_reset, EXT_HOST_QUERY_RESET, DEVICE, 10.11, 8.0)
|
||||
|
@ -2985,6 +2985,123 @@ MVK_PUBLIC_VULKAN_SYMBOL void vkSubmitDebugUtilsMessageEXT(
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark VK_EXT_extended_dynamic_state
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdBindVertexBuffers2EXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstBinding,
|
||||
uint32_t bindingCount,
|
||||
const VkBuffer* pBuffers,
|
||||
const VkDeviceSize* pOffsets,
|
||||
const VkDeviceSize* pSizes,
|
||||
const VkDeviceSize* pStrides) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetCullModeEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkCullModeFlags cullMode) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
MVKAddCmd(SetCullMode, commandBuffer, cullMode);
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetDepthBoundsTestEnableEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBool32 depthBoundsTestEnable) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetDepthCompareOpEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkCompareOp depthCompareOp) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetDepthTestEnableEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBool32 depthTestEnable) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetDepthWriteEnableEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBool32 depthWriteEnable) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetFrontFaceEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkFrontFace frontFace) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
MVKAddCmd(SetFrontFace, commandBuffer, frontFace);
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetPrimitiveTopologyEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPrimitiveTopology primitiveTopology) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetScissorWithCountEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t scissorCount,
|
||||
const VkRect2D* pScissors) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
MVKAddCmdFromThreshold(SetScissor, scissorCount, 1, commandBuffer, 0, scissorCount, pScissors);
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetStencilOpEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkStencilFaceFlags faceMask,
|
||||
VkStencilOp failOp,
|
||||
VkStencilOp passOp,
|
||||
VkStencilOp depthFailOp,
|
||||
VkCompareOp compareOp) {
|
||||
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetStencilTestEnableEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBool32 stencilTestEnable) {
|
||||
|
||||
}
|
||||
|
||||
MVK_PUBLIC_VULKAN_SYMBOL void vkCmdSetViewportWithCountEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t viewportCount,
|
||||
const VkViewport* pViewports) {
|
||||
|
||||
MVKTraceVulkanCallStart();
|
||||
MVKAddCmdFromThreshold(SetViewport, viewportCount, 1, commandBuffer, 0, viewportCount, pViewports);
|
||||
MVKTraceVulkanCallEnd();
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark VK_EXT_hdr_metadata extension
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user