Add extensions used in test applications
Add VK_KHR_ray_tracing_pipeline and VK_KHR_pipeline_library
extensions support which are used by some test applications.
Bug: 351729443
Test: run benchmark tests on MacOS
Change-Id: Ice76fbc1b431b6ee74b8df587719fe4f13f457a8
diff --git a/host/vulkan/VkSubDecoder.cpp b/host/vulkan/VkSubDecoder.cpp
index 9d64757..276aff9 100644
--- a/host/vulkan/VkSubDecoder.cpp
+++ b/host/vulkan/VkSubDecoder.cpp
@@ -3054,6 +3054,142 @@
break;
}
#endif
+#ifdef VK_KHR_ray_tracing_pipeline
+ case OP_vkCmdTraceRaysKHR: {
+ android::base::beginTrace("vkCmdTraceRaysKHR subdecode");
+ const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pRaygenShaderBindingTable[1];
+ const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pMissShaderBindingTable[1];
+ const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pHitShaderBindingTable[1];
+ const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pCallableShaderBindingTable[1];
+ uint32_t width;
+ uint32_t height;
+ uint32_t depth;
+ pRaygenShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pRaygenShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable),
+ readStreamPtrPtr);
+ pMissShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pMissShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable), readStreamPtrPtr);
+ pHitShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pHitShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable), readStreamPtrPtr);
+ pCallableShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pCallableShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable),
+ readStreamPtrPtr);
+ memcpy((uint32_t*)&width, *readStreamPtrPtr, sizeof(uint32_t));
+ *readStreamPtrPtr += sizeof(uint32_t);
+ memcpy((uint32_t*)&height, *readStreamPtrPtr, sizeof(uint32_t));
+ *readStreamPtrPtr += sizeof(uint32_t);
+ memcpy((uint32_t*)&depth, *readStreamPtrPtr, sizeof(uint32_t));
+ *readStreamPtrPtr += sizeof(uint32_t);
+ if (pRaygenShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate, (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable));
+ }
+ if (pMissShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate, (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable));
+ }
+ if (pHitShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate, (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable));
+ }
+ if (pCallableShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate,
+ (VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable));
+ }
+ vk->vkCmdTraceRaysKHR((VkCommandBuffer)dispatchHandle, pRaygenShaderBindingTable,
+ pMissShaderBindingTable, pHitShaderBindingTable,
+ pCallableShaderBindingTable, width, height, depth);
+ android::base::endTrace();
+ break;
+ }
+ case OP_vkCmdTraceRaysIndirectKHR: {
+ android::base::beginTrace("vkCmdTraceRaysIndirectKHR subdecode");
+ const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pRaygenShaderBindingTable[1];
+ const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pMissShaderBindingTable[1];
+ const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pHitShaderBindingTable[1];
+ const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable;
+ VkStridedDeviceAddressRegionKHR stack_pCallableShaderBindingTable[1];
+ VkDeviceAddress indirectDeviceAddress;
+ pRaygenShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pRaygenShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable),
+ readStreamPtrPtr);
+ pMissShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pMissShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable), readStreamPtrPtr);
+ pHitShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pHitShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable), readStreamPtrPtr);
+ pCallableShaderBindingTable =
+ (VkStridedDeviceAddressRegionKHR*)stack_pCallableShaderBindingTable;
+ reservedunmarshal_VkStridedDeviceAddressRegionKHR(
+ readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+ (VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable),
+ readStreamPtrPtr);
+ memcpy((VkDeviceAddress*)&indirectDeviceAddress, *readStreamPtrPtr,
+ sizeof(VkDeviceAddress));
+ *readStreamPtrPtr += sizeof(VkDeviceAddress);
+ if (pRaygenShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate, (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable));
+ }
+ if (pMissShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate, (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable));
+ }
+ if (pHitShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate, (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable));
+ }
+ if (pCallableShaderBindingTable) {
+ transform_tohost_VkStridedDeviceAddressRegionKHR(
+ globalstate,
+ (VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable));
+ }
+ vk->vkCmdTraceRaysIndirectKHR((VkCommandBuffer)dispatchHandle,
+ pRaygenShaderBindingTable, pMissShaderBindingTable,
+ pHitShaderBindingTable, pCallableShaderBindingTable,
+ indirectDeviceAddress);
+ android::base::endTrace();
+ break;
+ }
+ case OP_vkCmdSetRayTracingPipelineStackSizeKHR: {
+ android::base::beginTrace("vkCmdSetRayTracingPipelineStackSizeKHR subdecode");
+ uint32_t pipelineStackSize;
+ memcpy((uint32_t*)&pipelineStackSize, *readStreamPtrPtr, sizeof(uint32_t));
+ *readStreamPtrPtr += sizeof(uint32_t);
+ vk->vkCmdSetRayTracingPipelineStackSizeKHR((VkCommandBuffer)dispatchHandle,
+ pipelineStackSize);
+ android::base::endTrace();
+ break;
+ }
+#endif
default: {
GFXSTREAM_ABORT(::emugl::FatalError(::emugl::ABORT_REASON_OTHER))
<< "Unrecognized opcode " << opcode;