diff --git a/src/venus/venus-protocol/vn_protocol_renderer.h b/src/venus/venus-protocol/vn_protocol_renderer.h index 9da2054..63efe4a 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer.h +++ b/src/venus/venus-protocol/vn_protocol_renderer.h @@ -1,4 +1,4 @@ -/* This file is generated by venus-protocol git-e0866cb3. */ +/* This file is generated by venus-protocol git-8230786e. */ /* * Copyright 2020 Google LLC diff --git a/src/venus/venus-protocol/vn_protocol_renderer_command_buffer.h b/src/venus/venus-protocol/vn_protocol_renderer_command_buffer.h index e7e6719..51d8301 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_command_buffer.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_command_buffer.h @@ -4734,6 +4734,29 @@ static inline void vn_encode_vkCmdDrawIndirectByteCountEXT_reply(struct vn_cs_en /* skip args->vertexStride */ } +static inline void vn_decode_vkCmdSetLineStippleEXT_args_temp(struct vn_cs_decoder *dec, struct vn_command_vkCmdSetLineStippleEXT *args) +{ + vn_decode_VkCommandBuffer_lookup(dec, &args->commandBuffer); + vn_decode_uint32_t(dec, &args->lineStippleFactor); + vn_decode_uint16_t(dec, &args->lineStipplePattern); +} + +static inline void vn_replace_vkCmdSetLineStippleEXT_args_handle(struct vn_command_vkCmdSetLineStippleEXT *args) +{ + vn_replace_VkCommandBuffer_handle(&args->commandBuffer); + /* skip args->lineStippleFactor */ + /* skip args->lineStipplePattern */ +} + +static inline void vn_encode_vkCmdSetLineStippleEXT_reply(struct vn_cs_encoder *enc, const struct vn_command_vkCmdSetLineStippleEXT *args) +{ + vn_encode_VkCommandTypeEXT(enc, &(VkCommandTypeEXT){VK_COMMAND_TYPE_vkCmdSetLineStippleEXT_EXT}); + + /* skip args->commandBuffer */ + /* skip args->lineStippleFactor */ + /* skip args->lineStipplePattern */ +} + static inline void vn_decode_vkCmdSetCullMode_args_temp(struct vn_cs_decoder *dec, struct vn_command_vkCmdSetCullMode *args) { vn_decode_VkCommandBuffer_lookup(dec, &args->commandBuffer); @@ -7104,6 +7127,31 @@ static inline void vn_dispatch_vkCmdDrawIndirectByteCountEXT(struct vn_dispatch_ vn_cs_decoder_reset_temp_pool(ctx->decoder); } +static inline void vn_dispatch_vkCmdSetLineStippleEXT(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) +{ + struct vn_command_vkCmdSetLineStippleEXT args; + + if (!ctx->dispatch_vkCmdSetLineStippleEXT) { + vn_cs_decoder_set_fatal(ctx->decoder); + return; + } + + vn_decode_vkCmdSetLineStippleEXT_args_temp(ctx->decoder, &args); + if (!args.commandBuffer) { + vn_cs_decoder_set_fatal(ctx->decoder); + return; + } + + if (!vn_cs_decoder_get_fatal(ctx->decoder)) + ctx->dispatch_vkCmdSetLineStippleEXT(ctx, &args); + + + if (!vn_cs_decoder_get_fatal(ctx->decoder) && (flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT)) + vn_encode_vkCmdSetLineStippleEXT_reply(ctx->encoder, &args); + + vn_cs_decoder_reset_temp_pool(ctx->decoder); +} + static inline void vn_dispatch_vkCmdSetCullMode(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) { struct vn_command_vkCmdSetCullMode args; diff --git a/src/venus/venus-protocol/vn_protocol_renderer_defines.h b/src/venus/venus-protocol/vn_protocol_renderer_defines.h index 3eac7b8..6315480 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_defines.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_defines.h @@ -329,6 +329,9 @@ typedef enum VkCommandTypeEXT { VK_COMMAND_TYPE_vkGetImageDrmFormatModifierPropertiesEXT_EXT = 187, VK_COMMAND_TYPE_vkCmdSetPatchControlPointsEXT_EXT = 233, VK_COMMAND_TYPE_vkCmdSetLogicOpEXT_EXT = 234, + VK_COMMAND_TYPE_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_EXT = 235, + VK_COMMAND_TYPE_vkGetCalibratedTimestampsEXT_EXT = 236, + VK_COMMAND_TYPE_vkCmdSetLineStippleEXT_EXT = 237, VK_COMMAND_TYPE_vkSetReplyCommandStreamMESA_EXT = 178, VK_COMMAND_TYPE_vkSeekReplyCommandStreamMESA_EXT = 179, VK_COMMAND_TYPE_vkExecuteCommandStreamsMESA_EXT = 180, @@ -1680,6 +1683,24 @@ struct vn_command_vkGetDescriptorSetLayoutSupport { VkDescriptorSetLayoutSupport* pSupport; }; +struct vn_command_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT { + VkPhysicalDevice physicalDevice; + uint32_t* pTimeDomainCount; + VkTimeDomainEXT* pTimeDomains; + + VkResult ret; +}; + +struct vn_command_vkGetCalibratedTimestampsEXT { + VkDevice device; + uint32_t timestampCount; + const VkCalibratedTimestampInfoEXT* pTimestampInfos; + uint64_t* pTimestamps; + uint64_t* pMaxDeviation; + + VkResult ret; +}; + struct vn_command_vkCreateRenderPass2 { VkDevice device; const VkRenderPassCreateInfo2* pCreateInfo; @@ -1828,6 +1849,12 @@ struct vn_command_vkGetDeviceMemoryOpaqueCaptureAddress { uint64_t ret; }; +struct vn_command_vkCmdSetLineStippleEXT { + VkCommandBuffer commandBuffer; + uint32_t lineStippleFactor; + uint16_t lineStipplePattern; +}; + struct vn_command_vkGetPhysicalDeviceToolProperties { VkPhysicalDevice physicalDevice; uint32_t* pToolCount; @@ -2273,6 +2300,8 @@ struct vn_dispatch_context { void (*dispatch_vkDestroySamplerYcbcrConversion)(struct vn_dispatch_context *ctx, struct vn_command_vkDestroySamplerYcbcrConversion *args); void (*dispatch_vkGetDeviceQueue2)(struct vn_dispatch_context *ctx, struct vn_command_vkGetDeviceQueue2 *args); void (*dispatch_vkGetDescriptorSetLayoutSupport)(struct vn_dispatch_context *ctx, struct vn_command_vkGetDescriptorSetLayoutSupport *args); + void (*dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(struct vn_dispatch_context *ctx, struct vn_command_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT *args); + void (*dispatch_vkGetCalibratedTimestampsEXT)(struct vn_dispatch_context *ctx, struct vn_command_vkGetCalibratedTimestampsEXT *args); void (*dispatch_vkCreateRenderPass2)(struct vn_dispatch_context *ctx, struct vn_command_vkCreateRenderPass2 *args); void (*dispatch_vkCmdBeginRenderPass2)(struct vn_dispatch_context *ctx, struct vn_command_vkCmdBeginRenderPass2 *args); void (*dispatch_vkCmdNextSubpass2)(struct vn_dispatch_context *ctx, struct vn_command_vkCmdNextSubpass2 *args); @@ -2292,6 +2321,7 @@ struct vn_dispatch_context { void (*dispatch_vkGetBufferOpaqueCaptureAddress)(struct vn_dispatch_context *ctx, struct vn_command_vkGetBufferOpaqueCaptureAddress *args); void (*dispatch_vkGetBufferDeviceAddress)(struct vn_dispatch_context *ctx, struct vn_command_vkGetBufferDeviceAddress *args); void (*dispatch_vkGetDeviceMemoryOpaqueCaptureAddress)(struct vn_dispatch_context *ctx, struct vn_command_vkGetDeviceMemoryOpaqueCaptureAddress *args); + void (*dispatch_vkCmdSetLineStippleEXT)(struct vn_dispatch_context *ctx, struct vn_command_vkCmdSetLineStippleEXT *args); void (*dispatch_vkGetPhysicalDeviceToolProperties)(struct vn_dispatch_context *ctx, struct vn_command_vkGetPhysicalDeviceToolProperties *args); void (*dispatch_vkCmdSetCullMode)(struct vn_dispatch_context *ctx, struct vn_command_vkCmdSetCullMode *args); void (*dispatch_vkCmdSetFrontFace)(struct vn_dispatch_context *ctx, struct vn_command_vkCmdSetFrontFace *args); diff --git a/src/venus/venus-protocol/vn_protocol_renderer_device.h b/src/venus/venus-protocol/vn_protocol_renderer_device.h index 05c7522..616c61b 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_device.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_device.h @@ -3885,6 +3885,135 @@ vn_replace_VkPhysicalDeviceSubgroupSizeControlFeatures_handle(VkPhysicalDeviceSu } while (pnext); } +/* struct VkPhysicalDeviceLineRasterizationFeaturesEXT chain */ + +static inline void +vn_encode_VkPhysicalDeviceLineRasterizationFeaturesEXT_pnext(struct vn_cs_encoder *enc, const void *val) +{ + /* no known/supported struct */ + vn_encode_simple_pointer(enc, NULL); +} + +static inline void +vn_encode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self(struct vn_cs_encoder *enc, const VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_encode_VkBool32(enc, &val->rectangularLines); + vn_encode_VkBool32(enc, &val->bresenhamLines); + vn_encode_VkBool32(enc, &val->smoothLines); + vn_encode_VkBool32(enc, &val->stippledRectangularLines); + vn_encode_VkBool32(enc, &val->stippledBresenhamLines); + vn_encode_VkBool32(enc, &val->stippledSmoothLines); +} + +static inline void +vn_encode_VkPhysicalDeviceLineRasterizationFeaturesEXT(struct vn_cs_encoder *enc, const VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + assert(val->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT); + vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT }); + vn_encode_VkPhysicalDeviceLineRasterizationFeaturesEXT_pnext(enc, val->pNext); + vn_encode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self(enc, val); +} + +static inline void * +vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_pnext_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_decode_VkBool32(dec, &val->rectangularLines); + vn_decode_VkBool32(dec, &val->bresenhamLines); + vn_decode_VkBool32(dec, &val->smoothLines); + vn_decode_VkBool32(dec, &val->stippledRectangularLines); + vn_decode_VkBool32(dec, &val->stippledBresenhamLines); + vn_decode_VkBool32(dec, &val->stippledSmoothLines); +} + +static inline void +vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_pnext_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_temp(dec, val); +} + +static inline void * +vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_pnext_partial_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + /* skip val->{sType,pNext} */ + /* skip val->rectangularLines */ + /* skip val->bresenhamLines */ + /* skip val->smoothLines */ + /* skip val->stippledRectangularLines */ + /* skip val->stippledBresenhamLines */ + /* skip val->stippledSmoothLines */ +} + +static inline void +vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_partial_temp(dec, val); +} + +static inline void +vn_replace_VkPhysicalDeviceLineRasterizationFeaturesEXT_handle_self(VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + /* skip val->sType */ + /* skip val->pNext */ + /* skip val->rectangularLines */ + /* skip val->bresenhamLines */ + /* skip val->smoothLines */ + /* skip val->stippledRectangularLines */ + /* skip val->stippledBresenhamLines */ + /* skip val->stippledSmoothLines */ +} + +static inline void +vn_replace_VkPhysicalDeviceLineRasterizationFeaturesEXT_handle(VkPhysicalDeviceLineRasterizationFeaturesEXT *val) +{ + struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val; + + do { + switch ((int32_t)pnext->sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + vn_replace_VkPhysicalDeviceLineRasterizationFeaturesEXT_handle_self((VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + break; + default: + /* ignore unknown/unsupported struct */ + break; + } + pnext = pnext->pNext; + } while (pnext); +} + /* struct VkPhysicalDevicePipelineCreationCacheControlFeatures chain */ static inline void @@ -5602,6 +5731,119 @@ vn_replace_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_handle(VkPhysicalDev } while (pnext); } +/* struct VkPhysicalDeviceProvokingVertexFeaturesEXT chain */ + +static inline void +vn_encode_VkPhysicalDeviceProvokingVertexFeaturesEXT_pnext(struct vn_cs_encoder *enc, const void *val) +{ + /* no known/supported struct */ + vn_encode_simple_pointer(enc, NULL); +} + +static inline void +vn_encode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self(struct vn_cs_encoder *enc, const VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_encode_VkBool32(enc, &val->provokingVertexLast); + vn_encode_VkBool32(enc, &val->transformFeedbackPreservesProvokingVertex); +} + +static inline void +vn_encode_VkPhysicalDeviceProvokingVertexFeaturesEXT(struct vn_cs_encoder *enc, const VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + assert(val->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT); + vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT }); + vn_encode_VkPhysicalDeviceProvokingVertexFeaturesEXT_pnext(enc, val->pNext); + vn_encode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self(enc, val); +} + +static inline void * +vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_pnext_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_decode_VkBool32(dec, &val->provokingVertexLast); + vn_decode_VkBool32(dec, &val->transformFeedbackPreservesProvokingVertex); +} + +static inline void +vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_pnext_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_temp(dec, val); +} + +static inline void * +vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_pnext_partial_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + /* skip val->{sType,pNext} */ + /* skip val->provokingVertexLast */ + /* skip val->transformFeedbackPreservesProvokingVertex */ +} + +static inline void +vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_partial_temp(dec, val); +} + +static inline void +vn_replace_VkPhysicalDeviceProvokingVertexFeaturesEXT_handle_self(VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + /* skip val->sType */ + /* skip val->pNext */ + /* skip val->provokingVertexLast */ + /* skip val->transformFeedbackPreservesProvokingVertex */ +} + +static inline void +vn_replace_VkPhysicalDeviceProvokingVertexFeaturesEXT_handle(VkPhysicalDeviceProvokingVertexFeaturesEXT *val) +{ + struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val; + + do { + switch ((int32_t)pnext->sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + vn_replace_VkPhysicalDeviceProvokingVertexFeaturesEXT_handle_self((VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + break; + default: + /* ignore unknown/unsupported struct */ + break; + } + pnext = pnext->pNext; + } while (pnext); +} + /* struct VkPhysicalDeviceShaderIntegerDotProductFeatures chain */ static inline void @@ -5991,6 +6233,12 @@ vn_encode_VkPhysicalDeviceFeatures2_pnext(struct vn_cs_encoder *enc, const void vn_encode_VkPhysicalDeviceFeatures2_pnext(enc, pnext->pNext); vn_encode_VkPhysicalDeviceSubgroupSizeControlFeatures_self(enc, (const VkPhysicalDeviceSubgroupSizeControlFeatures *)pnext); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + vn_encode_simple_pointer(enc, pnext); + vn_encode_VkStructureType(enc, &pnext->sType); + vn_encode_VkPhysicalDeviceFeatures2_pnext(enc, pnext->pNext); + vn_encode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self(enc, (const VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + return; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: vn_encode_simple_pointer(enc, pnext); vn_encode_VkStructureType(enc, &pnext->sType); @@ -6069,6 +6317,12 @@ vn_encode_VkPhysicalDeviceFeatures2_pnext(struct vn_cs_encoder *enc, const void vn_encode_VkPhysicalDeviceFeatures2_pnext(enc, pnext->pNext); vn_encode_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_self(enc, (const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)pnext); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + vn_encode_simple_pointer(enc, pnext); + vn_encode_VkStructureType(enc, &pnext->sType); + vn_encode_VkPhysicalDeviceFeatures2_pnext(enc, pnext->pNext); + vn_encode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self(enc, (const VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + return; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: vn_encode_simple_pointer(enc, pnext); vn_encode_VkStructureType(enc, &pnext->sType); @@ -6334,6 +6588,14 @@ vn_decode_VkPhysicalDeviceFeatures2_pnext_temp(struct vn_cs_decoder *dec) vn_decode_VkPhysicalDeviceSubgroupSizeControlFeatures_self_temp(dec, (VkPhysicalDeviceSubgroupSizeControlFeatures *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPhysicalDeviceFeatures2_pnext_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_temp(dec, (VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDevicePipelineCreationCacheControlFeatures)); if (pnext) { @@ -6438,6 +6700,14 @@ vn_decode_VkPhysicalDeviceFeatures2_pnext_temp(struct vn_cs_decoder *dec) vn_decode_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_self_temp(dec, (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPhysicalDeviceFeatures2_pnext_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_temp(dec, (VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceShaderIntegerDotProductFeatures)); if (pnext) { @@ -6711,6 +6981,14 @@ vn_decode_VkPhysicalDeviceFeatures2_pnext_partial_temp(struct vn_cs_decoder *dec vn_decode_VkPhysicalDeviceSubgroupSizeControlFeatures_self_partial_temp(dec, (VkPhysicalDeviceSubgroupSizeControlFeatures *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPhysicalDeviceFeatures2_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_partial_temp(dec, (VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDevicePipelineCreationCacheControlFeatures)); if (pnext) { @@ -6815,6 +7093,14 @@ vn_decode_VkPhysicalDeviceFeatures2_pnext_partial_temp(struct vn_cs_decoder *dec vn_decode_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_self_partial_temp(dec, (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPhysicalDeviceFeatures2_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_partial_temp(dec, (VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceShaderIntegerDotProductFeatures)); if (pnext) { @@ -6960,6 +7246,9 @@ vn_replace_VkPhysicalDeviceFeatures2_handle(VkPhysicalDeviceFeatures2 *val) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: vn_replace_VkPhysicalDeviceSubgroupSizeControlFeatures_handle_self((VkPhysicalDeviceSubgroupSizeControlFeatures *)pnext); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + vn_replace_VkPhysicalDeviceLineRasterizationFeaturesEXT_handle_self((VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: vn_replace_VkPhysicalDevicePipelineCreationCacheControlFeatures_handle_self((VkPhysicalDevicePipelineCreationCacheControlFeatures *)pnext); break; @@ -6999,6 +7288,9 @@ vn_replace_VkPhysicalDeviceFeatures2_handle(VkPhysicalDeviceFeatures2 *val) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: vn_replace_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_handle_self((VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)pnext); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + vn_replace_VkPhysicalDeviceProvokingVertexFeaturesEXT_handle_self((VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: vn_replace_VkPhysicalDeviceShaderIntegerDotProductFeatures_handle_self((VkPhysicalDeviceShaderIntegerDotProductFeatures *)pnext); break; @@ -7337,6 +7629,14 @@ vn_decode_VkDeviceCreateInfo_pnext_temp(struct vn_cs_decoder *dec) vn_decode_VkPhysicalDeviceSubgroupSizeControlFeatures_self_temp(dec, (VkPhysicalDeviceSubgroupSizeControlFeatures *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkDeviceCreateInfo_pnext_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationFeaturesEXT_self_temp(dec, (VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDevicePipelineCreationCacheControlFeatures)); if (pnext) { @@ -7441,6 +7741,14 @@ vn_decode_VkDeviceCreateInfo_pnext_temp(struct vn_cs_decoder *dec) vn_decode_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_self_temp(dec, (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkDeviceCreateInfo_pnext_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexFeaturesEXT_self_temp(dec, (VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceShaderIntegerDotProductFeatures)); if (pnext) { @@ -7654,6 +7962,9 @@ vn_replace_VkDeviceCreateInfo_handle(VkDeviceCreateInfo *val) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: vn_replace_VkPhysicalDeviceSubgroupSizeControlFeatures_handle_self((VkPhysicalDeviceSubgroupSizeControlFeatures *)pnext); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: + vn_replace_VkPhysicalDeviceLineRasterizationFeaturesEXT_handle_self((VkPhysicalDeviceLineRasterizationFeaturesEXT *)pnext); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: vn_replace_VkPhysicalDevicePipelineCreationCacheControlFeatures_handle_self((VkPhysicalDevicePipelineCreationCacheControlFeatures *)pnext); break; @@ -7693,6 +8004,9 @@ vn_replace_VkDeviceCreateInfo_handle(VkDeviceCreateInfo *val) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: vn_replace_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT_handle_self((VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *)pnext); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: + vn_replace_VkPhysicalDeviceProvokingVertexFeaturesEXT_handle_self((VkPhysicalDeviceProvokingVertexFeaturesEXT *)pnext); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: vn_replace_VkPhysicalDeviceShaderIntegerDotProductFeatures_handle_self((VkPhysicalDeviceShaderIntegerDotProductFeatures *)pnext); break; @@ -8796,6 +9110,60 @@ vn_decode_VkPhysicalDeviceSubgroupSizeControlProperties_partial_temp(struct vn_c vn_decode_VkPhysicalDeviceSubgroupSizeControlProperties_self_partial_temp(dec, val); } +/* struct VkPhysicalDeviceLineRasterizationPropertiesEXT chain */ + +static inline void +vn_encode_VkPhysicalDeviceLineRasterizationPropertiesEXT_pnext(struct vn_cs_encoder *enc, const void *val) +{ + /* no known/supported struct */ + vn_encode_simple_pointer(enc, NULL); +} + +static inline void +vn_encode_VkPhysicalDeviceLineRasterizationPropertiesEXT_self(struct vn_cs_encoder *enc, const VkPhysicalDeviceLineRasterizationPropertiesEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_encode_uint32_t(enc, &val->lineSubPixelPrecisionBits); +} + +static inline void +vn_encode_VkPhysicalDeviceLineRasterizationPropertiesEXT(struct vn_cs_encoder *enc, const VkPhysicalDeviceLineRasterizationPropertiesEXT *val) +{ + assert(val->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT); + vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT }); + vn_encode_VkPhysicalDeviceLineRasterizationPropertiesEXT_pnext(enc, val->pNext); + vn_encode_VkPhysicalDeviceLineRasterizationPropertiesEXT_self(enc, val); +} + +static inline void * +vn_decode_VkPhysicalDeviceLineRasterizationPropertiesEXT_pnext_partial_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPhysicalDeviceLineRasterizationPropertiesEXT_self_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceLineRasterizationPropertiesEXT *val) +{ + /* skip val->{sType,pNext} */ + /* skip val->lineSubPixelPrecisionBits */ +} + +static inline void +vn_decode_VkPhysicalDeviceLineRasterizationPropertiesEXT_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceLineRasterizationPropertiesEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPhysicalDeviceLineRasterizationPropertiesEXT_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationPropertiesEXT_self_partial_temp(dec, val); +} + /* struct VkPhysicalDeviceVulkan11Properties chain */ static inline void @@ -9235,6 +9603,62 @@ vn_decode_VkPhysicalDeviceCustomBorderColorPropertiesEXT_partial_temp(struct vn_ vn_decode_VkPhysicalDeviceCustomBorderColorPropertiesEXT_self_partial_temp(dec, val); } +/* struct VkPhysicalDeviceProvokingVertexPropertiesEXT chain */ + +static inline void +vn_encode_VkPhysicalDeviceProvokingVertexPropertiesEXT_pnext(struct vn_cs_encoder *enc, const void *val) +{ + /* no known/supported struct */ + vn_encode_simple_pointer(enc, NULL); +} + +static inline void +vn_encode_VkPhysicalDeviceProvokingVertexPropertiesEXT_self(struct vn_cs_encoder *enc, const VkPhysicalDeviceProvokingVertexPropertiesEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_encode_VkBool32(enc, &val->provokingVertexModePerPipeline); + vn_encode_VkBool32(enc, &val->transformFeedbackPreservesTriangleFanProvokingVertex); +} + +static inline void +vn_encode_VkPhysicalDeviceProvokingVertexPropertiesEXT(struct vn_cs_encoder *enc, const VkPhysicalDeviceProvokingVertexPropertiesEXT *val) +{ + assert(val->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT); + vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT }); + vn_encode_VkPhysicalDeviceProvokingVertexPropertiesEXT_pnext(enc, val->pNext); + vn_encode_VkPhysicalDeviceProvokingVertexPropertiesEXT_self(enc, val); +} + +static inline void * +vn_decode_VkPhysicalDeviceProvokingVertexPropertiesEXT_pnext_partial_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPhysicalDeviceProvokingVertexPropertiesEXT_self_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceProvokingVertexPropertiesEXT *val) +{ + /* skip val->{sType,pNext} */ + /* skip val->provokingVertexModePerPipeline */ + /* skip val->transformFeedbackPreservesTriangleFanProvokingVertex */ +} + +static inline void +vn_decode_VkPhysicalDeviceProvokingVertexPropertiesEXT_partial_temp(struct vn_cs_decoder *dec, VkPhysicalDeviceProvokingVertexPropertiesEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPhysicalDeviceProvokingVertexPropertiesEXT_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexPropertiesEXT_self_partial_temp(dec, val); +} + /* struct VkPhysicalDeviceShaderIntegerDotProductProperties chain */ static inline void @@ -9458,6 +9882,12 @@ vn_encode_VkPhysicalDeviceProperties2_pnext(struct vn_cs_encoder *enc, const voi vn_encode_VkPhysicalDeviceProperties2_pnext(enc, pnext->pNext); vn_encode_VkPhysicalDeviceSubgroupSizeControlProperties_self(enc, (const VkPhysicalDeviceSubgroupSizeControlProperties *)pnext); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT: + vn_encode_simple_pointer(enc, pnext); + vn_encode_VkStructureType(enc, &pnext->sType); + vn_encode_VkPhysicalDeviceProperties2_pnext(enc, pnext->pNext); + vn_encode_VkPhysicalDeviceLineRasterizationPropertiesEXT_self(enc, (const VkPhysicalDeviceLineRasterizationPropertiesEXT *)pnext); + return; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: vn_encode_simple_pointer(enc, pnext); vn_encode_VkStructureType(enc, &pnext->sType); @@ -9482,6 +9912,12 @@ vn_encode_VkPhysicalDeviceProperties2_pnext(struct vn_cs_encoder *enc, const voi vn_encode_VkPhysicalDeviceProperties2_pnext(enc, pnext->pNext); vn_encode_VkPhysicalDeviceCustomBorderColorPropertiesEXT_self(enc, (const VkPhysicalDeviceCustomBorderColorPropertiesEXT *)pnext); return; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: + vn_encode_simple_pointer(enc, pnext); + vn_encode_VkStructureType(enc, &pnext->sType); + vn_encode_VkPhysicalDeviceProperties2_pnext(enc, pnext->pNext); + vn_encode_VkPhysicalDeviceProvokingVertexPropertiesEXT_self(enc, (const VkPhysicalDeviceProvokingVertexPropertiesEXT *)pnext); + return; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: vn_encode_simple_pointer(enc, pnext); vn_encode_VkStructureType(enc, &pnext->sType); @@ -9661,6 +10097,14 @@ vn_decode_VkPhysicalDeviceProperties2_pnext_partial_temp(struct vn_cs_decoder *d vn_decode_VkPhysicalDeviceSubgroupSizeControlProperties_self_partial_temp(dec, (VkPhysicalDeviceSubgroupSizeControlProperties *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceLineRasterizationPropertiesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPhysicalDeviceProperties2_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceLineRasterizationPropertiesEXT_self_partial_temp(dec, (VkPhysicalDeviceLineRasterizationPropertiesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceVulkan11Properties)); if (pnext) { @@ -9693,6 +10137,14 @@ vn_decode_VkPhysicalDeviceProperties2_pnext_partial_temp(struct vn_cs_decoder *d vn_decode_VkPhysicalDeviceCustomBorderColorPropertiesEXT_self_partial_temp(dec, (VkPhysicalDeviceCustomBorderColorPropertiesEXT *)pnext); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceProvokingVertexPropertiesEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPhysicalDeviceProperties2_pnext_partial_temp(dec); + vn_decode_VkPhysicalDeviceProvokingVertexPropertiesEXT_self_partial_temp(dec, (VkPhysicalDeviceProvokingVertexPropertiesEXT *)pnext); + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPhysicalDeviceShaderIntegerDotProductProperties)); if (pnext) { @@ -12388,6 +12840,50 @@ static inline void vn_encode_vkGetDeviceQueue2_reply(struct vn_cs_encoder *enc, vn_encode_VkQueue(enc, args->pQueue); } +static inline void vn_decode_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_args_temp(struct vn_cs_decoder *dec, struct vn_command_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT *args) +{ + vn_decode_VkPhysicalDevice_lookup(dec, &args->physicalDevice); + if (vn_decode_simple_pointer(dec)) { + args->pTimeDomainCount = vn_cs_decoder_alloc_temp(dec, sizeof(*args->pTimeDomainCount)); + if (!args->pTimeDomainCount) return; + vn_decode_uint32_t(dec, args->pTimeDomainCount); + } else { + args->pTimeDomainCount = NULL; + vn_cs_decoder_set_fatal(dec); + } + if (vn_peek_array_size(dec)) { + const size_t array_size = vn_decode_array_size(dec, (args->pTimeDomainCount ? *args->pTimeDomainCount : 0)); + args->pTimeDomains = vn_cs_decoder_alloc_temp(dec, sizeof(*args->pTimeDomains) * array_size); + if (!args->pTimeDomains) return; + } else { + vn_decode_array_size_unchecked(dec); + args->pTimeDomains = NULL; + } +} + +static inline void vn_replace_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_args_handle(struct vn_command_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT *args) +{ + vn_replace_VkPhysicalDevice_handle(&args->physicalDevice); + /* skip args->pTimeDomainCount */ + /* skip args->pTimeDomains */ +} + +static inline void vn_encode_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_reply(struct vn_cs_encoder *enc, const struct vn_command_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT *args) +{ + vn_encode_VkCommandTypeEXT(enc, &(VkCommandTypeEXT){VK_COMMAND_TYPE_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_EXT}); + + vn_encode_VkResult(enc, &args->ret); + /* skip args->physicalDevice */ + if (vn_encode_simple_pointer(enc, args->pTimeDomainCount)) + vn_encode_uint32_t(enc, args->pTimeDomainCount); + if (args->pTimeDomains) { + vn_encode_array_size(enc, (args->pTimeDomainCount ? *args->pTimeDomainCount : 0)); + vn_encode_VkTimeDomainEXT_array(enc, args->pTimeDomains, (args->pTimeDomainCount ? *args->pTimeDomainCount : 0)); + } else { + vn_encode_array_size(enc, 0); + } +} + static inline void vn_decode_vkGetPhysicalDeviceToolProperties_args_temp(struct vn_cs_decoder *dec, struct vn_command_vkGetPhysicalDeviceToolProperties *args) { vn_decode_VkPhysicalDevice_lookup(dec, &args->physicalDevice); @@ -13142,6 +13638,35 @@ static inline void vn_dispatch_vkGetDeviceQueue2(struct vn_dispatch_context *ctx vn_cs_decoder_reset_temp_pool(ctx->decoder); } +static inline void vn_dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) +{ + struct vn_command_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT args; + + if (!ctx->dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT) { + vn_cs_decoder_set_fatal(ctx->decoder); + return; + } + + vn_decode_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_args_temp(ctx->decoder, &args); + if (!args.physicalDevice) { + vn_cs_decoder_set_fatal(ctx->decoder); + return; + } + + if (!vn_cs_decoder_get_fatal(ctx->decoder)) + ctx->dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(ctx, &args); + +#ifdef DEBUG + if (!vn_cs_decoder_get_fatal(ctx->decoder) && vn_dispatch_should_log_result(args.ret)) + vn_dispatch_debug_log(ctx, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT returned %d", args.ret); +#endif + + if (!vn_cs_decoder_get_fatal(ctx->decoder) && (flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT)) + vn_encode_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_reply(ctx->encoder, &args); + + vn_cs_decoder_reset_temp_pool(ctx->decoder); +} + static inline void vn_dispatch_vkGetPhysicalDeviceToolProperties(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) { struct vn_command_vkGetPhysicalDeviceToolProperties args; diff --git a/src/venus/venus-protocol/vn_protocol_renderer_dispatches.h b/src/venus/venus-protocol/vn_protocol_renderer_dispatches.h index b15d780..9ecd781 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_dispatches.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_dispatches.h @@ -208,6 +208,8 @@ static inline const char *vn_dispatch_command_name(VkCommandTypeEXT type) case VK_COMMAND_TYPE_vkDestroySamplerYcbcrConversion_EXT: return "vkDestroySamplerYcbcrConversion"; case VK_COMMAND_TYPE_vkGetDeviceQueue2_EXT: return "vkGetDeviceQueue2"; case VK_COMMAND_TYPE_vkGetDescriptorSetLayoutSupport_EXT: return "vkGetDescriptorSetLayoutSupport"; + case VK_COMMAND_TYPE_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_EXT: return "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"; + case VK_COMMAND_TYPE_vkGetCalibratedTimestampsEXT_EXT: return "vkGetCalibratedTimestampsEXT"; case VK_COMMAND_TYPE_vkCreateRenderPass2_EXT: return "vkCreateRenderPass2"; case VK_COMMAND_TYPE_vkCmdBeginRenderPass2_EXT: return "vkCmdBeginRenderPass2"; case VK_COMMAND_TYPE_vkCmdNextSubpass2_EXT: return "vkCmdNextSubpass2"; @@ -227,6 +229,7 @@ static inline const char *vn_dispatch_command_name(VkCommandTypeEXT type) case VK_COMMAND_TYPE_vkGetBufferOpaqueCaptureAddress_EXT: return "vkGetBufferOpaqueCaptureAddress"; case VK_COMMAND_TYPE_vkGetBufferDeviceAddress_EXT: return "vkGetBufferDeviceAddress"; case VK_COMMAND_TYPE_vkGetDeviceMemoryOpaqueCaptureAddress_EXT: return "vkGetDeviceMemoryOpaqueCaptureAddress"; + case VK_COMMAND_TYPE_vkCmdSetLineStippleEXT_EXT: return "vkCmdSetLineStippleEXT"; case VK_COMMAND_TYPE_vkGetPhysicalDeviceToolProperties_EXT: return "vkGetPhysicalDeviceToolProperties"; case VK_COMMAND_TYPE_vkCmdSetCullMode_EXT: return "vkCmdSetCullMode"; case VK_COMMAND_TYPE_vkCmdSetFrontFace_EXT: return "vkCmdSetFrontFace"; @@ -282,7 +285,7 @@ static inline const char *vn_dispatch_command_name(VkCommandTypeEXT type) } } -static void (*const vn_dispatch_table[235])(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) = { +static void (*const vn_dispatch_table[238])(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) = { [VK_COMMAND_TYPE_vkCreateInstance_EXT] = vn_dispatch_vkCreateInstance, [VK_COMMAND_TYPE_vkDestroyInstance_EXT] = vn_dispatch_vkDestroyInstance, [VK_COMMAND_TYPE_vkEnumeratePhysicalDevices_EXT] = vn_dispatch_vkEnumeratePhysicalDevices, @@ -448,6 +451,8 @@ static void (*const vn_dispatch_table[235])(struct vn_dispatch_context *ctx, VkC [VK_COMMAND_TYPE_vkDestroySamplerYcbcrConversion_EXT] = vn_dispatch_vkDestroySamplerYcbcrConversion, [VK_COMMAND_TYPE_vkGetDeviceQueue2_EXT] = vn_dispatch_vkGetDeviceQueue2, [VK_COMMAND_TYPE_vkGetDescriptorSetLayoutSupport_EXT] = vn_dispatch_vkGetDescriptorSetLayoutSupport, + [VK_COMMAND_TYPE_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_EXT] = vn_dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, + [VK_COMMAND_TYPE_vkGetCalibratedTimestampsEXT_EXT] = vn_dispatch_vkGetCalibratedTimestampsEXT, [VK_COMMAND_TYPE_vkCreateRenderPass2_EXT] = vn_dispatch_vkCreateRenderPass2, [VK_COMMAND_TYPE_vkCmdBeginRenderPass2_EXT] = vn_dispatch_vkCmdBeginRenderPass2, [VK_COMMAND_TYPE_vkCmdNextSubpass2_EXT] = vn_dispatch_vkCmdNextSubpass2, @@ -467,6 +472,7 @@ static void (*const vn_dispatch_table[235])(struct vn_dispatch_context *ctx, VkC [VK_COMMAND_TYPE_vkGetBufferOpaqueCaptureAddress_EXT] = vn_dispatch_vkGetBufferOpaqueCaptureAddress, [VK_COMMAND_TYPE_vkGetBufferDeviceAddress_EXT] = vn_dispatch_vkGetBufferDeviceAddress, [VK_COMMAND_TYPE_vkGetDeviceMemoryOpaqueCaptureAddress_EXT] = vn_dispatch_vkGetDeviceMemoryOpaqueCaptureAddress, + [VK_COMMAND_TYPE_vkCmdSetLineStippleEXT_EXT] = vn_dispatch_vkCmdSetLineStippleEXT, [VK_COMMAND_TYPE_vkGetPhysicalDeviceToolProperties_EXT] = vn_dispatch_vkGetPhysicalDeviceToolProperties, [VK_COMMAND_TYPE_vkCmdSetCullMode_EXT] = vn_dispatch_vkCmdSetCullMode, [VK_COMMAND_TYPE_vkCmdSetFrontFace_EXT] = vn_dispatch_vkCmdSetFrontFace, @@ -526,7 +532,7 @@ static inline void vn_dispatch_command(struct vn_dispatch_context *ctx) #ifdef DEBUG TRACE_SCOPE_SLOW(vn_dispatch_command_name(cmd_type)); #endif - if (cmd_type < 235 && vn_dispatch_table[cmd_type]) + if (cmd_type < 238 && vn_dispatch_table[cmd_type]) vn_dispatch_table[cmd_type](ctx, cmd_flags); else vn_cs_decoder_set_fatal(ctx->decoder); diff --git a/src/venus/venus-protocol/vn_protocol_renderer_info.h b/src/venus/venus-protocol/vn_protocol_renderer_info.h index ba12cdf..406a9f2 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_info.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_info.h @@ -12,9 +12,10 @@ struct vn_info_extension_table { union { - bool enabled[78]; + bool enabled[81]; struct { bool EXT_4444_formats; + bool EXT_calibrated_timestamps; bool EXT_command_serialization; bool EXT_custom_border_color; bool EXT_descriptor_indexing; @@ -25,9 +26,11 @@ struct vn_info_extension_table { bool EXT_image_drm_format_modifier; bool EXT_image_robustness; bool EXT_inline_uniform_block; + bool EXT_line_rasterization; bool EXT_pipeline_creation_cache_control; bool EXT_pipeline_creation_feedback; bool EXT_private_data; + bool EXT_provoking_vertex; bool EXT_queue_family_foreign; bool EXT_sampler_filter_minmax; bool EXT_scalar_block_layout; @@ -124,88 +127,91 @@ vn_info_extension_compare(const void *name, const void *ext) static inline const struct vn_info_extension * vn_info_extension_get(const char *name) { - static const struct vn_info_extension vn_info_extensions[78] = { + static const struct vn_info_extension vn_info_extensions[81] = { { 0, "VK_EXT_4444_formats", 1 }, - { 1, "VK_EXT_command_serialization", 0 }, - { 2, "VK_EXT_custom_border_color", 12 }, - { 3, "VK_EXT_descriptor_indexing", 2 }, - { 4, "VK_EXT_extended_dynamic_state", 1 }, - { 5, "VK_EXT_extended_dynamic_state2", 1 }, - { 6, "VK_EXT_external_memory_dma_buf", 1 }, - { 7, "VK_EXT_host_query_reset", 1 }, - { 8, "VK_EXT_image_drm_format_modifier", 2 }, - { 9, "VK_EXT_image_robustness", 1 }, - { 10, "VK_EXT_inline_uniform_block", 1 }, - { 11, "VK_EXT_pipeline_creation_cache_control", 3 }, - { 12, "VK_EXT_pipeline_creation_feedback", 1 }, - { 13, "VK_EXT_private_data", 1 }, - { 14, "VK_EXT_queue_family_foreign", 1 }, - { 15, "VK_EXT_sampler_filter_minmax", 2 }, - { 16, "VK_EXT_scalar_block_layout", 1 }, - { 17, "VK_EXT_separate_stencil_usage", 1 }, - { 18, "VK_EXT_shader_demote_to_helper_invocation", 1 }, - { 19, "VK_EXT_shader_viewport_index_layer", 1 }, - { 20, "VK_EXT_subgroup_size_control", 2 }, - { 21, "VK_EXT_texel_buffer_alignment", 1 }, - { 22, "VK_EXT_texture_compression_astc_hdr", 1 }, - { 23, "VK_EXT_tooling_info", 1 }, - { 24, "VK_EXT_transform_feedback", 1 }, - { 25, "VK_EXT_ycbcr_2plane_444_formats", 1 }, - { 26, "VK_KHR_16bit_storage", 1 }, - { 27, "VK_KHR_8bit_storage", 1 }, - { 28, "VK_KHR_bind_memory2", 1 }, - { 29, "VK_KHR_buffer_device_address", 1 }, - { 30, "VK_KHR_copy_commands2", 1 }, - { 31, "VK_KHR_create_renderpass2", 1 }, - { 32, "VK_KHR_dedicated_allocation", 3 }, - { 33, "VK_KHR_depth_stencil_resolve", 1 }, - { 34, "VK_KHR_descriptor_update_template", 1 }, - { 35, "VK_KHR_device_group", 4 }, - { 36, "VK_KHR_device_group_creation", 1 }, - { 37, "VK_KHR_draw_indirect_count", 1 }, - { 38, "VK_KHR_driver_properties", 1 }, - { 39, "VK_KHR_dynamic_rendering", 1 }, - { 40, "VK_KHR_external_fence", 1 }, - { 41, "VK_KHR_external_fence_capabilities", 1 }, - { 42, "VK_KHR_external_memory", 1 }, - { 43, "VK_KHR_external_memory_capabilities", 1 }, - { 44, "VK_KHR_external_memory_fd", 1 }, - { 45, "VK_KHR_external_semaphore", 1 }, - { 46, "VK_KHR_external_semaphore_capabilities", 1 }, - { 47, "VK_KHR_format_feature_flags2", 1 }, - { 48, "VK_KHR_get_memory_requirements2", 1 }, - { 49, "VK_KHR_get_physical_device_properties2", 2 }, - { 50, "VK_KHR_image_format_list", 1 }, - { 51, "VK_KHR_imageless_framebuffer", 1 }, - { 52, "VK_KHR_maintenance1", 2 }, - { 53, "VK_KHR_maintenance2", 1 }, - { 54, "VK_KHR_maintenance3", 1 }, - { 55, "VK_KHR_maintenance4", 2 }, - { 56, "VK_KHR_multiview", 1 }, - { 57, "VK_KHR_relaxed_block_layout", 1 }, - { 58, "VK_KHR_sampler_mirror_clamp_to_edge", 3 }, - { 59, "VK_KHR_sampler_ycbcr_conversion", 14 }, - { 60, "VK_KHR_separate_depth_stencil_layouts", 1 }, - { 61, "VK_KHR_shader_atomic_int64", 1 }, - { 62, "VK_KHR_shader_draw_parameters", 1 }, - { 63, "VK_KHR_shader_float16_int8", 1 }, - { 64, "VK_KHR_shader_float_controls", 4 }, - { 65, "VK_KHR_shader_integer_dot_product", 1 }, - { 66, "VK_KHR_shader_non_semantic_info", 1 }, - { 67, "VK_KHR_shader_subgroup_extended_types", 1 }, - { 68, "VK_KHR_shader_terminate_invocation", 1 }, - { 69, "VK_KHR_spirv_1_4", 1 }, - { 70, "VK_KHR_storage_buffer_storage_class", 1 }, - { 71, "VK_KHR_synchronization2", 1 }, - { 72, "VK_KHR_timeline_semaphore", 2 }, - { 73, "VK_KHR_uniform_buffer_standard_layout", 1 }, - { 74, "VK_KHR_variable_pointers", 1 }, - { 75, "VK_KHR_vulkan_memory_model", 3 }, - { 76, "VK_KHR_zero_initialize_workgroup_memory", 1 }, - { 77, "VK_MESA_venus_protocol", 100000 }, + { 1, "VK_EXT_calibrated_timestamps", 2 }, + { 2, "VK_EXT_command_serialization", 0 }, + { 3, "VK_EXT_custom_border_color", 12 }, + { 4, "VK_EXT_descriptor_indexing", 2 }, + { 5, "VK_EXT_extended_dynamic_state", 1 }, + { 6, "VK_EXT_extended_dynamic_state2", 1 }, + { 7, "VK_EXT_external_memory_dma_buf", 1 }, + { 8, "VK_EXT_host_query_reset", 1 }, + { 9, "VK_EXT_image_drm_format_modifier", 2 }, + { 10, "VK_EXT_image_robustness", 1 }, + { 11, "VK_EXT_inline_uniform_block", 1 }, + { 12, "VK_EXT_line_rasterization", 1 }, + { 13, "VK_EXT_pipeline_creation_cache_control", 3 }, + { 14, "VK_EXT_pipeline_creation_feedback", 1 }, + { 15, "VK_EXT_private_data", 1 }, + { 16, "VK_EXT_provoking_vertex", 1 }, + { 17, "VK_EXT_queue_family_foreign", 1 }, + { 18, "VK_EXT_sampler_filter_minmax", 2 }, + { 19, "VK_EXT_scalar_block_layout", 1 }, + { 20, "VK_EXT_separate_stencil_usage", 1 }, + { 21, "VK_EXT_shader_demote_to_helper_invocation", 1 }, + { 22, "VK_EXT_shader_viewport_index_layer", 1 }, + { 23, "VK_EXT_subgroup_size_control", 2 }, + { 24, "VK_EXT_texel_buffer_alignment", 1 }, + { 25, "VK_EXT_texture_compression_astc_hdr", 1 }, + { 26, "VK_EXT_tooling_info", 1 }, + { 27, "VK_EXT_transform_feedback", 1 }, + { 28, "VK_EXT_ycbcr_2plane_444_formats", 1 }, + { 29, "VK_KHR_16bit_storage", 1 }, + { 30, "VK_KHR_8bit_storage", 1 }, + { 31, "VK_KHR_bind_memory2", 1 }, + { 32, "VK_KHR_buffer_device_address", 1 }, + { 33, "VK_KHR_copy_commands2", 1 }, + { 34, "VK_KHR_create_renderpass2", 1 }, + { 35, "VK_KHR_dedicated_allocation", 3 }, + { 36, "VK_KHR_depth_stencil_resolve", 1 }, + { 37, "VK_KHR_descriptor_update_template", 1 }, + { 38, "VK_KHR_device_group", 4 }, + { 39, "VK_KHR_device_group_creation", 1 }, + { 40, "VK_KHR_draw_indirect_count", 1 }, + { 41, "VK_KHR_driver_properties", 1 }, + { 42, "VK_KHR_dynamic_rendering", 1 }, + { 43, "VK_KHR_external_fence", 1 }, + { 44, "VK_KHR_external_fence_capabilities", 1 }, + { 45, "VK_KHR_external_memory", 1 }, + { 46, "VK_KHR_external_memory_capabilities", 1 }, + { 47, "VK_KHR_external_memory_fd", 1 }, + { 48, "VK_KHR_external_semaphore", 1 }, + { 49, "VK_KHR_external_semaphore_capabilities", 1 }, + { 50, "VK_KHR_format_feature_flags2", 1 }, + { 51, "VK_KHR_get_memory_requirements2", 1 }, + { 52, "VK_KHR_get_physical_device_properties2", 2 }, + { 53, "VK_KHR_image_format_list", 1 }, + { 54, "VK_KHR_imageless_framebuffer", 1 }, + { 55, "VK_KHR_maintenance1", 2 }, + { 56, "VK_KHR_maintenance2", 1 }, + { 57, "VK_KHR_maintenance3", 1 }, + { 58, "VK_KHR_maintenance4", 2 }, + { 59, "VK_KHR_multiview", 1 }, + { 60, "VK_KHR_relaxed_block_layout", 1 }, + { 61, "VK_KHR_sampler_mirror_clamp_to_edge", 3 }, + { 62, "VK_KHR_sampler_ycbcr_conversion", 14 }, + { 63, "VK_KHR_separate_depth_stencil_layouts", 1 }, + { 64, "VK_KHR_shader_atomic_int64", 1 }, + { 65, "VK_KHR_shader_draw_parameters", 1 }, + { 66, "VK_KHR_shader_float16_int8", 1 }, + { 67, "VK_KHR_shader_float_controls", 4 }, + { 68, "VK_KHR_shader_integer_dot_product", 1 }, + { 69, "VK_KHR_shader_non_semantic_info", 1 }, + { 70, "VK_KHR_shader_subgroup_extended_types", 1 }, + { 71, "VK_KHR_shader_terminate_invocation", 1 }, + { 72, "VK_KHR_spirv_1_4", 1 }, + { 73, "VK_KHR_storage_buffer_storage_class", 1 }, + { 74, "VK_KHR_synchronization2", 1 }, + { 75, "VK_KHR_timeline_semaphore", 2 }, + { 76, "VK_KHR_uniform_buffer_standard_layout", 1 }, + { 77, "VK_KHR_variable_pointers", 1 }, + { 78, "VK_KHR_vulkan_memory_model", 3 }, + { 79, "VK_KHR_zero_initialize_workgroup_memory", 1 }, + { 80, "VK_MESA_venus_protocol", 100000 }, }; - return bsearch(name, vn_info_extensions, 78, + return bsearch(name, vn_info_extensions, 81, sizeof(*vn_info_extensions), vn_info_extension_compare); } diff --git a/src/venus/venus-protocol/vn_protocol_renderer_pipeline.h b/src/venus/venus-protocol/vn_protocol_renderer_pipeline.h index 344e841..25f8048 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_pipeline.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_pipeline.h @@ -707,6 +707,126 @@ vn_replace_VkPipelineRasterizationStateStreamCreateInfoEXT_handle(VkPipelineRast } while (pnext); } +/* struct VkPipelineRasterizationLineStateCreateInfoEXT chain */ + +static inline void * +vn_decode_VkPipelineRasterizationLineStateCreateInfoEXT_pnext_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPipelineRasterizationLineStateCreateInfoEXT_self_temp(struct vn_cs_decoder *dec, VkPipelineRasterizationLineStateCreateInfoEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_decode_VkLineRasterizationModeEXT(dec, &val->lineRasterizationMode); + vn_decode_VkBool32(dec, &val->stippledLineEnable); + vn_decode_uint32_t(dec, &val->lineStippleFactor); + vn_decode_uint16_t(dec, &val->lineStipplePattern); +} + +static inline void +vn_decode_VkPipelineRasterizationLineStateCreateInfoEXT_temp(struct vn_cs_decoder *dec, VkPipelineRasterizationLineStateCreateInfoEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPipelineRasterizationLineStateCreateInfoEXT_pnext_temp(dec); + vn_decode_VkPipelineRasterizationLineStateCreateInfoEXT_self_temp(dec, val); +} + +static inline void +vn_replace_VkPipelineRasterizationLineStateCreateInfoEXT_handle_self(VkPipelineRasterizationLineStateCreateInfoEXT *val) +{ + /* skip val->sType */ + /* skip val->pNext */ + /* skip val->lineRasterizationMode */ + /* skip val->stippledLineEnable */ + /* skip val->lineStippleFactor */ + /* skip val->lineStipplePattern */ +} + +static inline void +vn_replace_VkPipelineRasterizationLineStateCreateInfoEXT_handle(VkPipelineRasterizationLineStateCreateInfoEXT *val) +{ + struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val; + + do { + switch ((int32_t)pnext->sType) { + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT: + vn_replace_VkPipelineRasterizationLineStateCreateInfoEXT_handle_self((VkPipelineRasterizationLineStateCreateInfoEXT *)pnext); + break; + default: + /* ignore unknown/unsupported struct */ + break; + } + pnext = pnext->pNext; + } while (pnext); +} + +/* struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT chain */ + +static inline void * +vn_decode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_pnext_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self_temp(struct vn_cs_decoder *dec, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_decode_VkProvokingVertexModeEXT(dec, &val->provokingVertexMode); +} + +static inline void +vn_decode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_temp(struct vn_cs_decoder *dec, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_pnext_temp(dec); + vn_decode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self_temp(dec, val); +} + +static inline void +vn_replace_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_handle_self(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val) +{ + /* skip val->sType */ + /* skip val->pNext */ + /* skip val->provokingVertexMode */ +} + +static inline void +vn_replace_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_handle(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *val) +{ + struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val; + + do { + switch ((int32_t)pnext->sType) { + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: + vn_replace_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_handle_self((VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)pnext); + break; + default: + /* ignore unknown/unsupported struct */ + break; + } + pnext = pnext->pNext; + } while (pnext); +} + /* struct VkPipelineRasterizationStateCreateInfo chain */ static inline void * @@ -728,6 +848,22 @@ vn_decode_VkPipelineRasterizationStateCreateInfo_pnext_temp(struct vn_cs_decoder vn_decode_VkPipelineRasterizationStateStreamCreateInfoEXT_self_temp(dec, (VkPipelineRasterizationStateStreamCreateInfoEXT *)pnext); } break; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPipelineRasterizationLineStateCreateInfoEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPipelineRasterizationStateCreateInfo_pnext_temp(dec); + vn_decode_VkPipelineRasterizationLineStateCreateInfoEXT_self_temp(dec, (VkPipelineRasterizationLineStateCreateInfoEXT *)pnext); + } + break; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: + pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT)); + if (pnext) { + pnext->sType = stype; + pnext->pNext = vn_decode_VkPipelineRasterizationStateCreateInfo_pnext_temp(dec); + vn_decode_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_self_temp(dec, (VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)pnext); + } + break; default: /* unexpected struct */ pnext = NULL; @@ -799,6 +935,12 @@ vn_replace_VkPipelineRasterizationStateCreateInfo_handle(VkPipelineRasterization case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT: vn_replace_VkPipelineRasterizationStateStreamCreateInfoEXT_handle_self((VkPipelineRasterizationStateStreamCreateInfoEXT *)pnext); break; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT: + vn_replace_VkPipelineRasterizationLineStateCreateInfoEXT_handle_self((VkPipelineRasterizationLineStateCreateInfoEXT *)pnext); + break; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: + vn_replace_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT_handle_self((VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *)pnext); + break; default: /* ignore unknown/unsupported struct */ break; diff --git a/src/venus/venus-protocol/vn_protocol_renderer_transport.h b/src/venus/venus-protocol/vn_protocol_renderer_transport.h index 8cc01ab..641f2ab 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_transport.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_transport.h @@ -21,6 +21,63 @@ * vkGetMemoryFdPropertiesKHR */ +/* struct VkCalibratedTimestampInfoEXT chain */ + +static inline void * +vn_decode_VkCalibratedTimestampInfoEXT_pnext_temp(struct vn_cs_decoder *dec) +{ + /* no known/supported struct */ + if (vn_decode_simple_pointer(dec)) + vn_cs_decoder_set_fatal(dec); + return NULL; +} + +static inline void +vn_decode_VkCalibratedTimestampInfoEXT_self_temp(struct vn_cs_decoder *dec, VkCalibratedTimestampInfoEXT *val) +{ + /* skip val->{sType,pNext} */ + vn_decode_VkTimeDomainEXT(dec, &val->timeDomain); +} + +static inline void +vn_decode_VkCalibratedTimestampInfoEXT_temp(struct vn_cs_decoder *dec, VkCalibratedTimestampInfoEXT *val) +{ + VkStructureType stype; + vn_decode_VkStructureType(dec, &stype); + if (stype != VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT) + vn_cs_decoder_set_fatal(dec); + + val->sType = stype; + val->pNext = vn_decode_VkCalibratedTimestampInfoEXT_pnext_temp(dec); + vn_decode_VkCalibratedTimestampInfoEXT_self_temp(dec, val); +} + +static inline void +vn_replace_VkCalibratedTimestampInfoEXT_handle_self(VkCalibratedTimestampInfoEXT *val) +{ + /* skip val->sType */ + /* skip val->pNext */ + /* skip val->timeDomain */ +} + +static inline void +vn_replace_VkCalibratedTimestampInfoEXT_handle(VkCalibratedTimestampInfoEXT *val) +{ + struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val; + + do { + switch ((int32_t)pnext->sType) { + case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT: + vn_replace_VkCalibratedTimestampInfoEXT_handle_self((VkCalibratedTimestampInfoEXT *)pnext); + break; + default: + /* ignore unknown/unsupported struct */ + break; + } + pnext = pnext->pNext; + } while (pnext); +} + /* struct VkCommandStreamDescriptionMESA */ static inline void @@ -278,6 +335,67 @@ vn_decode_VkMemoryResourcePropertiesMESA_partial_temp(struct vn_cs_decoder *dec, vn_decode_VkMemoryResourcePropertiesMESA_self_partial_temp(dec, val); } +static inline void vn_decode_vkGetCalibratedTimestampsEXT_args_temp(struct vn_cs_decoder *dec, struct vn_command_vkGetCalibratedTimestampsEXT *args) +{ + vn_decode_VkDevice_lookup(dec, &args->device); + vn_decode_uint32_t(dec, &args->timestampCount); + if (vn_peek_array_size(dec)) { + const uint32_t iter_count = vn_decode_array_size(dec, args->timestampCount); + args->pTimestampInfos = vn_cs_decoder_alloc_temp(dec, sizeof(*args->pTimestampInfos) * iter_count); + if (!args->pTimestampInfos) return; + for (uint32_t i = 0; i < iter_count; i++) + vn_decode_VkCalibratedTimestampInfoEXT_temp(dec, &((VkCalibratedTimestampInfoEXT *)args->pTimestampInfos)[i]); + } else { + vn_decode_array_size(dec, args->timestampCount); + args->pTimestampInfos = NULL; + } + if (vn_peek_array_size(dec)) { + const size_t array_size = vn_decode_array_size(dec, args->timestampCount); + args->pTimestamps = vn_cs_decoder_alloc_temp(dec, sizeof(*args->pTimestamps) * array_size); + if (!args->pTimestamps) return; + } else { + vn_decode_array_size(dec, args->timestampCount); + args->pTimestamps = NULL; + } + if (vn_decode_simple_pointer(dec)) { + args->pMaxDeviation = vn_cs_decoder_alloc_temp(dec, sizeof(*args->pMaxDeviation)); + if (!args->pMaxDeviation) return; + } else { + args->pMaxDeviation = NULL; + vn_cs_decoder_set_fatal(dec); + } +} + +static inline void vn_replace_vkGetCalibratedTimestampsEXT_args_handle(struct vn_command_vkGetCalibratedTimestampsEXT *args) +{ + vn_replace_VkDevice_handle(&args->device); + /* skip args->timestampCount */ + if (args->pTimestampInfos) { + for (uint32_t i = 0; i < args->timestampCount; i++) + vn_replace_VkCalibratedTimestampInfoEXT_handle(&((VkCalibratedTimestampInfoEXT *)args->pTimestampInfos)[i]); + } + /* skip args->pTimestamps */ + /* skip args->pMaxDeviation */ +} + +static inline void vn_encode_vkGetCalibratedTimestampsEXT_reply(struct vn_cs_encoder *enc, const struct vn_command_vkGetCalibratedTimestampsEXT *args) +{ + vn_encode_VkCommandTypeEXT(enc, &(VkCommandTypeEXT){VK_COMMAND_TYPE_vkGetCalibratedTimestampsEXT_EXT}); + + vn_encode_VkResult(enc, &args->ret); + /* skip args->device */ + /* skip args->timestampCount */ + /* skip args->pTimestampInfos */ + if (args->pTimestamps) { + vn_encode_array_size(enc, args->timestampCount); + vn_encode_uint64_t_array(enc, args->pTimestamps, args->timestampCount); + } else { + vn_encode_array_size(enc, 0); + } + if (vn_encode_simple_pointer(enc, args->pMaxDeviation)) + vn_encode_uint64_t(enc, args->pMaxDeviation); +} + static inline void vn_decode_vkSetReplyCommandStreamMESA_args_temp(struct vn_cs_decoder *dec, struct vn_command_vkSetReplyCommandStreamMESA *args) { if (vn_decode_simple_pointer(dec)) { @@ -547,6 +665,35 @@ static inline void vn_encode_vkGetVenusExperimentalFeatureData100000MESA_reply(s } } +static inline void vn_dispatch_vkGetCalibratedTimestampsEXT(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) +{ + struct vn_command_vkGetCalibratedTimestampsEXT args; + + if (!ctx->dispatch_vkGetCalibratedTimestampsEXT) { + vn_cs_decoder_set_fatal(ctx->decoder); + return; + } + + vn_decode_vkGetCalibratedTimestampsEXT_args_temp(ctx->decoder, &args); + if (!args.device) { + vn_cs_decoder_set_fatal(ctx->decoder); + return; + } + + if (!vn_cs_decoder_get_fatal(ctx->decoder)) + ctx->dispatch_vkGetCalibratedTimestampsEXT(ctx, &args); + +#ifdef DEBUG + if (!vn_cs_decoder_get_fatal(ctx->decoder) && vn_dispatch_should_log_result(args.ret)) + vn_dispatch_debug_log(ctx, "vkGetCalibratedTimestampsEXT returned %d", args.ret); +#endif + + if (!vn_cs_decoder_get_fatal(ctx->decoder) && (flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT)) + vn_encode_vkGetCalibratedTimestampsEXT_reply(ctx->encoder, &args); + + vn_cs_decoder_reset_temp_pool(ctx->decoder); +} + static inline void vn_dispatch_vkSetReplyCommandStreamMESA(struct vn_dispatch_context *ctx, VkCommandFlagsEXT flags) { struct vn_command_vkSetReplyCommandStreamMESA args; diff --git a/src/venus/venus-protocol/vn_protocol_renderer_types.h b/src/venus/venus-protocol/vn_protocol_renderer_types.h index a843b91..937903d 100644 --- a/src/venus/venus-protocol/vn_protocol_renderer_types.h +++ b/src/venus/venus-protocol/vn_protocol_renderer_types.h @@ -297,6 +297,20 @@ vn_decode_uint8_t_array(struct vn_cs_decoder *dec, uint8_t *val, uint32_t count) vn_decode(dec, (size + 3) & ~3, val, size); } +/* uint16_t */ + +static inline void +vn_encode_uint16_t(struct vn_cs_encoder *enc, const uint16_t *val) +{ + vn_encode(enc, 4, val, sizeof(*val)); +} + +static inline void +vn_decode_uint16_t(struct vn_cs_decoder *dec, uint16_t *val) +{ + vn_decode(dec, 4, val, sizeof(*val)); +} + /* typedef uint32_t VkSampleMask */ static inline void @@ -1913,6 +1927,32 @@ vn_decode_VkPointClippingBehavior(struct vn_cs_decoder *dec, VkPointClippingBeha vn_decode_int32_t(dec, (int32_t *)val); } +/* enum VkTimeDomainEXT */ + +static inline void +vn_encode_VkTimeDomainEXT(struct vn_cs_encoder *enc, const VkTimeDomainEXT *val) +{ + vn_encode_int32_t(enc, (const int32_t *)val); +} + +static inline void +vn_decode_VkTimeDomainEXT(struct vn_cs_decoder *dec, VkTimeDomainEXT *val) +{ + vn_decode_int32_t(dec, (int32_t *)val); +} + +static inline void +vn_encode_VkTimeDomainEXT_array(struct vn_cs_encoder *enc, const VkTimeDomainEXT *val, uint32_t count) +{ + vn_encode_int32_t_array(enc, (const int32_t *)val, count); +} + +static inline void +vn_decode_VkTimeDomainEXT_array(struct vn_cs_decoder *dec, VkTimeDomainEXT *val, uint32_t count) +{ + vn_decode_int32_t_array(dec, (int32_t *)val, count); +} + /* enum VkSemaphoreType */ static inline void @@ -1927,6 +1967,34 @@ vn_decode_VkSemaphoreType(struct vn_cs_decoder *dec, VkSemaphoreType *val) vn_decode_int32_t(dec, (int32_t *)val); } +/* enum VkLineRasterizationModeEXT */ + +static inline void +vn_encode_VkLineRasterizationModeEXT(struct vn_cs_encoder *enc, const VkLineRasterizationModeEXT *val) +{ + vn_encode_int32_t(enc, (const int32_t *)val); +} + +static inline void +vn_decode_VkLineRasterizationModeEXT(struct vn_cs_decoder *dec, VkLineRasterizationModeEXT *val) +{ + vn_decode_int32_t(dec, (int32_t *)val); +} + +/* enum VkProvokingVertexModeEXT */ + +static inline void +vn_encode_VkProvokingVertexModeEXT(struct vn_cs_encoder *enc, const VkProvokingVertexModeEXT *val) +{ + vn_encode_int32_t(enc, (const int32_t *)val); +} + +static inline void +vn_decode_VkProvokingVertexModeEXT(struct vn_cs_decoder *dec, VkProvokingVertexModeEXT *val) +{ + vn_decode_int32_t(dec, (int32_t *)val); +} + /* enum VkTessellationDomainOrigin */ static inline void